X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;ds=sidebyside;f=client.c;h=7b8dc61e4365aa4fd191d4ad0adf084b950ba037;hb=f681d0bac9c42e5d6bcb3601d2f3cfaa1c2cefb4;hp=5dcc5f5410bf712e1947b1e66391eaab7335a545;hpb=61b29c20eb4b1d374636d5325fb56c0fa9a574ad;p=fio.git diff --git a/client.c b/client.c index 5dcc5f54..7b8dc61e 100644 --- a/client.c +++ b/client.c @@ -111,6 +111,10 @@ void fio_put_client(struct fio_client *client) free(client->argv); if (client->name) free(client->name); + while (client->nr_ini_file) + free(client->ini_file[--client->nr_ini_file]); + if (client->ini_file) + free(client->ini_file); free(client); } @@ -227,6 +231,19 @@ err: return NULL; } +void fio_client_add_ini_file(void *cookie, const char *ini_file) +{ + struct fio_client *client = cookie; + size_t new_size; + + dprint(FD_NET, "client <%s>: add ini %s\n", client->hostname, ini_file); + + new_size = (client->nr_ini_file + 1) * sizeof(char *); + client->ini_file = realloc(client->ini_file, new_size); + client->ini_file[client->nr_ini_file] = strdup(ini_file); + client->nr_ini_file++; +} + int fio_client_add(struct client_ops *ops, const char *hostname, void **cookie) { struct fio_client *existing = *cookie; @@ -420,6 +437,14 @@ static void client_signal_handler(void) act.sa_flags = SA_RESTART; sigaction(SIGTERM, &act, NULL); +/* Windows uses SIGBREAK as a quit signal from other applications */ +#ifdef WIN32 + memset(&act, 0, sizeof(act)); + act.sa_handler = sig_int; + act.sa_flags = SA_RESTART; + sigaction(SIGBREAK, &act, NULL); +#endif + memset(&act, 0, sizeof(act)); act.sa_handler = sig_show_status; act.sa_flags = SA_RESTART; @@ -620,7 +645,18 @@ int fio_clients_send_ini(const char *filename) flist_for_each_safe(entry, tmp, &client_list) { client = flist_entry(entry, struct fio_client, list); - if (fio_client_send_ini(client, filename)) + if (client->nr_ini_file) { + int i; + + for (i = 0; i < client->nr_ini_file; i++) { + const char *ini = client->ini_file[i]; + + if (fio_client_send_ini(client, ini)) { + remove_client(client); + break; + } + } + } else if (!filename || fio_client_send_ini(client, filename)) remove_client(client); } @@ -662,7 +698,7 @@ static void convert_ts(struct thread_stat *dst, struct thread_stat *src) dst->pid = le32_to_cpu(src->pid); dst->members = le32_to_cpu(src->members); - for (i = 0; i < 2; i++) { + for (i = 0; i < DDIR_RWDIR_CNT; i++) { convert_io_stat(&dst->clat_stat[i], &src->clat_stat[i]); convert_io_stat(&dst->slat_stat[i], &src->slat_stat[i]); convert_io_stat(&dst->lat_stat[i], &src->lat_stat[i]); @@ -694,7 +730,7 @@ static void convert_ts(struct thread_stat *dst, struct thread_stat *src) dst->io_u_lat_m[i] = le32_to_cpu(src->io_u_lat_m[i]); } - for (i = 0; i < 2; i++) + for (i = 0; i < DDIR_RWDIR_CNT; i++) for (j = 0; j < FIO_IO_U_PLAT_NR; j++) dst->io_u_plat[i][j] = le32_to_cpu(src->io_u_plat[i][j]); @@ -706,7 +742,7 @@ static void convert_ts(struct thread_stat *dst, struct thread_stat *src) dst->total_submit = le64_to_cpu(src->total_submit); dst->total_complete = le64_to_cpu(src->total_complete); - for (i = 0; i < 2; i++) { + for (i = 0; i < DDIR_RWDIR_CNT; i++) { dst->io_bytes[i] = le64_to_cpu(src->io_bytes[i]); dst->runtime[i] = le64_to_cpu(src->runtime[i]); } @@ -722,7 +758,7 @@ static void convert_gs(struct group_run_stats *dst, struct group_run_stats *src) { int i; - for (i = 0; i < 2; i++) { + for (i = 0; i < DDIR_RWDIR_CNT; i++) { dst->max_run[i] = le64_to_cpu(src->max_run[i]); dst->min_run[i] = le64_to_cpu(src->min_run[i]); dst->max_bw[i] = le64_to_cpu(src->max_bw[i]); @@ -822,7 +858,7 @@ static void handle_du(struct fio_client *client, struct fio_net_cmd *cmd) log_info("\nDisk stats (read/write):\n"); } - print_disk_util(&du->dus, &du->agg, terse_output); + print_disk_util(&du->dus, &du->agg, output_format == FIO_OUTPUT_TERSE); } static void convert_jobs_eta(struct jobs_eta *je) @@ -834,11 +870,11 @@ static void convert_jobs_eta(struct jobs_eta *je) je->nr_pending = le32_to_cpu(je->nr_pending); je->files_open = le32_to_cpu(je->files_open); - for (i = 0; i < 2; i++) { - je->m_rate[i] = le32_to_cpu(je->m_rate[i]); - je->t_rate[i] = le32_to_cpu(je->t_rate[i]); - je->m_iops[i] = le32_to_cpu(je->m_iops[i]); - je->t_iops[i] = le32_to_cpu(je->t_iops[i]); + for (i = 0; i < DDIR_RWDIR_CNT; i++) { + je->m_rate[i] = le32_to_cpu(je->m_rate[i]); + je->t_rate[i] = le32_to_cpu(je->t_rate[i]); + je->m_iops[i] = le32_to_cpu(je->m_iops[i]); + je->t_iops[i] = le32_to_cpu(je->t_iops[i]); je->rate[i] = le32_to_cpu(je->rate[i]); je->iops[i] = le32_to_cpu(je->iops[i]); } @@ -846,6 +882,7 @@ static void convert_jobs_eta(struct jobs_eta *je) je->elapsed_sec = le64_to_cpu(je->elapsed_sec); je->eta_sec = le64_to_cpu(je->eta_sec); je->nr_threads = le32_to_cpu(je->nr_threads); + je->is_pow2 = le32_to_cpu(je->is_pow2); } void fio_client_sum_jobs_eta(struct jobs_eta *dst, struct jobs_eta *je) @@ -857,7 +894,7 @@ void fio_client_sum_jobs_eta(struct jobs_eta *dst, struct jobs_eta *je) dst->nr_pending += je->nr_pending; dst->files_open += je->files_open; - for (i = 0; i < 2; i++) { + for (i = 0; i < DDIR_RWDIR_CNT; i++) { dst->m_rate[i] += je->m_rate[i]; dst->t_rate[i] += je->t_rate[i]; dst->m_iops[i] += je->m_iops[i]; @@ -966,9 +1003,9 @@ static void handle_probe(struct fio_client *client, struct fio_net_cmd *cmd) sprintf(bit, "%d-bit", probe->bpp * 8); - log_info("hostname=%s, be=%u, %s, os=%s, arch=%s, fio=%u.%u.%u\n", + log_info("hostname=%s, be=%u, %s, os=%s, arch=%s, fio=%s\n", probe->hostname, probe->bigendian, bit, os, arch, - probe->fio_major, probe->fio_minor, probe->fio_patch); + probe->fio_version); if (!client->name) client->name = strdup((char *) probe->hostname);