X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=init.c;h=fca74fe22bd1101f03813e19f937609ab7d1e07e;hp=e90d7355e9ee5de62c53a3c5fcc191145697103a;hb=7732a09b0a5331f20b7fdf42f811a3f2805dcaae;hpb=d24945f0f0538bea41704cbd9b593b350ca9bb0d diff --git a/init.c b/init.c index e90d7355..fca74fe2 100644 --- a/init.c +++ b/init.c @@ -207,6 +207,11 @@ static struct option l_opts[FIO_NR_OPTIONS] = { .has_arg = required_argument, .val = 'C', }, + { + .name = (char *) "cpuclock-test", + .has_arg = no_argument, + .val = 'T', + }, { .name = NULL, }, @@ -491,17 +496,8 @@ static int fixup_options(struct thread_data *td) /* * The low water mark cannot be bigger than the iodepth */ - if (o->iodepth_low > o->iodepth || !o->iodepth_low) { - /* - * syslet work around - if the workload is sequential, - * we want to let the queue drain all the way down to - * avoid seeking between async threads - */ - if (!strcmp(td->io_ops->name, "syslet-rw") && !td_random(td)) - o->iodepth_low = 1; - else - o->iodepth_low = o->iodepth; - } + if (o->iodepth_low > o->iodepth || !o->iodepth_low) + o->iodepth_low = o->iodepth; /* * If batch number isn't set, default to the same as iodepth @@ -564,7 +560,7 @@ static int fixup_options(struct thread_data *td) } } -#ifndef FIO_HAVE_FDATASYNC +#ifndef CONFIG_FDATASYNC if (o->fdatasync_blocks) { log_info("fio: this platform does not support fdatasync()" " falling back to using fsync(). Use the 'fsync'" @@ -710,7 +706,6 @@ void td_fill_rand_seeds(struct thread_data *td) init_rand_seed(&td->buf_state, td->rand_seeds[FIO_RAND_BUF_OFF]); } - /* * Initializes the ioengine configured for a job, if it has not been done so * already. @@ -785,6 +780,26 @@ static void init_flags(struct thread_data *td) td->flags |= TD_F_VER_NONE; } +static int setup_random_seeds(struct thread_data *td) +{ + unsigned long seed; + unsigned int i; + + if (!td->o.rand_repeatable) + return init_random_state(td, td->rand_seeds, sizeof(td->rand_seeds)); + + for (seed = 0x89, i = 0; i < 4; i++) + seed *= 0x9e370001UL; + + for (i = 0; i < FIO_RAND_NR_OFFS; i++) { + td->rand_seeds[i] = seed; + seed *= 0x9e370001UL; + } + + td_fill_rand_seeds(td); + return 0; +} + /* * Adds a job to the list of things todo. Sanitizes the various options * to make sure we don't have conflicts, and initializes various @@ -887,7 +902,7 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num) td->groupid = groupid; prev_group_jobs++; - if (init_random_state(td, td->rand_seeds, sizeof(td->rand_seeds))) { + if (setup_random_seeds(td)) { td_verror(td, errno, "init_random_state"); goto err; } @@ -1255,6 +1270,7 @@ static void usage(const char *name) printf(" --terse-version=x\tSet terse version output format to 'x'\n"); printf(" --version\t\tPrint version info and exit\n"); printf(" --help\t\tPrint this page\n"); + printf(" --cpuclock-test\tPerform test/validation of CPU clock\n"); printf(" --cmdhelp=cmd\t\tPrint command help, \"all\" for all of" " them\n"); printf(" --enghelp=engine\tPrint ioengine help, or list" @@ -1275,7 +1291,7 @@ static void usage(const char *name) printf(" --daemonize=pidfile\tBackground fio server, write pid to file\n"); printf(" --client=hostname\tTalk to remote backend fio server at hostname\n"); printf("\nFio was written by Jens Axboe "); - printf("\n Jens Axboe \n"); + printf("\n Jens Axboe \n"); } #ifdef FIO_INC_DEBUG @@ -1621,6 +1637,13 @@ int parse_cmd_line(int argc, char *argv[]) optind++; } break; + case 'T': + do_exit++; + exit_val = fio_monotonic_clocktest(); + break; + case '?': + log_err("%s: unrecognized option '%s'\n", argv[0], + argv[optind - 1]); default: do_exit++; exit_val = 1;