X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=client.c;h=50c17041bc189336688f97e99b45e210a80be4f4;hp=dd75882c54f3714db8d8ca37e7119b91be742a66;hb=c224ec052b3a5be4fba8da777dd7ccbee2fb34c1;hpb=e55f8f307385e77ea561e7bbf9c76842ead9d7a3 diff --git a/client.c b/client.c index dd75882c..50c17041 100644 --- a/client.c +++ b/client.c @@ -58,6 +58,9 @@ struct fio_client { uint16_t argc; char **argv; + + char **ini_file; + unsigned int nr_ini_file; }; static struct timeval eta_tv; @@ -151,6 +154,10 @@ static void remove_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); nr_clients--; @@ -193,6 +200,19 @@ void fio_client_add_cmd_option(void *cookie, const char *opt) } } +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(const char *hostname, void **cookie) { struct fio_client *existing = *cookie; @@ -344,6 +364,11 @@ static void sig_int(int sig) fio_clients_terminate(); } +static void sig_show_status(int sig) +{ + show_running_run_stats(); +} + static void client_signal_handler(void) { struct sigaction act; @@ -357,6 +382,11 @@ static void client_signal_handler(void) act.sa_handler = sig_int; act.sa_flags = SA_RESTART; sigaction(SIGTERM, &act, NULL); + + memset(&act, 0, sizeof(act)); + act.sa_handler = sig_show_status; + act.sa_flags = SA_RESTART; + sigaction(SIGUSR1, &act, NULL); } static void probe_client(struct fio_client *client) @@ -511,7 +541,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); client->sent_job = 1; @@ -715,6 +756,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->is_pow2 = le32_to_cpu(je->is_pow2); } static void sum_jobs_eta(struct jobs_eta *dst, struct jobs_eta *je) @@ -806,9 +848,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);