The following changes since commit 58a525d85eecbab1131d6d54e24b8b9c0dd906d6: example: add SSD steady state test case (2012-08-22 20:44:24 +0200) are available in the git repository at: git://git.kernel.dk/fio.git master Jens Axboe (2): client: support per-client job files README: update for newer client job file argument format README | 2 +- client.c | 33 ++++++++++++++++++++++++++++++++- init.c | 17 +++++++++++++++++ server.h | 1 + 4 files changed, 51 insertions(+), 2 deletions(-) --- Diff of recent changes: diff --git a/README b/README index c21fb6a..8bce835 100644 --- a/README +++ b/README @@ -362,7 +362,7 @@ are sent to the server. The 'server' string follows the same format as it does on the server side, to allow IP/hostname/socket and port strings. You can connect to multiple clients as well, to do that you could run: -fio --client=server2 --client=server2 <job file(s)> +fio --client=server2 <job file(s)> --client=server2 <job file(s)> Platforms diff --git a/client.c b/client.c index 7c99109..50c1704 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; @@ -521,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; diff --git a/init.c b/init.c index 475a6ad..824828c 100644 --- a/init.c +++ b/init.c @@ -1534,6 +1534,18 @@ int parse_cmd_line(int argc, char *argv[]) exit_val = 1; break; } + /* + * If the next argument exists and isn't an option, + * assume it's a job file for this client only. + */ + while (optind < argc) { + if (!strncmp(argv[optind], "--", 2) || + !strncmp(argv[optind], "-", 1)) + break; + + fio_client_add_ini_file(cur_client, argv[optind]); + optind++; + } break; default: do_exit++; @@ -1604,6 +1616,11 @@ int parse_options(int argc, char *argv[]) free(ini_file[i]); } } + } else if (nr_clients) { + if (fill_def_thread()) + return 1; + if (fio_clients_send_ini(NULL)) + return 1; } free(ini_file); diff --git a/server.h b/server.h index 6d5a83d..9bf8907 100644 --- a/server.h +++ b/server.h @@ -124,6 +124,7 @@ extern int fio_clients_send_ini(const char *); extern int fio_handle_clients(void); extern int fio_client_add(const char *, void **); extern void fio_client_add_cmd_option(void *, const char *); +extern void fio_client_add_ini_file(void *, const char *); extern int fio_recv_data(int sk, void *p, unsigned int len); extern int fio_send_data(int sk, const void *p, unsigned int len); -- To unsubscribe from this list: send the line "unsubscribe fio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html