X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=options.c;h=7f4ed2db994b9a6d1b2ccbf003b3ac81277e018e;hp=130dc8c784b5f6f0ae67fd60550cd944073f91ea;hb=afdf935261b23cdf08214e708133318548ddf2c4;hpb=546a9142511875524850ac92776184fd9fb7196e diff --git a/options.c b/options.c index 130dc8c7..7f4ed2db 100644 --- a/options.c +++ b/options.c @@ -8,6 +8,7 @@ #include "fio.h" #include "parse.h" +#include "fls.h" #define td_var_offset(var) ((size_t) &((struct thread_options *)0)->var) @@ -203,17 +204,37 @@ static int str_opendir_cb(void *data, const char fio_unused *str) return add_dir_files(td, td->o.opendir); } -static int str_header_offset_cb(void *data, unsigned int *off) +static int str_verify_offset_cb(void *data, unsigned int *off) { struct thread_data *td = data; + if (*off && *off < sizeof(struct verify_header)) { - log_err("fio: header_offset too small\n"); + log_err("fio: verify_offset too small\n"); return 1; } - td->o.header_offset = *off; + + td->o.verify_offset = *off; return 0; } +static int str_verify_pattern_cb(void *data, unsigned int *off) +{ + struct thread_data *td = data; + unsigned int msb; + + msb = fls(*off); + if (msb <= 8) + td->o.verify_pattern_bytes = 1; + else if (msb <= 16) + td->o.verify_pattern_bytes = 2; + else if (msb <= 24) + td->o.verify_pattern_bytes = 3; + else + td->o.verify_pattern_bytes = 4; + + td->o.verify_pattern = *off; + return 0; +} #define __stringify_1(x) #x #define __stringify(x) __stringify_1(x) @@ -369,12 +390,14 @@ static struct fio_option options[] = { .type = FIO_OPT_INT, .off1 = td_var_offset(iodepth_batch), .help = "Number of IO to submit in one go", + .parent = "iodepth", }, { .name = "iodepth_low", .type = FIO_OPT_INT, .off1 = td_var_offset(iodepth_low), .help = "Low water mark for queuing depth", + .parent = "iodepth", }, { .name = "size", @@ -600,6 +623,14 @@ static struct fio_option options[] = { .oval = VERIFY_CRC7, .help = "Use crc7 checksums for verification", }, + { .ival = "sha256", + .oval = VERIFY_SHA256, + .help = "Use sha256 checksums for verification", + }, + { .ival = "sha512", + .oval = VERIFY_SHA512, + .help = "Use sha512 checksums for verification", + }, { .ival = "null", .oval = VERIFY_NULL, @@ -615,18 +646,27 @@ static struct fio_option options[] = { .def = "1", }, { - .name = "header_interval", + .name = "verify_interval", .type = FIO_OPT_STR_VAL_INT, - .off1 = td_var_offset(header_interval), - .help = "Store buffer header every N bytes", - .def = "0", + .off1 = td_var_offset(verify_interval), + .minval = 2 * sizeof(struct verify_header), + .help = "Store verify buffer header every N bytes", + .parent = "verify", }, { - .name = "header_offset", + .name = "verify_offset", .type = FIO_OPT_STR_VAL_INT, - .help = "Offset header location by N bytes", + .help = "Offset verify header location by N bytes", .def = "0", - .cb = str_header_offset_cb, + .cb = str_verify_offset_cb, + .parent = "verify", + }, + { + .name = "verify_pattern", + .type = FIO_OPT_INT, + .cb = str_verify_pattern_cb, + .help = "Fill pattern for IO buffers", + .parent = "verify", }, { .name = "write_iolog", @@ -681,13 +721,6 @@ static struct fio_option options[] = { .help = "Lock down this amount of memory", .def = "0", }, - { - .name = "rwmixcycle", - .type = FIO_OPT_INT, - .off1 = td_var_offset(rwmixcycle), - .help = "Cycle period for mixed read/write workloads (msec)", - .def = "500", - }, { .name = "rwmixread", .type = FIO_OPT_INT, @@ -704,6 +737,14 @@ static struct fio_option options[] = { .help = "Percentage of mixed workload that is writes", .def = "50", }, + { + .name = "rwmixcycle", + .type = FIO_OPT_INT, + .off1 = td_var_offset(rwmixcycle), + .help = "Cycle period for mixed read/write workloads (msec)", + .def = "500", + .parent = "rwmixread", + }, { .name = "nice", .type = FIO_OPT_INT, @@ -744,6 +785,7 @@ static struct fio_option options[] = { .off1 = td_var_offset(thinktime_spin), .help = "Start think time by spinning this amount (usec)", .def = "0", + .parent = "thinktime", }, { .name = "thinktime_blocks", @@ -751,6 +793,7 @@ static struct fio_option options[] = { .off1 = td_var_offset(thinktime_blocks), .help = "IO buffer period between 'thinktime'", .def = "1", + .parent = "thinktime", }, { .name = "rate", @@ -763,6 +806,7 @@ static struct fio_option options[] = { .type = FIO_OPT_INT, .off1 = td_var_offset(ratemin), .help = "Job must meet this rate or it will be shutdown", + .parent = "rate", }, { .name = "rate_iops", @@ -775,6 +819,7 @@ static struct fio_option options[] = { .type = FIO_OPT_INT, .off1 = td_var_offset(rate_iops_min), .help = "Job must meet this rate or it will be shutdown", + .parent = "rate_iops", }, { .name = "ratecycle", @@ -782,6 +827,7 @@ static struct fio_option options[] = { .off1 = td_var_offset(ratecycle), .help = "Window average for rate limits (msec)", .def = "1000", + .parent = "rate", }, { .name = "invalidate",