Merge branch 'master' of ssh://router/data/git/fio
[fio.git] / options.c
index e2daf37df09c26be2663a36a0b2f3aa031477ba8..bdb56d3e4bec652a58b8f2fe02bdb78656f62fca 100644 (file)
--- a/options.c
+++ b/options.c
@@ -225,6 +225,15 @@ static int str_mem_cb(void *data, const char *mem)
        return 0;
 }
 
+static int fio_clock_source_cb(void *data, const char *str)
+{
+       struct thread_data *td = data;
+
+       fio_clock_source = td->o.clocksource;
+       fio_time_init();
+       return 0;
+}
+
 static int str_lockmem_cb(void fio_unused *data, unsigned long *val)
 {
        mlock_size = *val;
@@ -429,6 +438,22 @@ static int str_fst_cb(void *data, const char *str)
        return 0;
 }
 
+#ifdef FIO_HAVE_SYNC_FILE_RANGE
+static int str_sfr_cb(void *data, const char *str)
+{
+       struct thread_data *td = data;
+       char *nr = get_opt_postfix(str);
+
+       td->sync_file_range_nr = 1;
+       if (nr) {
+               td->sync_file_range_nr = atoi(nr);
+               free(nr);
+       }
+
+       return 0;
+}
+#endif
+
 static int check_dir(struct thread_data *td, char *fname)
 {
        char file[PATH_MAX], *dir;
@@ -1110,6 +1135,33 @@ static struct fio_option options[FIO_MAX_OPTS] = {
                .help   = "Issue fdatasync for writes every given number of blocks",
                .def    = "0",
        },
+#ifdef FIO_HAVE_SYNC_FILE_RANGE
+       {
+               .name   = "sync_file_range",
+               .posval = {
+                         { .ival = "wait_before",
+                           .oval = SYNC_FILE_RANGE_WAIT_BEFORE,
+                           .help = "SYNC_FILE_RANGE_WAIT_BEFORE",
+                           .or   = 1,
+                         },
+                         { .ival = "write",
+                           .oval = SYNC_FILE_RANGE_WRITE,
+                           .help = "SYNC_FILE_RANGE_WRITE",
+                           .or   = 1,
+                         },
+                         {
+                           .ival = "wait_after",
+                           .oval = SYNC_FILE_RANGE_WAIT_AFTER,
+                           .help = "SYNC_FILE_RANGE_WAIT_AFTER",
+                           .or   = 1,
+                         },
+               },
+               .type   = FIO_OPT_STR_MULTI,
+               .cb     = str_sfr_cb,
+               .off1   = td_var_offset(sync_file_range),
+               .help   = "Use sync_file_range()",
+       },
+#endif
        {
                .name   = "direct",
                .type   = FIO_OPT_BOOL,
@@ -1173,6 +1225,30 @@ static struct fio_option options[FIO_MAX_OPTS] = {
                .off1   = td_var_offset(ramp_time),
                .help   = "Ramp up time before measuring performance",
        },
+       {
+               .name   = "clocksource",
+               .type   = FIO_OPT_STR,
+               .cb     = fio_clock_source_cb,
+               .off1   = td_var_offset(clocksource),
+               .help   = "What type of timing source to use",
+               .def    = "gettimeofday",
+               .posval = {
+                         { .ival = "gettimeofday",
+                           .oval = CS_GTOD,
+                           .help = "Use gettimeofday(2) for timing",
+                         },
+                         { .ival = "clock_gettime",
+                           .oval = CS_CGETTIME,
+                           .help = "Use clock_gettime(2) for timing",
+                         },
+#ifdef ARCH_HAVE_CPU_CLOCK
+                         { .ival = "cpu",
+                           .oval = CS_CPUCLOCK,
+                           .help = "Use CPU private clock",
+                         },
+#endif
+               },
+       },
        {
                .name   = "mem",
                .alias  = "iomem",