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;
.has_arg = no_argument,
.val = 'S',
},
+ { .name = (char *) "daemonize",
+ .has_arg = no_argument,
+ .val = 'D',
+ },
{
.name = (char *) "net-port",
.has_arg = required_argument,
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);
{
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
{ .name = "mutex", .shift = FD_MUTEX },
{ .name = "profile", .shift = FD_PROFILE },
{ .name = "time", .shift = FD_TIME },
+ { .name = "net", .shift = FD_NET },
{ .name = NULL, },
};
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) {
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)
}
is_backend = 1;
break;
+ case 'D':
+ daemonize_server = 1;
+ break;
case 'P':
fio_net_port = atoi(optarg);
break;
exit_val = 1;
break;
}
+ if (do_exit)
+ break;
}
if (do_exit)
}
if (is_backend)
- return fio_server();
+ return fio_start_server(daemonize_server);
if (td) {
if (!ret)
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);