X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=options.c;h=99996f997f6c21dd98195fce3e5605c585a8c076;hp=839af0bffbdc5f3d4e2c5c6488ef6d7debadef4b;hb=1e154bdbf14a1d352117aea057035235b66f0381;hpb=dd19ee6d101147473a02e2ed965459cfa3fbfe59 diff --git a/options.c b/options.c index 839af0bf..99996f99 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 + 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); + + strip_blank_front(&str); + strip_blank_end(str); - fill_cpu_mask(&td->o.cpumask, *val); + 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) { @@ -294,6 +313,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 +369,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 +377,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 +386,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 +398,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)", }, { @@ -547,6 +573,14 @@ static struct fio_option options[] = { .oval = VERIFY_CRC32, .help = "Use crc32 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 = "md5", .oval = VERIFY_MD5, .help = "Use md5 checksums for verification", @@ -775,6 +809,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",