Merge branch 'master' of https://github.com/brycepg/fio
authorJens Axboe <axboe@kernel.dk>
Mon, 12 Feb 2018 15:24:21 +0000 (08:24 -0700)
committerJens Axboe <axboe@kernel.dk>
Mon, 12 Feb 2018 15:24:21 +0000 (08:24 -0700)
* 'master' of https://github.com/brycepg/fio:
  Make fiologparser_hist compatible with python3

HOWTO
engines/mmap.c
fio.1
init.c
options.c
stat.c

diff --git a/HOWTO b/HOWTO
index 78fa6ccf4a61e623a44c0e1137f46cc416382ee8..307b50d47c85762f07d82e2e8e332cf5c77f1fb6 100644 (file)
--- a/HOWTO
+++ b/HOWTO
@@ -1093,8 +1093,9 @@ I/O type
 
 .. option:: fadvise_hint=str
 
-       Use :manpage:`posix_fadvise(2)` to advise the kernel on what I/O patterns
-       are likely to be issued.  Accepted values are:
+       Use :manpage:`posix_fadvise(2)` or :manpage:`posix_fadvise(2)` to
+       advise the kernel on what I/O patterns are likely to be issued.
+       Accepted values are:
 
                **0**
                        Backwards-compatible hint for "no hint".
index 77556588e1a21218ead2006d5d73ee1bd41087c5..ea7179da2325ece1b0fd7772271d74fff4e90a3e 100644 (file)
@@ -27,6 +27,30 @@ struct fio_mmap_data {
        off_t mmap_off;
 };
 
