X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=options.c;h=01d23865a968952606006e3a57dd3e3a21d323d5;hp=54ceaeed706cbaa110eff416375cbe5f5beb7393;hb=819a968068aae65bca68ddc7805c01669707b880;hpb=0a839f308177e95c4c45c41ee1d4fa2b8f231f24 diff --git a/options.c b/options.c index 54ceaeed..01d23865 100644 --- a/options.c +++ b/options.c @@ -98,27 +98,46 @@ static int str_exitall_cb(void) return 0; } -static void fill_cpu_mask(os_cpu_mask_t cpumask, int cpu) -{ #ifdef FIO_HAVE_CPU_AFFINITY +static int str_cpumask_cb(void *data, unsigned int *val) +{ + struct thread_data *td = data; unsigned int i; - CPU_ZERO(&cpumask); + CPU_ZERO(&td->o.cpumask); - for (i = 0; i < sizeof(int) * 8; i++) { - if ((1 << i) & cpu) - CPU_SET(i, &cpumask); - } -#endif + for (i = 0; i < sizeof(int) * 8; i++) + if ((1 << i) & *val) + CPU_SET(*val, &td->o.cpumask); + + td->o.cpumask_set = 1; + return 0; } -static int str_cpumask_cb(void *data, unsigned int *val) +static int str_cpus_allowed_cb(void *data, const char *input) { struct thread_data *td = data; + char *cpu, *str, *p; + + CPU_ZERO(&td->o.cpumask); + + p = str = strdup(input); - fill_cpu_mask(td->o.cpumask, *val); + strip_blank_front(&str); + strip_blank_end(str); + + while ((cpu = strsep(&str, ",")) != NULL) { + if (!strlen(cpu)) + break; + CPU_SET(atoi(cpu), &td->o.cpumask); + } + + free(p); + td->o.cpumask_set = 1; + exit(0); return 0; } +#endif static int str_fst_cb(void *data, const char *str) { @@ -184,6 +203,17 @@ 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) +{ + struct thread_data *td = data; + if (*off && *off < sizeof(struct verify_header)) { + log_err("fio: header_offset too small\n"); + return 1; + } + td->o.header_offset = *off; + return 0; +} + #define __stringify_1(x) #x #define __stringify(x) __stringify_1(x) @@ -294,6 +324,9 @@ static struct fio_option options[] = { { .ival = "splice", .help = "splice/vmsplice based IO", }, + { .ival = "netsplice", + .help = "splice/vmsplice to/from the network", + }, #endif #ifdef FIO_HAVE_SGIO { .ival = "sg", @@ -347,6 +380,7 @@ static struct fio_option options[] = { .name = "size", .type = FIO_OPT_STR_VAL, .off1 = td_var_offset(size), + .minval = 1, .help = "Total size of device or files", }, { @@ -354,6 +388,7 @@ static struct fio_option options[] = { .type = FIO_OPT_STR_VAL, .off1 = td_var_offset(file_size_low), .off2 = td_var_offset(file_size_high), + .minval = 1, .help = "Size of individual files", }, { @@ -362,6 +397,7 @@ static struct fio_option options[] = { .type = FIO_OPT_STR_VAL_INT, .off1 = td_var_offset(bs[DDIR_READ]), .off2 = td_var_offset(bs[DDIR_WRITE]), + .minval = 1, .help = "Block size unit", .def = "4k", }, @@ -373,6 +409,7 @@ static struct fio_option options[] = { .off2 = td_var_offset(max_bs[DDIR_READ]), .off3 = td_var_offset(min_bs[DDIR_WRITE]), .off4 = td_var_offset(max_bs[DDIR_WRITE]), + .minval = 1, .help = "Set block size range (in more detail than bs)", }, { @@ -543,13 +580,25 @@ static struct fio_option options[] = { .oval = VERIFY_NONE, .help = "Don't do IO verification", }, + { .ival = "md5", + .oval = VERIFY_MD5, + .help = "Use md5 checksums for verification", + }, + { .ival = "crc64", + .oval = VERIFY_CRC64, + .help = "Use crc64 checksums for verification", + }, { .ival = "crc32", .oval = VERIFY_CRC32, .help = "Use crc32 checksums for verification", }, - { .ival = "md5", - .oval = VERIFY_MD5, - .help = "Use md5 checksums for verification", + { .ival = "crc16", + .oval = VERIFY_CRC16, + .help = "Use crc16 checksums for verification", + }, + { .ival = "crc7", + .oval = VERIFY_CRC7, + .help = "Use crc7 checksums for verification", }, { .ival = "null", @@ -565,6 +614,20 @@ static struct fio_option options[] = { .help = "Sort written verify blocks for read back", .def = "1", }, + { + .name = "header_interval", + .type = FIO_OPT_STR_VAL_INT, + .off1 = td_var_offset(header_interval), + .minval = 2 * sizeof(struct verify_header), + .help = "Store buffer header every N bytes", + }, + { + .name = "header_offset", + .type = FIO_OPT_STR_VAL_INT, + .help = "Offset header location by N bytes", + .def = "0", + .cb = str_header_offset_cb, + }, { .name = "write_iolog", .type = FIO_OPT_STR_STORE, @@ -775,6 +838,12 @@ static struct fio_option options[] = { .cb = str_cpumask_cb, .help = "CPU affinity mask", }, + { + .name = "cpus_allowed", + .type = FIO_OPT_STR, + .cb = str_cpus_allowed_cb, + .help = "Set CPUs allowed", + }, #endif { .name = "end_fsync",