Merge branch 'latency-rebase-again' of https://github.com/vincentkfu/fio
authorJens Axboe <axboe@kernel.dk>
Tue, 4 Feb 2020 17:05:09 +0000 (10:05 -0700)
committerJens Axboe <axboe@kernel.dk>
Tue, 4 Feb 2020 17:05:09 +0000 (10:05 -0700)
* 'latency-rebase-again' of https://github.com/vincentkfu/fio:
  t/run-fio-tests: increase time allowed for tests to pass
  t/run-fio-tests: add latency_percentiles.py
  t/latency_percentiles: test latency percentile reporting
  stat: fix high/low prio unified rw bug
  fio: better distinguish between high and low priority
  stat: make priority summary statistics consistent with percentiles
  docs: updates for slat, clat, lat percentile reporting
  gfio: display slat, clat, and lat percentiles
  fio: report percentiles for slat, clat, lat
  fio: groundwork for adding slat, lat percentiles

HOWTO
engines/filestat.c
fio.1

diff --git a/HOWTO b/HOWTO
index d7634790bf7295d0c10dd8414e52adfb3ac1ad10..430c7b62bff8e28c40065cb8ac877579c2325a99 100644 (file)
--- a/HOWTO
+++ b/HOWTO
@@ -2261,9 +2261,10 @@ with the caveat that when used on the command line, they must come after the
        multiple paths exist between the client and the server or in certain loopback
        configurations.
 
-.. option:: lstat=bool : [filestat]
+.. option:: stat_type=str : [filestat]
 
-       Use lstat(2) to measure lookup/getattr performance. Default is 0.
+       Specify stat system call type to measure lookup/getattr performance.
+       Default is **stat** for :manpage:`stat(2)`.
 
 .. option:: readfua=bool : [sg]
 
index 6c87c4c2222b50282e4cd636c3698d7244214c3e..68a340bd0619907e7cca9f91373d808cb1bf4cef 100644 (file)
@@ -19,17 +19,39 @@ struct fc_data {
 
 struct filestat_options {
        void *pad;
-       unsigned int lstat;
+       unsigned int stat_type;
+};
+
+enum {
+       FIO_FILESTAT_STAT       = 1,
+       FIO_FILESTAT_LSTAT      = 2,
+       /*FIO_FILESTAT_STATX    = 3,*/
 };
 
 static struct fio_option options[] = {
        {
-               .name   = "lstat",
-               .lname  = "lstat",
-               .type   = FIO_OPT_BOOL,
-               .off1   = offsetof(struct filestat_options, lstat),
-               .help   = "Use lstat(2) to measure lookup/getattr performance",
-               .def    = "0",
+               .name   = "stat_type",
+               .lname  = "stat_type",
+               .type   = FIO_OPT_STR,
+               .off1   = offsetof(struct filestat_options, stat_type),
+               .help   = "Specify stat system call type to measure lookup/getattr performance",
+               .def    = "stat",
+               .posval = {
+                         { .ival = "stat",
+                           .oval = FIO_FILESTAT_STAT,
+                           .help = "Use stat(2)",
+                         },
+                         { .ival = "lstat",
+                           .oval = FIO_FILESTAT_LSTAT,
+                           .help = "Use lstat(2)",
+                         },
+                         /*
+                         { .ival = "statx",
+                           .oval = FIO_FILESTAT_STATX,
+                           .help = "Use statx(2)",
+                         },
+                         */
+               },
                .category = FIO_OPT_C_ENGINE,
                .group  = FIO_OPT_G_FILESTAT,
        },
@@ -60,17 +82,24 @@ static int stat_file(struct thread_data *td, struct fio_file *f)
        if (do_lat)
                fio_gettime(&start, NULL);
 
-       if (o->lstat)
-               ret = lstat(f->file_name, &statbuf);
-       else
+       switch (o->stat_type){
+       case FIO_FILESTAT_STAT:
                ret = stat(f->file_name, &statbuf);
+               break;
+       case FIO_FILESTAT_LSTAT:
+               ret = lstat(f->file_name, &statbuf);
+               break;
+       default:
+               ret = -1;
+               break;
+       }
 
        if (ret == -1) {
                char buf[FIO_VERROR_SIZE];
                int e = errno;
 
-               snprintf(buf, sizeof(buf), "%sstat(%s)",
-                       o->lstat ? "l" : "", f->file_name);
+               snprintf(buf, sizeof(buf), "stat(%s) type=%u", f->file_name,
+                       o->stat_type);
                td_verror(td, e, buf);
                return 1;
        }
diff --git a/fio.1 b/fio.1
index 0c1a5c76876351d45225b47d3333cd6d94572a66..1db12c2ff41e7e5bd2df03cd75e55be177611a69 100644 (file)
--- a/fio.1
+++ b/fio.1
@@ -2032,8 +2032,9 @@ on the client site it will be used in the rdma_resolve_add()
 function. This can be useful when multiple paths exist between the
 client and the server or in certain loopback configurations.
 .TP
-.BI (filestat)lstat \fR=\fPbool
-Use \fBlstat\fR\|(2) to measure lookup/getattr performance. Default: 0.
+.BI (filestat)stat_type \fR=\fPstr
+Specify stat system call type to measure lookup/getattr performance.
+Default is \fBstat\fR for \fBstat\fR\|(2).
 .TP
 .BI (sg)readfua \fR=\fPbool
 With readfua option set to 1, read operations include the force