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;
.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.
*/
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);
" (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 <jens.axboe@oracle.com>");
printf("\n Jens Axboe <jaxboe@fusionio.com>\n");
}
{ .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) {
}
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;
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)
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);
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]);