X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=init.c;h=7166ea766d8a669bddf619dd105b3b8ce6b3f58d;hp=9052addc9c7ff2117e557ad74ca5f90096f5e139;hb=7e419452839dee5afa86b0a6c78136c421e1d706;hpb=36dd3379227a214a7caf2dc9ab7f818a8e266796 diff --git a/init.c b/init.c index 9052addc..7166ea76 100644 --- a/init.c +++ b/init.c @@ -919,6 +919,23 @@ static int exists_and_not_file(const char *filename) return 1; } +static void init_rand_file_service(struct thread_data *td) +{ + unsigned long nranges = td->o.nr_files << FIO_FSERVICE_SHIFT; + const unsigned int seed = td->rand_seeds[FIO_RAND_FILE_OFF]; + + if (td->o.file_service_type == FIO_FSERVICE_ZIPF) { + zipf_init(&td->next_file_zipf, nranges, td->zipf_theta, seed); + zipf_disable_hash(&td->next_file_zipf); + } else if (td->o.file_service_type == FIO_FSERVICE_PARETO) { + pareto_init(&td->next_file_zipf, nranges, td->pareto_h, seed); + zipf_disable_hash(&td->next_file_zipf); + } else if (td->o.file_service_type == FIO_FSERVICE_GAUSS) { + gauss_init(&td->next_file_gauss, nranges, td->gauss_dev, seed); + gauss_disable_hash(&td->next_file_gauss); + } +} + static void td_fill_rand_seeds_internal(struct thread_data *td, bool use64) { int i; @@ -929,6 +946,8 @@ static void td_fill_rand_seeds_internal(struct thread_data *td, bool use64) if (td->o.file_service_type == FIO_FSERVICE_RANDOM) init_rand_seed(&td->next_file_state, td->rand_seeds[FIO_RAND_FILE_OFF], use64); + else if (td->o.file_service_type & __FIO_FSERVICE_NONUNIFORM) + init_rand_file_service(td); init_rand_seed(&td->file_size_state, td->rand_seeds[FIO_RAND_FILE_SIZE_OFF], use64); init_rand_seed(&td->trim_state, td->rand_seeds[FIO_RAND_TRIM_OFF], use64); @@ -1079,7 +1098,7 @@ static int setup_random_seeds(struct thread_data *td) seed *= 0x9e370001UL; for (i = 0; i < FIO_RAND_NR_OFFS; i++) { - td->rand_seeds[i] = seed; + td->rand_seeds[i] = seed * td->thread_number + i; seed *= 0x9e370001UL; } @@ -1416,6 +1435,11 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num, }; const char *suf; + if (fio_option_is_set(o, bw_avg_time)) + p.avg_msec = min(o->log_avg_msec, o->bw_avg_time); + else + o->bw_avg_time = p.avg_msec; + if (p.log_gz_store) suf = "log.fz"; else @@ -1436,6 +1460,11 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num, }; const char *suf; + if (fio_option_is_set(o, iops_avg_time)) + p.avg_msec = min(o->log_avg_msec, o->iops_avg_time); + else + o->iops_avg_time = p.avg_msec; + if (p.log_gz_store) suf = "log.fz"; else @@ -2552,14 +2581,14 @@ int parse_cmd_line(int argc, char *argv[], int client_type) !strncmp(argv[optind], "-", 1)) break; - if (fio_client_add_ini_file(cur_client, argv[optind], 0)) + if (fio_client_add_ini_file(cur_client, argv[optind], false)) break; optind++; } break; case 'R': did_arg = 1; - if (fio_client_add_ini_file(cur_client, optarg, 1)) { + if (fio_client_add_ini_file(cur_client, optarg, true)) { do_exit++; exit_val = 1; }