X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=init.c;h=cc35e2b98681cd6932d95856ac0ef7a8b98bed52;hb=bfca2c74b53e499acd8e97e9e56d3c40a5dd8b4f;hp=ccd63420019b2ab28e7aeb10f7bedc6b4dd6da00;hpb=eefd98b18d9eae9d7f29adf65f35a057bedbfc8b;p=fio.git diff --git a/init.c b/init.c index ccd63420..cc35e2b9 100644 --- a/init.c +++ b/init.c @@ -629,6 +629,18 @@ static int fixup_options(struct thread_data *td) ret = 1; } + /* + * O_ATOMIC implies O_DIRECT + */ + if (td->o.oatomic) + td->o.odirect = 1; + + /* + * If randseed is set, that overrides randrepeat + */ + if (td->o.rand_seed) + td->o.rand_repeatable = 0; + return ret; } @@ -824,10 +836,15 @@ static int setup_random_seeds(struct thread_data *td) unsigned long seed; unsigned int i; - if (!td->o.rand_repeatable) + if (!td->o.rand_repeatable && !td->o.rand_seed) return init_random_state(td, td->rand_seeds, sizeof(td->rand_seeds)); - for (seed = 0x89, i = 0; i < 4; i++) + if (!td->o.rand_seed) + seed = 0x89; + else + seed = td->o.rand_seed; + + for (i = 0; i < 4; i++) seed *= 0x9e370001UL; for (i = 0; i < FIO_RAND_NR_OFFS; i++) { @@ -915,6 +932,12 @@ static char *make_filename(char *buf, struct thread_options *o, return buf; } + +int parse_dryrun(void) +{ + return dump_cmdline || parse_only; +} + /* * Adds a job to the list of things todo. Sanitizes the various options * to make sure we don't have conflicts, and initializes various @@ -939,7 +962,7 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num, /* * if we are just dumping the output command line, don't add the job */ - if (dump_cmdline || parse_only) { + if (parse_dryrun()) { put_job(td); return 0; } @@ -1035,20 +1058,31 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num, fio_server_send_add_job(td); if (!(td->io_ops->flags & FIO_NOIO)) { - char *c1, *c2, *c3, *c4, *c5, *c6; + char *c1, *c2, *c3, *c4; + char *c5 = NULL, *c6 = NULL; c1 = fio_uint_to_kmg(o->min_bs[DDIR_READ]); c2 = fio_uint_to_kmg(o->max_bs[DDIR_READ]); c3 = fio_uint_to_kmg(o->min_bs[DDIR_WRITE]); c4 = fio_uint_to_kmg(o->max_bs[DDIR_WRITE]); - c5 = fio_uint_to_kmg(o->min_bs[DDIR_TRIM]); - c6 = fio_uint_to_kmg(o->max_bs[DDIR_TRIM]); - - log_info("%s: (g=%d): rw=%s, bs=%s-%s/%s-%s/%s-%s," - " ioengine=%s, iodepth=%u\n", - td->o.name, td->groupid, - ddir_str(o->td_ddir), - c1, c2, c3, c4, c5, c6, + + if (!o->bs_is_seq_rand) { + c5 = fio_uint_to_kmg(o->min_bs[DDIR_TRIM]); + c6 = fio_uint_to_kmg(o->max_bs[DDIR_TRIM]); + } + + log_info("%s: (g=%d): rw=%s, ", td->o.name, + td->groupid, + ddir_str(o->td_ddir)); + + if (o->bs_is_seq_rand) + log_info("bs(seq/rand)=%s-%s/%s-%s, ", + c1, c2, c3, c4); + else + log_info("bs=%s-%s/%s-%s/%s-%s, ", + c1, c2, c3, c4, c5, c6); + + log_info("ioengine=%s, iodepth=%u\n", td->io_ops->name, o->iodepth); free(c1); @@ -1123,9 +1157,9 @@ void add_job_opts(const char **o, int client_type) td = get_new_job(0, td_parent, 0); } if (in_global) - fio_options_parse(td_parent, (char **) &o[i], 1); + fio_options_parse(td_parent, (char **) &o[i], 1, 0); else - fio_options_parse(td, (char **) &o[i], 1); + fio_options_parse(td, (char **) &o[i], 1, 0); i++; } @@ -1262,7 +1296,7 @@ int parse_jobs_ini(char *file, int is_buf, int stonewall_flag, int type) } /* - * Seperate multiple job files by a stonewall + * Separate multiple job files by a stonewall */ if (!global && stonewall) { td->o.stonewall = stonewall; @@ -1306,14 +1340,10 @@ int parse_jobs_ini(char *file, int is_buf, int stonewall_flag, int type) num_opts++; } - ret = fio_options_parse(td, opts, num_opts); - if (!ret) { - if (dump_cmdline) - for (i = 0; i < num_opts; i++) - log_info("--%s ", opts[i]); - + ret = fio_options_parse(td, opts, num_opts, dump_cmdline); + if (!ret) ret = add_job(td, name, 0, 0, type); - } else { + else { log_err("fio: job %s dropped\n", name); put_job(td); } @@ -1363,7 +1393,7 @@ static void usage(const char *name) printf("%s [options] [job options] \n", name); printf(" --debug=options\tEnable debug logging. May be one/more of:\n" "\t\t\tprocess,file,io,mem,blktrace,verify,random,parse,\n" - "\t\t\tdiskutil,job,mutex,profile,time,net\n"); + "\t\t\tdiskutil,job,mutex,profile,time,net,rate\n"); printf(" --parse-only\t\tParse options only, don't start any IO\n"); printf(" --output\t\tWrite output to file\n"); printf(" --runtime\t\tRuntime in seconds\n"); @@ -1402,7 +1432,8 @@ static void usage(const char *name) "\t\t\t(option=system,percpu) or run unit work\n" "\t\t\tcalibration only (option=calibrate)\n"); printf("\nFio was written by Jens Axboe "); - printf("\n Jens Axboe \n"); + printf("\n Jens Axboe "); + printf("\n Jens Axboe \n"); } #ifdef FIO_INC_DEBUG @@ -1463,6 +1494,10 @@ struct debug_level debug_levels[] = { .help = "Network logging", .shift = FD_NET, }, + { .name = "rate", + .help = "Rate logging", + .shift = FD_RATE, + }, { .name = NULL, }, }; @@ -1933,7 +1968,7 @@ int parse_options(int argc, char *argv[]) fio_options_free(&def_thread); if (!thread_number) { - if (dump_cmdline || parse_only) + if (parse_dryrun()) return 0; if (exec_profile) return 0;