X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=init.c;h=e7b3303e6179673703697e71063a9f63d29badcc;hp=70217418ce5f75df75bc88a0cec2d7223a5d7183;hb=23893646c9306b785f866fb9e976f3db673af0ca;hpb=5881fda43ce41756029a830cc83dbf4480cb6ea2 diff --git a/init.c b/init.c index 70217418..e7b3303e 100644 --- a/init.c +++ b/init.c @@ -9,7 +9,9 @@ #include #include #include +#ifndef FIO_NO_HAVE_SHM_H #include +#endif #include #include @@ -205,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, }, @@ -658,44 +665,44 @@ static int exists_and_not_file(const char *filename) static void td_fill_rand_seeds_os(struct thread_data *td) { - os_random_seed(td->rand_seeds[0], &td->bsrange_state); - os_random_seed(td->rand_seeds[1], &td->verify_state); - os_random_seed(td->rand_seeds[2], &td->rwmix_state); + os_random_seed(td->rand_seeds[FIO_RAND_BS_OFF], &td->bsrange_state); + os_random_seed(td->rand_seeds[FIO_RAND_VER_OFF], &td->verify_state); + os_random_seed(td->rand_seeds[FIO_RAND_MIX_OFF], &td->rwmix_state); if (td->o.file_service_type == FIO_FSERVICE_RANDOM) - os_random_seed(td->rand_seeds[3], &td->next_file_state); + os_random_seed(td->rand_seeds[FIO_RAND_FILE_OFF], &td->next_file_state); - os_random_seed(td->rand_seeds[5], &td->file_size_state); - os_random_seed(td->rand_seeds[6], &td->trim_state); + os_random_seed(td->rand_seeds[FIO_RAND_FILE_SIZE_OFF], &td->file_size_state); + os_random_seed(td->rand_seeds[FIO_RAND_TRIM_OFF], &td->trim_state); if (!td_random(td)) return; if (td->o.rand_repeatable) - td->rand_seeds[4] = FIO_RANDSEED * td->thread_number; + td->rand_seeds[FIO_RAND_BLOCK_OFF] = FIO_RANDSEED * td->thread_number; - os_random_seed(td->rand_seeds[4], &td->random_state); + os_random_seed(td->rand_seeds[FIO_RAND_BLOCK_OFF], &td->random_state); } static void td_fill_rand_seeds_internal(struct thread_data *td) { - init_rand_seed(&td->__bsrange_state, td->rand_seeds[0]); - init_rand_seed(&td->__verify_state, td->rand_seeds[1]); - init_rand_seed(&td->__rwmix_state, td->rand_seeds[2]); + init_rand_seed(&td->__bsrange_state, td->rand_seeds[FIO_RAND_BS_OFF]); + init_rand_seed(&td->__verify_state, td->rand_seeds[FIO_RAND_VER_OFF]); + init_rand_seed(&td->__rwmix_state, td->rand_seeds[FIO_RAND_MIX_OFF]); if (td->o.file_service_type == FIO_FSERVICE_RANDOM) - init_rand_seed(&td->__next_file_state, td->rand_seeds[3]); + init_rand_seed(&td->__next_file_state, td->rand_seeds[FIO_RAND_FILE_OFF]); - init_rand_seed(&td->__file_size_state, td->rand_seeds[5]); - init_rand_seed(&td->__trim_state, td->rand_seeds[6]); + init_rand_seed(&td->__file_size_state, td->rand_seeds[FIO_RAND_FILE_SIZE_OFF]); + init_rand_seed(&td->__trim_state, td->rand_seeds[FIO_RAND_TRIM_OFF]); if (!td_random(td)) return; if (td->o.rand_repeatable) - td->rand_seeds[4] = FIO_RANDSEED * td->thread_number; + td->rand_seeds[FIO_RAND_BLOCK_OFF] = FIO_RANDSEED * td->thread_number; - init_rand_seed(&td->__random_state, td->rand_seeds[4]); + init_rand_seed(&td->__random_state, td->rand_seeds[FIO_RAND_BLOCK_OFF]); } void td_fill_rand_seeds(struct thread_data *td) @@ -705,7 +712,7 @@ void td_fill_rand_seeds(struct thread_data *td) else td_fill_rand_seeds_internal(td); - init_rand_seed(&td->buf_state, td->rand_seeds[7]); + init_rand_seed(&td->buf_state, td->rand_seeds[FIO_RAND_BUF_OFF]); } @@ -765,6 +772,24 @@ int ioengine_load(struct thread_data *td) return 0; } +static void init_flags(struct thread_data *td) +{ + struct thread_options *o = &td->o; + + if (o->verify_backlog) + td->flags |= TD_F_VER_BACKLOG; + if (o->trim_backlog) + td->flags |= TD_F_TRIM_BACKLOG; + if (o->read_iolog_file) + td->flags |= TD_F_READ_IOLOG; + if (o->refill_buffers) + td->flags |= TD_F_REFILL_BUFFERS; + if (o->scramble_buffers) + td->flags |= TD_F_SCRAMBLE_BUFFERS; + if (o->verify != VERIFY_NONE) + td->flags |= TD_F_VER_NONE; +} + /* * Adds a job to the list of things todo. Sanitizes the various options * to make sure we don't have conflicts, and initializes various @@ -785,6 +810,8 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num) if (td == &def_thread) return 0; + init_flags(td); + /* * if we are just dumping the output command line, don't add the job */ @@ -1233,6 +1260,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" @@ -1253,7 +1281,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 @@ -1599,6 +1627,10 @@ int parse_cmd_line(int argc, char *argv[]) optind++; } break; + case 'T': + do_exit++; + exit_val = fio_monotonic_clocktest(); + break; default: do_exit++; exit_val = 1;