+static bool fio_madvise_file(struct thread_data *td, struct fio_file *f,
+                            size_t length)
+
+{
+       struct fio_mmap_data *fmd = FILE_ENG_DATA(f);
+
+       if (!td->o.fadvise_hint)
+               return true;
+
+       if (!td_random(td)) {
+               if (posix_madvise(fmd->mmap_ptr, length, POSIX_MADV_SEQUENTIAL) < 0) {
+                       td_verror(td, errno, "madvise");
+                       return false;
+               }
+       } else {
+               if (posix_madvise(fmd->mmap_ptr, length, POSIX_MADV_RANDOM) < 0) {
+                       td_verror(td, errno, "madvise");
+                       return false;
+               }
+       }
+
+       return true;
+}
+
 static int fio_mmap_file(struct thread_data *td, struct fio_file *f,
                         size_t length, off_t off)
 {
@@ -50,17 +74,9 @@ static int fio_mmap_file(struct thread_data *td, struct fio_file *f,
                goto err;
        }
 
-       if (!td_random(td)) {
-               if (posix_madvise(fmd->mmap_ptr, length, POSIX_MADV_SEQUENTIAL) < 0) {
-                       td_verror(td, errno, "madvise");
-                       goto err;
-               }
-       } else {
-               if (posix_madvise(fmd->mmap_ptr, length, POSIX_MADV_RANDOM) < 0) {
-                       td_verror(td, errno, "madvise");
-                       goto err;
-               }
-       }
+       if (!fio_madvise_file(td, f, length))
+               goto err;
+
        if (posix_madvise(fmd->mmap_ptr, length, POSIX_MADV_DONTNEED) < 0) {
                td_verror(td, errno, "madvise");
                goto err;
diff --git a/fio.1 b/fio.1
index 70eeeb0f6c8ca35634e98ed648b833df8299bb98..91ae4a2ae4761a972498af7e9312164d843030f6 100644 (file)
--- a/fio.1
+++ b/fio.1
@@ -870,8 +870,8 @@ pre\-allocation methods are available, \fBnone\fR if not.
 .RE
 .TP
 .BI fadvise_hint \fR=\fPstr
-Use \fBposix_fadvise\fR\|(2) to advise the kernel what I/O patterns
-are likely to be issued. Accepted values are:
+Use \fBposix_fadvise\fR\|(2) or \fBposix_madvise\fR\|(2) to advise the kernel
+what I/O patterns are likely to be issued. Accepted values are:
 .RS
 .RS
 .TP
diff --git a/init.c b/init.c
index ae3c4f74c9dbf86bd61e4c1da3565a9a1544cbad..25661bef6e72fa3dadede80073d2dcef9eabd6ad 100644 (file)
--- a/init.c
+++ b/init.c
@@ -802,11 +802,12 @@ static int fixup_options(struct thread_data *td)
                        o->verify_interval = o->min_bs[DDIR_READ];
 
                /*
-                * Verify interval must be a factor or both min and max
+                * Verify interval must be a factor of both min and max
                 * write size
                 */
-               if (o->verify_interval % o->min_bs[DDIR_WRITE] ||
-                   o->verify_interval % o->max_bs[DDIR_WRITE])
+               if (!o->verify_interval ||
+                   (o->min_bs[DDIR_WRITE] % o->verify_interval) ||
+                   (o->max_bs[DDIR_WRITE] % o->verify_interval))
                        o->verify_interval = gcd(o->min_bs[DDIR_WRITE],
                                                        o->max_bs[DDIR_WRITE]);
        }
@@ -1585,7 +1586,7 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
                        p.avg_msec = min(o->log_avg_msec, o->bw_avg_time);
                else
                        o->bw_avg_time = p.avg_msec;
-       
+
                p.hist_msec = o->log_hist_msec;
                p.hist_coarseness = o->log_hist_coarseness;
 
@@ -1616,7 +1617,7 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
                        p.avg_msec = min(o->log_avg_msec, o->iops_avg_time);
                else
                        o->iops_avg_time = p.avg_msec;
-       
+
                p.hist_msec = o->log_hist_msec;
                p.hist_coarseness = o->log_hist_coarseness;
 
index 9a3431d8723147b31e783bcc60d423a589e2ae56..681052127be67b2db7fbaa6d1bf927f7fdbb0342 100644 (file)
--- a/options.c
+++ b/options.c
@@ -2443,7 +2443,7 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
                .posval = {
                          { .ival = "0",
                            .oval = F_ADV_NONE,
-                           .help = "Don't issue fadvise",
+                           .help = "Don't issue fadvise/madvise",
                          },
                          { .ival = "1",
                            .oval = F_ADV_TYPE,
diff --git a/stat.c b/stat.c
index a980a1d2819b356647e8ae6bb131e17f92940339..bd2c27d0ec75abfa0de5e1b017ec9aa7fe68d23e 100644 (file)
--- a/stat.c
+++ b/stat.c
@@ -1226,7 +1226,7 @@ static void show_thread_status_terse_all(struct thread_stat *ts,
 }
 
 static void json_add_job_opts(struct json_object *root, const char *name,
-                             struct flist_head *opt_list, bool num_jobs)
+                             struct flist_head *opt_list)
 {
        struct json_object *dir_object;
        struct flist_head *entry;
@@ -1242,8 +1242,6 @@ static void json_add_job_opts(struct json_object *root, const char *name,
                const char *pos = "";
 
                p = flist_entry(entry, struct print_option, list);
-               if (!num_jobs && !strcmp(p->name, "numjobs"))
-                       continue;
                if (p->value)
                        pos = p->value;
                json_object_add_value_string(dir_object, p->name, pos);
@@ -1277,7 +1275,7 @@ static struct json_object *show_thread_status_json(struct thread_stat *ts,
        }
 
        if (opt_list)
-               json_add_job_opts(root, "job options", opt_list, true);
+               json_add_job_opts(root, "job options", opt_list);
 
        add_ddir_status_json(ts, rs, DDIR_READ, root);
        add_ddir_status_json(ts, rs, DDIR_WRITE, root);
@@ -1878,7 +1876,7 @@ void __show_run_stats(void)
                json_object_add_value_int(root, "timestamp_ms", ms_since_epoch);
                json_object_add_value_string(root, "time", time_buf);
                global = get_global_options();
-               json_add_job_opts(root, "global options", &global->opt_list, false);
+               json_add_job_opts(root, "global options", &global->opt_list);
                array = json_create_array();
                json_object_add_value_array(root, "jobs", array);
        }