X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=options.c;h=23800753aa33eeb0f094cdfa5ea6c5fa793fa3df;hp=3af604bd86f4d01ac2abd4d6394960bbd8af4a47;hb=169c098dd3e2081679cf42978ea926e8dac62801;hpb=94f218f6e5ef1eb2bc9190f72df5c8d105e0bac3 diff --git a/options.c b/options.c index 3af604bd..23800753 100644 --- a/options.c +++ b/options.c @@ -22,7 +22,7 @@ char client_sockaddr_str[INET6_ADDRSTRLEN] = { 0 }; #define cb_data_to_td(data) container_of(data, struct thread_data, o) -struct pattern_fmt_desc fmt_desc[] = { +static struct pattern_fmt_desc fmt_desc[] = { { .fmt = "%o", .len = FIELD_SIZE(struct io_u *, offset), @@ -1069,8 +1069,8 @@ static int str_steadystate_cb(void *data, const char *str) char *pct; long long ll; - if (td->o.ss != FIO_SS_IOPS && td->o.ss != FIO_SS_IOPS_SLOPE && - td->o.ss != FIO_SS_BW && td->o.ss != FIO_SS_BW_SLOPE) { + if (td->o.ss_state != FIO_SS_IOPS && td->o.ss_state != FIO_SS_IOPS_SLOPE && + td->o.ss_state != FIO_SS_BW && td->o.ss_state != FIO_SS_BW_SLOPE) { /* should be impossible to get here */ log_err("fio: unknown steady state criterion\n"); return 1; @@ -1099,9 +1099,9 @@ static int str_steadystate_cb(void *data, const char *str) if (parse_dryrun()) return 0; - td->o.ss_pct = true; + td->o.ss_state |= __FIO_SS_PCT; td->o.ss_limit.u.f = val; - } else if (td->o.ss & __FIO_SS_IOPS) { + } else if (td->o.ss_state & __FIO_SS_IOPS) { if (!str_to_float(nr, &val, 0)) { log_err("fio: steadystate IOPS threshold postfix parsing failed\n"); free(nr); @@ -1113,9 +1113,7 @@ static int str_steadystate_cb(void *data, const char *str) if (parse_dryrun()) return 0; - td->o.ss_pct = false; td->o.ss_limit.u.f = val; - } else { /* bandwidth criterion */ if (str_to_decimal(nr, &ll, 1, td, 0, 0)) { log_err("fio: steadystate BW threshold postfix parsing failed\n"); @@ -1128,12 +1126,10 @@ static int str_steadystate_cb(void *data, const char *str) if (parse_dryrun()) return 0; - td->o.ss_pct = false; td->o.ss_limit.u.f = (double) ll; - } - td->ss.state = td->o.ss; + td->ss.state = td->o.ss_state; return 0; } @@ -1387,6 +1383,50 @@ static int str_size_cb(void *data, unsigned long long *__val) return 0; } +static int str_write_bw_log_cb(void *data, const char *str) +{ + struct thread_data *td = cb_data_to_td(data); + + if (str) + td->o.bw_log_file = strdup(str); + + td->o.write_bw_log = 1; + return 0; +} + +static int str_write_lat_log_cb(void *data, const char *str) +{ + struct thread_data *td = cb_data_to_td(data); + + if (str) + td->o.lat_log_file = strdup(str); + + td->o.write_lat_log = 1; + return 0; +} + +static int str_write_iops_log_cb(void *data, const char *str) +{ + struct thread_data *td = cb_data_to_td(data); + + if (str) + td->o.iops_log_file = strdup(str); + + td->o.write_iops_log = 1; + return 0; +} + +static int str_write_hist_log_cb(void *data, const char *str) +{ + struct thread_data *td = cb_data_to_td(data); + + if (str) + td->o.hist_log_file = strdup(str); + + td->o.write_hist_log = 1; + return 0; +} + static int rw_verify(struct fio_option *o, void *data) { struct thread_data *td = cb_data_to_td(data); @@ -1729,6 +1769,11 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { .help = "NVML libpmemblk based IO engine", }, +#endif +#ifdef CONFIG_LINUX_DEVDAX + { .ival = "dev-dax", + .help = "DAX Device based IO engine", + }, #endif { .ival = "external", .help = "Load external engine (append name)", @@ -1920,7 +1965,7 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { .off3 = offsetof(struct thread_options, bs[DDIR_TRIM]), .minval = 1, .help = "Block size unit", - .def = "4k", + .def = "4096", .parent = "rw", .hide = 1, .interval = 512, @@ -2189,7 +2234,7 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { }, { .ival = "gauss", .oval = FIO_FSERVICE_GAUSS, - .help = "Normal (guassian) distribution", + .help = "Normal (gaussian) distribution", }, { .ival = "roundrobin", .oval = FIO_FSERVICE_RR, @@ -2250,8 +2295,26 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { { .name = "fadvise_hint", .lname = "Fadvise hint", - .type = FIO_OPT_BOOL, + .type = FIO_OPT_STR, .off1 = offsetof(struct thread_options, fadvise_hint), + .posval = { + { .ival = "0", + .oval = F_ADV_NONE, + .help = "Don't issue fadvise", + }, + { .ival = "1", + .oval = F_ADV_TYPE, + .help = "Advise using fio IO pattern", + }, + { .ival = "random", + .oval = F_ADV_RANDOM, + .help = "Advise using FADV_RANDOM", + }, + { .ival = "sequential", + .oval = F_ADV_SEQUENTIAL, + .help = "Advise using FADV_SEQUENTIAL", + }, + }, .help = "Use fadvise() to advise the kernel on IO pattern", .def = "1", .category = FIO_OPT_C_FILE, @@ -2822,7 +2885,7 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { .off1 = offsetof(struct thread_options, trim_percentage), .minval = 0, .maxval = 100, - .help = "Number of verify blocks to discard/trim", + .help = "Number of verify blocks to trim (i.e., discard)", .parent = "verify", .def = "0", .interval = 1, @@ -2834,7 +2897,7 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { .name = "trim_verify_zero", .lname = "Verify trim zero", .type = FIO_OPT_BOOL, - .help = "Verify that trim/discarded blocks are returned as zeroes", + .help = "Verify that trimmed (i.e., discarded) blocks are returned as zeroes", .off1 = offsetof(struct thread_options, trim_zero), .parent = "trim_percentage", .hide = 1, @@ -3583,8 +3646,9 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { { .name = "write_bw_log", .lname = "Write bandwidth log", - .type = FIO_OPT_STR_STORE, + .type = FIO_OPT_STR, .off1 = offsetof(struct thread_options, bw_log_file), + .cb = str_write_bw_log_cb, .help = "Write log of bandwidth during run", .category = FIO_OPT_C_LOG, .group = FIO_OPT_G_INVALID, @@ -3592,8 +3656,9 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { { .name = "write_lat_log", .lname = "Write latency log", - .type = FIO_OPT_STR_STORE, + .type = FIO_OPT_STR, .off1 = offsetof(struct thread_options, lat_log_file), + .cb = str_write_lat_log_cb, .help = "Write log of latency during run", .category = FIO_OPT_C_LOG, .group = FIO_OPT_G_INVALID, @@ -3601,8 +3666,9 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { { .name = "write_iops_log", .lname = "Write IOPS log", - .type = FIO_OPT_STR_STORE, + .type = FIO_OPT_STR, .off1 = offsetof(struct thread_options, iops_log_file), + .cb = str_write_iops_log_cb, .help = "Write log of IOPS during run", .category = FIO_OPT_C_LOG, .group = FIO_OPT_G_INVALID, @@ -3642,8 +3708,9 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { { .name = "write_hist_log", .lname = "Write latency histogram logs", - .type = FIO_OPT_STR_STORE, + .type = FIO_OPT_STR, .off1 = offsetof(struct thread_options, hist_log_file), + .cb = str_write_hist_log_cb, .help = "Write log of latency histograms during run", .category = FIO_OPT_C_LOG, .group = FIO_OPT_G_INVALID, @@ -3723,6 +3790,15 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { .help = "Install libz-dev(el) to get compression support", }, #endif + { + .name = "log_unix_epoch", + .lname = "Log epoch unix", + .type = FIO_OPT_BOOL, + .off1 = offsetof(struct thread_options, log_unix_epoch), + .help = "Use Unix time in log files", + .category = FIO_OPT_C_LOG, + .group = FIO_OPT_G_INVALID, + }, { .name = "block_error_percentiles", .lname = "Block error percentiles", @@ -3939,6 +4015,7 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { }, { .name = "disable_bw_measurement", + .alias = "disable_bw", .lname = "Disable bandwidth stats", .type = FIO_OPT_BOOL, .off1 = offsetof(struct thread_options, disable_bw), @@ -4214,7 +4291,7 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { .lname = "Steady state threshold", .alias = "ss", .type = FIO_OPT_STR, - .off1 = offsetof(struct thread_options, ss), + .off1 = offsetof(struct thread_options, ss_state), .cb = str_steadystate_cb, .help = "Define the criterion and limit to judge when a job has reached steady state", .def = "iops_slope:0.01%", @@ -4244,6 +4321,7 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { .name = "steadystate_duration", .lname = "Steady state duration", .alias = "ss_dur", + .parent = "steadystate", .type = FIO_OPT_STR_VAL_TIME, .off1 = offsetof(struct thread_options, ss_dur), .help = "Stop workload upon attaining steady state for specified duration", @@ -4257,6 +4335,7 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { .name = "steadystate_ramp_time", .lname = "Steady state ramp time", .alias = "ss_ramp", + .parent = "steadystate", .type = FIO_OPT_STR_VAL_TIME, .off1 = offsetof(struct thread_options, ss_ramp_time), .help = "Delay before initiation of data collection for steady state job termination testing", @@ -4822,7 +4901,7 @@ void del_opt_posval(const char *optname, const char *ival) void fio_options_free(struct thread_data *td) { - options_free(fio_options, td); + options_free(fio_options, &td->o); if (td->eo && td->io_ops && td->io_ops->options) { options_free(td->io_ops->options, td->eo); free(td->eo);