X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=init.c;h=40a699c56f81df1fb12e402c6e808123d5319672;hp=1dcb4904da330dd090cba383dcce9c1471b6e523;hb=c7d5c941db51482ba196ef888fdd44f285363946;hpb=a37f69b72a74cbde6151458b890aab8d093f0c9f diff --git a/init.c b/init.c index 1dcb4904..40a699c5 100644 --- a/init.c +++ b/init.c @@ -47,6 +47,7 @@ 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; @@ -161,6 +162,10 @@ 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, @@ -659,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); @@ -1016,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 @@ -1102,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, }, }; @@ -1191,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) { @@ -1272,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) @@ -1316,6 +1332,9 @@ static int parse_cmd_line(int argc, char *argv[]) } is_backend = 1; break; + case 'D': + daemonize_server = 1; + break; case 'P': fio_net_port = atoi(optarg); break; @@ -1333,6 +1352,8 @@ static int parse_cmd_line(int argc, char *argv[]) exit_val = 1; break; } + if (do_exit) + break; } if (do_exit) @@ -1345,7 +1366,7 @@ static int parse_cmd_line(int argc, char *argv[]) } if (is_backend) - return fio_server(); + return fio_start_server(daemonize_server); if (td) { if (!ret) @@ -1372,24 +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 (nr_clients) { if (fio_clients_send_ini(ini_file[i])) return 1; - } else { + 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[i]); } free(ini_file);