X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;ds=sidebyside;f=init.c;h=475a6ad29f69a87da2463f4e020609c5e99861b5;hb=521da527743088a9bd2ab882f8b64799d49d5848;hp=d7d801181c435247e24217d5d53bfcc372698837;hpb=9e684a4976b7934f5ce011ea281dfef3352e5738;p=fio.git diff --git a/init.c b/init.c index d7d80118..475a6ad2 100644 --- a/init.c +++ b/init.c @@ -23,16 +23,7 @@ #include "lib/getopt.h" -#include "fio_version.h" - -#if FIO_PATCH > 0 -const char fio_version_string[] = __fio_stringify(FIO_MAJOR) "." \ - __fio_stringify(FIO_MINOR) "." \ - __fio_stringify(FIO_PATCH); -#else -const char fio_version_string[] = __fio_stringify(FIO_MAJOR) "." \ - __fio_stringify(FIO_MINOR); -#endif +const char fio_version_string[] = FIO_VERSION; #define FIO_RANDSEED (0xb1899bedUL) @@ -74,21 +65,23 @@ static char cmd_optstr[256]; static int did_arg; const fio_fp64_t def_percentile_list[FIO_IO_U_LIST_MAX_LEN] = { - { .u.f = 1.0 }, - { .u.f = 5.0 }, - { .u.f = 10.0 }, - { .u.f = 20.0 }, - { .u.f = 30.0 }, - { .u.f = 40.0 }, - { .u.f = 50.0 }, - { .u.f = 60.0 }, - { .u.f = 70.0 }, - { .u.f = 80.0 }, - { .u.f = 90.0 }, - { .u.f = 95.0 }, - { .u.f = 99.0 }, - { .u.f = 99.5 }, - { .u.f = 99.9 }, + { .u.f = 1.00 }, + { .u.f = 5.00 }, + { .u.f = 10.00 }, + { .u.f = 20.00 }, + { .u.f = 30.00 }, + { .u.f = 40.00 }, + { .u.f = 50.00 }, + { .u.f = 60.00 }, + { .u.f = 70.00 }, + { .u.f = 80.00 }, + { .u.f = 90.00 }, + { .u.f = 95.00 }, + { .u.f = 99.00 }, + { .u.f = 99.50 }, + { .u.f = 99.90 }, + { .u.f = 99.95 }, + { .u.f = 99.99 }, }; #define FIO_CLIENT_FLAG (1 << 16) @@ -555,6 +548,28 @@ static int fixup_options(struct thread_data *td) } #endif +#ifdef WIN32 + /* + * Windows doesn't support O_DIRECT or O_SYNC with the _open interface, + * so fail if we're passed those flags + */ + if ((td->io_ops->flags & FIO_SYNCIO) && (td->o.odirect || td->o.sync_io)) { + log_err("fio: Windows does not support direct or non-buffered io with" + " the synchronous ioengines. Use the 'windowsaio' ioengine" + " with 'direct=1' and 'iodepth=1' instead.\n"); + ret = 1; + } +#endif + + /* + * For fully compressible data, just zero them at init time. + * It's faster than repeatedly filling it. + */ + if (td->o.compress_percentage == 100) { + td->o.zero_buffers = 1; + td->o.compress_percentage = 0; + } + return ret; } @@ -660,31 +675,6 @@ void td_fill_rand_seeds(struct thread_data *td) init_rand_seed(&td->buf_state, td->rand_seeds[7]); } -/* - * Initialize the various random states we need (random io, block size ranges, - * read/write mix, etc). - */ -static int init_random_state(struct thread_data *td) -{ - int fd; - - fd = open("/dev/urandom", O_RDONLY); - if (fd == -1) { - td_verror(td, errno, "open"); - return 1; - } - - if (read(fd, td->rand_seeds, sizeof(td->rand_seeds)) < - (int) sizeof(td->rand_seeds)) { - td_verror(td, EIO, "read"); - close(fd); - return 1; - } - - close(fd); - td_fill_rand_seeds(td); - return 0; -} /* * Initializes the ioengine configured for a job, if it has not been done so @@ -817,7 +807,7 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num) f->real_file_size = -1ULL; } - td->mutex = fio_mutex_init(0); + td->mutex = fio_mutex_init(FIO_MUTEX_LOCKED); td->ts.clat_percentiles = td->o.clat_percentiles; if (td->o.overwrite_plist) @@ -839,8 +829,10 @@ 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)) + if (init_random_state(td, td->rand_seeds, sizeof(td->rand_seeds))) { + td_verror(td, errno, "init_random_state"); goto err; + } if (setup_rate(td)) goto err; @@ -1187,7 +1179,7 @@ static int fill_def_thread(void) static void usage(const char *name) { - printf("fio %s\n", fio_version_string); + printf("%s\n", fio_version_string); 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" @@ -1418,7 +1410,7 @@ int parse_cmd_line(int argc, char *argv[]) break; case 'v': if (!cur_client) { - log_info("fio %s\n", fio_version_string); + log_info("%s\n", fio_version_string); do_exit++; } break; @@ -1644,7 +1636,7 @@ int parse_options(int argc, char *argv[]) } if (!terse_output) - log_info("fio %s\n", fio_version_string); + log_info("%s\n", fio_version_string); return 0; }