static int did_arg;
const fio_fp64_t def_percentile_list[FIO_IO_U_LIST_MAX_LEN] = {
- { .u.f = 1.0 },
- { .u.f = 5.0 },
- { .u.f = 10.0 },
- { .u.f = 20.0 },
- { .u.f = 30.0 },
- { .u.f = 40.0 },
- { .u.f = 50.0 },
- { .u.f = 60.0 },
- { .u.f = 70.0 },
- { .u.f = 80.0 },
- { .u.f = 90.0 },
- { .u.f = 95.0 },
- { .u.f = 99.0 },
- { .u.f = 99.5 },
- { .u.f = 99.9 },
+ { .u.f = 1.00 },
+ { .u.f = 5.00 },
+ { .u.f = 10.00 },
+ { .u.f = 20.00 },
+ { .u.f = 30.00 },
+ { .u.f = 40.00 },
+ { .u.f = 50.00 },
+ { .u.f = 60.00 },
+ { .u.f = 70.00 },
+ { .u.f = 80.00 },
+ { .u.f = 90.00 },
+ { .u.f = 95.00 },
+ { .u.f = 99.00 },
+ { .u.f = 99.50 },
+ { .u.f = 99.90 },
+ { .u.f = 99.95 },
+ { .u.f = 99.99 },
};
#define FIO_CLIENT_FLAG (1 << 16)
/*
* This function leaks the buffer
*/
-static char *to_kmg(unsigned int val)
+char *fio_uint_to_kmg(unsigned int val)
{
char *buf = malloc(32);
char post[] = { 0, 'K', 'M', 'G', 'P', 'E', 0 };
* members of td.
*/
static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
- int recursed)
+ int recursed, int client_type)
{
unsigned int i;
char fname[PATH_MAX];
return 0;
}
+ td->client_type = client_type;
+
if (profile_td_init(td))
goto err;
goto err;
if (td->o.write_lat_log) {
- setup_log(&td->lat_log, td->o.log_avg_msec);
- setup_log(&td->slat_log, td->o.log_avg_msec);
- setup_log(&td->clat_log, td->o.log_avg_msec);
+ setup_log(&td->lat_log, td->o.log_avg_msec, IO_LOG_TYPE_LAT);
+ setup_log(&td->slat_log, td->o.log_avg_msec, IO_LOG_TYPE_SLAT);
+ setup_log(&td->clat_log, td->o.log_avg_msec, IO_LOG_TYPE_CLAT);
}
if (td->o.write_bw_log)
- setup_log(&td->bw_log, td->o.log_avg_msec);
+ setup_log(&td->bw_log, td->o.log_avg_msec, IO_LOG_TYPE_BW);
if (td->o.write_iops_log)
- setup_log(&td->iops_log, td->o.log_avg_msec);
+ setup_log(&td->iops_log, td->o.log_avg_msec, IO_LOG_TYPE_IOPS);
if (!td->o.name)
td->o.name = strdup(jobname);
if (!terse_output) {
if (!job_add_num) {
if (is_backend && !recursed)
- fio_server_send_add_job(&td->o, td->io_ops->name);
+ fio_server_send_add_job(td);
if (!strcmp(td->io_ops->name, "cpuio")) {
log_info("%s: ioengine=cpu, cpuload=%u,"
} else {
char *c1, *c2, *c3, *c4;
- c1 = to_kmg(td->o.min_bs[DDIR_READ]);
- c2 = to_kmg(td->o.max_bs[DDIR_READ]);
- c3 = to_kmg(td->o.min_bs[DDIR_WRITE]);
- c4 = to_kmg(td->o.max_bs[DDIR_WRITE]);
+ c1 = fio_uint_to_kmg(td->o.min_bs[DDIR_READ]);
+ c2 = fio_uint_to_kmg(td->o.max_bs[DDIR_READ]);
+ c3 = fio_uint_to_kmg(td->o.min_bs[DDIR_WRITE]);
+ c4 = fio_uint_to_kmg(td->o.max_bs[DDIR_WRITE]);
log_info("%s: (g=%d): rw=%s, bs=%s-%s/%s-%s,"
" ioengine=%s, iodepth=%u\n",
job_add_num = numjobs - 1;
- if (add_job(td_new, jobname, job_add_num, 1))
+ if (add_job(td_new, jobname, job_add_num, 1, client_type))
goto err;
}
/*
* Parse as if 'o' was a command line
*/
-void add_job_opts(const char **o)
+void add_job_opts(const char **o, int client_type)
{
struct thread_data *td, *td_parent;
int i, in_global = 1;
if (!strncmp(o[i], "name", 4)) {
in_global = 0;
if (td)
- add_job(td, jobname, 0, 0);
+ add_job(td, jobname, 0, 0, client_type);
td = NULL;
sprintf(jobname, "%s", o[i] + 5);
}
}
if (td)
- add_job(td, jobname, 0, 0);
+ add_job(td, jobname, 0, 0, client_type);
}
static int skip_this_section(const char *name)
/*
* This is our [ini] type file parser.
*/
-int parse_jobs_ini(char *file, int is_buf, int stonewall_flag)
+int parse_jobs_ini(char *file, int is_buf, int stonewall_flag, int type)
{
unsigned int global;
struct thread_data *td;
for (i = 0; i < num_opts; i++)
log_info("--%s ", opts[i]);
- ret = add_job(td, name, 0, 0);
+ ret = add_job(td, name, 0, 0, type);
} else {
log_err("fio: job %s dropped\n", name);
put_job(td);
fio_client_add_cmd_option(client, opt);
}
-int parse_cmd_line(int argc, char *argv[])
+int parse_cmd_line(int argc, char *argv[], int client_type)
{
struct thread_data *td = NULL;
int c, ini_idx = 0, lidx, ret = 0, do_exit = 0, exit_val = 0;
char *val = optarg;
if (!strncmp(opt, "name", 4) && td) {
- ret = add_job(td, td->o.name ?: "fio", 0, 0);
+ ret = add_job(td, td->o.name ?: "fio", 0, 0, client_type);
if (ret)
return 0;
td = NULL;
if (td) {
if (!ret)
- ret = add_job(td, td->o.name ?: "fio", 0, 0);
+ ret = add_job(td, td->o.name ?: "fio", 0, 0, client_type);
}
while (!ret && optind < argc) {
int parse_options(int argc, char *argv[])
{
+ const int type = FIO_CLIENT_TYPE_CLI;
int job_files, i;
if (fio_init_options())
if (fio_test_cconv(&def_thread.o))
log_err("fio: failed internal cconv test\n");
- job_files = parse_cmd_line(argc, argv);
+ job_files = parse_cmd_line(argc, argv, type);
if (job_files > 0) {
for (i = 0; i < job_files; i++) {
return 1;
free(ini_file[i]);
} else if (!is_backend) {
- if (parse_jobs_ini(ini_file[i], 0, i))
+ if (parse_jobs_ini(ini_file[i], 0, i, type))
return 1;
free(ini_file[i]);
}