syslet: x86_64 support
[fio.git] / init.c
diff --git a/init.c b/init.c
index 5588c852b9c828cc49b31c4ae4a43758efadd3dc..fb3e3ccf9f893d39d445b6a3e24edaad36f46965 100644 (file)
--- a/init.c
+++ b/init.c
@@ -85,11 +85,24 @@ static struct fio_option options[] = {
                .help   = "IO engine to use",
                .def    = "sync",
                .posval = {
-                         { .ival = "sync", }, { .ival = "libaio", },
-                         { .ival = "posixaio", }, { .ival = "mmap", },
-                         { .ival = "splice", }, { .ival = "sg", },
+                         { .ival = "sync", },
+#ifdef FIO_HAVE_LIBAIO
+                         { .ival = "libaio", },
+#endif
+#ifdef FIO_HAVE_POSIXAIO
+                         { .ival = "posixaio", },
+#endif
+                         { .ival = "mmap", },
+#ifdef FIO_HAVE_SPLICE
+                         { .ival = "splice", },
+#endif
+#ifdef FIO_HAVE_SGIO
+                         { .ival = "sg", },
+#endif
                          { .ival = "null", }, { .ival = "net", },
+#ifdef FIO_HAVE_SYSLET
                          { .ival = "syslet-rw", },
+#endif
                          },
        },
        {
@@ -99,6 +112,12 @@ static struct fio_option options[] = {
                .help   = "Amount of IO buffers to keep in flight",
                .def    = "1",
        },
+       {
+               .name   = "iodepth_batch",
+               .type   = FIO_OPT_INT,
+               .off1   = td_var_offset(iodepth_batch),
+               .help   = "Number of IO to submit in one go",
+       },
        {
                .name   = "iodepth_low",
                .type   = FIO_OPT_INT,
@@ -571,7 +590,7 @@ static struct option long_options[FIO_JOB_OPTS + FIO_CMD_OPTS] = {
 
 static int def_timeout = 0;
 
-static char fio_version_string[] = "fio 1.11";
+static char fio_version_string[] = "fio 1.12";
 
 static char **ini_file;
 static int max_jobs = MAX_JOBS;
@@ -689,8 +708,23 @@ static void fixup_options(struct thread_data *td)
        /*
         * The low water mark cannot be bigger than the iodepth
         */
-       if (td->iodepth_low > td->iodepth || !td->iodepth_low)
-               td->iodepth_low = td->iodepth;
+       if (td->iodepth_low > td->iodepth || !td->iodepth_low) {
+               /*
+                * syslet work around - if the workload is sequential,
+                * we want to let the queue drain all the way down to
+                * avoid seeking between async threads
+                */
+               if (!strcmp(td->io_ops->name, "syslet-rw") && !td_random(td))
+                       td->iodepth_low = 1;
+               else
+                       td->iodepth_low = td->iodepth;
+       }
+
+       /*
+        * If batch number isn't set, default to the same as iodepth
+        */
+       if (td->iodepth_batch > td->iodepth || !td->iodepth_batch)
+               td->iodepth_batch = td->iodepth;
 }
 
 /*