Optimize pattern filling by limiting small calls to memcpy
[fio.git] / options.c
index 2e1e709e91a0d60470ac99085ad42c5c046aa9a4..8fb93ca7a0c2c6a331a75e5250c86f0d9e37e156 100644 (file)
--- a/options.c
+++ b/options.c
@@ -689,12 +689,24 @@ static int str_verify_pattern_cb(void *data, const char *input)
                        }
                }
        }
+
+       /*
+        * Fill the pattern all the way to the end. This greatly reduces
+        * the number of memcpy's we have to do when verifying the IO.
+        */
+       while (i > 1 && i * 2 <= MAX_PATTERN_SIZE) {
+               memcpy(&td->o.verify_pattern[i], &td->o.verify_pattern[0], i);
+               i *= 2;
+       }
+
        td->o.verify_pattern_bytes = i;
+
        /*
         * VERIFY_META could already be set
         */
        if (td->o.verify == VERIFY_NONE)
                td->o.verify = VERIFY_PATTERN;
+
        return 0;
 }
 
@@ -1670,6 +1682,13 @@ static struct fio_option options[FIO_MAX_OPTS] = {
                .name   = "zonesize",
                .type   = FIO_OPT_STR_VAL,
                .off1   = td_var_offset(zone_size),
+               .help   = "Amount of data to read per zone",
+               .def    = "0",
+       },
+       {
+               .name   = "zonerange",
+               .type   = FIO_OPT_STR_VAL,
+               .off1   = td_var_offset(zone_range),
                .help   = "Give size of an IO zone",
                .def    = "0",
        },
@@ -1950,6 +1969,13 @@ static struct fio_option options[FIO_MAX_OPTS] = {
                .cb     = str_write_iops_log_cb,
                .help   = "Write log of IOPS during run",
        },
+       {
+               .name   = "log_avg_msec",
+               .type   = FIO_OPT_INT,
+               .off1   = td_var_offset(log_avg_msec),
+               .help   = "Average bw/iops/lat logs over this period of time",
+               .def    = "0",
+       },
        {
                .name   = "hugepage-size",
                .type   = FIO_OPT_INT,