X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=init.c;h=0435dd02fa197a9731d5c123432bba54cd606152;hb=5efce23f88563bc08f64e122297fcfbea32fdd4f;hp=37e0c4811d14063f0e46884ce0999864a6748109;hpb=08d2a19c76b310f68ad2ecab17dff2a2a4c1adf8;p=fio.git diff --git a/init.c b/init.c index 37e0c481..0435dd02 100644 --- a/init.c +++ b/init.c @@ -22,13 +22,14 @@ #include "lib/getopt.h" -static char fio_version_string[] = "fio 1.53"; +static char fio_version_string[] = "fio 1.59"; #define FIO_RANDSEED (0xb1899bedUL) static char **ini_file; -static int max_jobs = MAX_JOBS; +static int max_jobs = FIO_MAX_JOBS; static int dump_cmdline; +static int def_timeout; static struct thread_data def_thread; struct thread_data *threads = NULL; @@ -43,11 +44,11 @@ char **job_sections = NULL; int nr_job_sections = 0; char *exec_profile = NULL; int warnings_fatal = 0; +int terse_version = 2; int write_bw_log = 0; int read_only = 0; -static int def_timeout; static int write_lat_log; static int prev_group_jobs; @@ -143,6 +144,16 @@ static struct option l_opts[FIO_NR_OPTIONS] = { .has_arg = no_argument, .val = 'w', }, + { + .name = (char *) "max-jobs", + .has_arg = required_argument, + .val = 'j', + }, + { + .name = (char *) "terse-version", + .has_arg = required_argument, + .val = 'V', + }, { .name = NULL, }, @@ -511,6 +522,8 @@ void td_fill_rand_seeds(struct thread_data *td) td_fill_rand_seeds_os(td); else td_fill_rand_seeds_internal(td); + + init_rand_seed(&td->buf_state, td->rand_seeds[7]); } /* @@ -568,7 +581,7 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num) } if (profile_td_init(td)) - return 1; + goto err; engine = get_engine_name(td->o.ioengine); td->io_ops = load_ioengine(td, engine); @@ -612,6 +625,12 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num) td->mutex = fio_mutex_init(0); + td->ts.clat_percentiles = td->o.clat_percentiles; + if (td->o.overwrite_plist) + td->ts.percentile_list = td->o.percentile_list; + else + td->ts.percentile_list = NULL; + td->ts.clat_stat[0].min_val = td->ts.clat_stat[1].min_val = ULONG_MAX; td->ts.slat_stat[0].min_val = td->ts.slat_stat[1].min_val = ULONG_MAX; td->ts.lat_stat[0].min_val = td->ts.lat_stat[1].min_val = ULONG_MAX; @@ -771,7 +790,7 @@ static int is_empty_or_comment(char *line) return 1; if (line[i] == '#') return 1; - if (!isspace(line[i]) && !iscntrl(line[i])) + if (!isspace((int) line[i]) && !iscntrl((int) line[i])) return 0; } @@ -941,13 +960,12 @@ static int fill_def_thread(void) memset(&def_thread, 0, sizeof(def_thread)); fio_getaffinity(getpid(), &def_thread.o.cpumask); + def_thread.o.timeout = def_timeout; /* * fill default options */ fio_fill_default_options(&def_thread); - - def_thread.o.timeout = def_timeout; return 0; } @@ -1019,6 +1037,7 @@ static int setup_thread_area(void) static void usage(const char *name) { + printf("%s\n", fio_version_string); printf("%s [options] [job options] \n", name); printf("\t--debug=options\tEnable debug logging\n"); printf("\t--output\tWrite output to file\n"); @@ -1027,6 +1046,7 @@ static void usage(const char *name) printf("\t--bandwidth-log\tGenerate per-job bandwidth logs\n"); printf("\t--minimal\tMinimal (terse) output\n"); printf("\t--version\tPrint version info and exit\n"); + printf("\t--terse-version=x Terse version output format\n"); printf("\t--help\t\tPrint this page\n"); printf("\t--cmdhelp=cmd\tPrint command help, \"all\" for all of" " them\n"); @@ -1039,6 +1059,7 @@ static void usage(const char *name) printf("\t--alloc-size=kb\tSet smalloc pool to this size in kb" " (def 1024)\n"); printf("\t--warnings-fatal Fio parser warnings are fatal\n"); + printf("\t--max-jobs\tMaximum number of threads/processes to support\n"); printf("\nFio was written by Jens Axboe "); printf("\n Jens Axboe \n"); } @@ -1187,6 +1208,14 @@ static int parse_cmd_line(int argc, char *argv[]) case 'v': log_info("%s\n", fio_version_string); exit(0); + case 'V': + terse_version = atoi(optarg); + if (terse_version != 2) { + log_err("fio: bad terse version format\n"); + exit_val = 1; + do_exit++; + } + break; case 'e': if (!strcmp("always", optarg)) eta_print = FIO_ETA_ALWAYS; @@ -1222,10 +1251,8 @@ static int parse_cmd_line(int argc, char *argv[]) if (!strncmp(opt, "name", 4) && td) { ret = add_job(td, td->o.name ?: "fio", 0); - if (ret) { - put_job(td); + if (ret) return 0; - } td = NULL; } if (!td) { @@ -1249,6 +1276,14 @@ static int parse_cmd_line(int argc, char *argv[]) case 'w': warnings_fatal = 1; break; + case 'j': + max_jobs = atoi(optarg); + if (!max_jobs || max_jobs > REAL_MAX_JOBS) { + log_err("fio: invalid max jobs: %d\n", max_jobs); + do_exit++; + exit_val = 1; + } + break; default: do_exit++; exit_val = 1; @@ -1262,8 +1297,6 @@ static int parse_cmd_line(int argc, char *argv[]) if (td) { if (!ret) ret = add_job(td, td->o.name ?: "fio", 0); - if (ret) - put_job(td); } while (optind < argc) {