log: add support for logging max instead of averages
[fio.git] / options.c
index 13f99157f96eb23fd43a227d4dc8378f3ebc6e0a..390208729f0db12955cc3a19f72f1d04d9a40b1f 100644 (file)
--- a/options.c
+++ b/options.c
 
 char client_sockaddr_str[INET6_ADDRSTRLEN] = { 0 };
 
-struct pattern_fmt_desc fmt_desc[] = {
-       {
-               .fmt   = "%o",
-               .len   = FIELD_SIZE(struct io_u *, offset),
-               .paste = paste_blockoff
-       }
-};
-
 /*
  * Check if mmap/mmaphuge has a :/foo/bar/file at the end. If so, return that.
  */
@@ -49,7 +41,7 @@ static int bs_cmp(const void *p1, const void *p2)
        const struct bssplit *bsp1 = p1;
        const struct bssplit *bsp2 = p2;
 
-       return bsp1->perc < bsp2->perc;
+       return (int) bsp1->perc - (int) bsp2->perc;
 }
 
 static int bssplit_ddir(struct thread_options *o, int ddir, char *str)
@@ -962,13 +954,20 @@ static int str_dedupe_cb(void *data, unsigned long long *il)
 
 static int str_verify_pattern_cb(void *data, const char *input)
 {
+       struct pattern_fmt_desc fmt_desc[] = {
+               {
+                       .fmt   = "%o",
+                       .len   = FIELD_SIZE(struct io_u *, offset),
+                       .paste = paste_blockoff
+               }
+       };
        struct thread_data *td = data;
        int ret;
 
        td->o.verify_fmt_sz = ARRAY_SIZE(td->o.verify_fmt);
        ret = parse_and_fill_pattern(input, strlen(input), td->o.verify_pattern,
-                                    MAX_PATTERN_SIZE, fmt_desc, sizeof(fmt_desc),
-                                    td->o.verify_fmt, &td->o.verify_fmt_sz);
+                       MAX_PATTERN_SIZE, fmt_desc, sizeof(fmt_desc),
+                       td->o.verify_fmt, &td->o.verify_fmt_sz);
        if (ret < 0)
                return 1;
 
@@ -3074,6 +3073,16 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
                .category = FIO_OPT_C_LOG,
                .group  = FIO_OPT_G_INVALID,
        },
+       {
+               .name   = "log_max_value",
+               .lname  = "Log maximum instead of average",
+               .type   = FIO_OPT_BOOL,
+               .off1   = td_var_offset(log_max),
+               .help   = "Log max sample in a window instead of average",
+               .def    = "0",
+               .category = FIO_OPT_C_LOG,
+               .group  = FIO_OPT_G_INVALID,
+       },
        {
                .name   = "log_offset",
                .lname  = "Log offset of IO",