X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=init.c;h=40a699c56f81df1fb12e402c6e808123d5319672;hp=5d5709110c22d1519becdbbd5d9082dc0f853b06;hb=c7d5c941db51482ba196ef888fdd44f285363946;hpb=50d16976ac0cd44c1f5aba9217148ff05e141436 diff --git a/init.c b/init.c index 5d570911..40a699c5 100644 --- a/init.c +++ b/init.c @@ -46,6 +46,8 @@ char *exec_profile = NULL; int warnings_fatal = 0; int terse_version = 2; int is_backend = 0; +int nr_clients = 0; +int log_syslog = 0; int write_bw_log = 0; int read_only = 0; @@ -160,21 +162,25 @@ static struct option l_opts[FIO_NR_OPTIONS] = { .has_arg = no_argument, .val = 'S', }, + { .name = (char *) "daemonize", + .has_arg = no_argument, + .val = 'D', + }, + { + .name = (char *) "net-port", + .has_arg = required_argument, + .val = 'P', + }, + { + .name = (char *) "client", + .has_arg = required_argument, + .val = 'C', + }, { .name = NULL, }, }; -FILE *get_f_out() -{ - return f_out; -} - -FILE *get_f_err() -{ - return f_err; -} - /* * Return a free job structure. */ @@ -658,12 +664,12 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num) goto err; if (td->o.write_lat_log) { - setup_log(&td->ts.lat_log); - setup_log(&td->ts.slat_log); - setup_log(&td->ts.clat_log); + setup_log(&td->lat_log); + setup_log(&td->slat_log); + setup_log(&td->clat_log); } if (td->o.write_bw_log) - setup_log(&td->ts.bw_log); + setup_log(&td->bw_log); if (!td->o.name) td->o.name = strdup(jobname); @@ -1015,6 +1021,9 @@ static int setup_thread_area(void) { void *hash; + if (threads) + return 0; + /* * 1024 is too much on some machines, scale max_jobs if * we get a failure that looks like too large a shm segment @@ -1079,6 +1088,9 @@ static void usage(const char *name) " (def 1024)\n"); printf("\t--warnings-fatal Fio parser warnings are fatal\n"); printf("\t--max-jobs\tMaximum number of threads/processes to support\n"); + printf("\t--server\tStart a backend fio server\n"); + printf("\t--client=hostname Talk to remove backend fio server at hostname\n"); + printf("\t--net-port=port\tUse specified port for client/server connection\n"); printf("\nFio was written by Jens Axboe "); printf("\n Jens Axboe \n"); } @@ -1098,6 +1110,7 @@ struct debug_level debug_levels[] = { { .name = "mutex", .shift = FD_MUTEX }, { .name = "profile", .shift = FD_PROFILE }, { .name = "time", .shift = FD_TIME }, + { .name = "net", .shift = FD_NET }, { .name = NULL, }, }; @@ -1187,6 +1200,7 @@ static int parse_cmd_line(int argc, char *argv[]) struct thread_data *td = NULL; int c, ini_idx = 0, lidx, ret = 0, do_exit = 0, exit_val = 0; char *ostr = cmd_optstr; + int daemonize_server = 0; while ((c = getopt_long_only(argc, argv, ostr, l_opts, &lidx)) != -1) { switch (c) { @@ -1268,6 +1282,12 @@ static int parse_cmd_line(int argc, char *argv[]) const char *opt = l_opts[lidx].name; char *val = optarg; + if (setup_thread_area()) { + do_exit++; + exit_val = 1; + break; + } + if (!strncmp(opt, "name", 4) && td) { ret = add_job(td, td->o.name ?: "fio", 0); if (ret) @@ -1304,20 +1324,49 @@ static int parse_cmd_line(int argc, char *argv[]) } break; case 'S': + if (nr_clients) { + log_err("fio: can't be both client and server\n"); + do_exit++; + exit_val = 1; + break; + } is_backend = 1; break; + case 'D': + daemonize_server = 1; + break; + case 'P': + fio_net_port = atoi(optarg); + break; + case 'C': + if (is_backend) { + log_err("fio: can't be both client and server\n"); + do_exit++; + exit_val = 1; + break; + } + fio_client_add(optarg); + break; default: do_exit++; exit_val = 1; break; } + if (do_exit) + break; } if (do_exit) exit(exit_val); + if (nr_clients && fio_clients_connect()) { + do_exit++; + exit_val = 1; + return 1; + } + if (is_backend) - fio_server(); + return fio_start_server(daemonize_server); if (td) { if (!ret) @@ -1344,19 +1393,29 @@ int parse_options(int argc, char *argv[]) fio_options_fill_optstring(); fio_options_dup_and_init(l_opts); - if (setup_thread_area()) - return 1; if (fill_def_thread()) return 1; job_files = parse_cmd_line(argc, argv); + /* + * Don't setup shared memory for the frontend + */ + if (!nr_clients && setup_thread_area()) + return 1; + for (i = 0; i < job_files; i++) { if (fill_def_thread()) return 1; - if (parse_jobs_ini(ini_file[i], 0, i)) - return 1; - free(ini_file[i]); + if (nr_clients) { + if (fio_clients_send_ini(ini_file[i])) + return 1; + free(ini_file[i]); + } else if (!is_backend) { + if (parse_jobs_ini(ini_file[i], 0, i)) + return 1; + free(ini_file[i]); + } } free(ini_file); @@ -1367,6 +1426,8 @@ int parse_options(int argc, char *argv[]) return 0; if (exec_profile) return 0; + if (is_backend || nr_clients) + return 0; log_err("No jobs(s) defined\n\n"); usage(argv[0]);