]> www.infradead.org Git - users/hch/nvme-cli.git/commitdiff
Add latency check for zone-append
authorSteven Seungcheol Lee <sc108.lee@samsung.com>
Fri, 19 Jun 2020 11:26:20 +0000 (20:26 +0900)
committerSteven Seungcheol Lee <sc108.lee@samsung.com>
Tue, 23 Jun 2020 05:36:27 +0000 (14:36 +0900)
Signed-off-by: Steven Seungcheol Lee <sc108.lee@samsung.com>
Co-authored-by: Klaus Jensen <k.jensen@samsung.com>
nvme.c
nvme.h
plugins/zns/zns.c

diff --git a/nvme.c b/nvme.c
index 0b3e421e04d8333e439383b351d31627076161ce..98c6c87f7aaa5df295c6f16e0ed1a7402a23dd5a 100644 (file)
--- a/nvme.c
+++ b/nvme.c
@@ -47,7 +47,6 @@
 #include <sys/mman.h>
 #include <sys/types.h>
 #include <sys/stat.h>
-#include <sys/time.h>
 
 #include "common.h"
 #include "nvme-print.h"
@@ -3918,7 +3917,7 @@ ret:
        return nvme_status_to_errno(err, false);
 }
 
-static unsigned long long elapsed_utime(struct timeval start_time,
+unsigned long long elapsed_utime(struct timeval start_time,
                                        struct timeval end_time)
 {
        unsigned long long err = (end_time.tv_sec - start_time.tv_sec) * 1000000 +
diff --git a/nvme.h b/nvme.h
index 361191b94ad611a90c6be6ce0454e4ed1fa852ac..ffc3fbdbb858371c7bba2d72ed078dbdc032486b 100644 (file)
--- a/nvme.h
+++ b/nvme.h
@@ -19,6 +19,7 @@
 #include <stdbool.h>
 #include <stdint.h>
 #include <endian.h>
+#include <sys/time.h>
 
 #include "plugin.h"
 #include "util/json.h"
@@ -110,4 +111,7 @@ char *nvme_get_ctrl_attr(char *path, const char *attr);
 
 void *nvme_alloc(size_t len, bool *huge);
 void nvme_free(void *p, bool huge);
+
+unsigned long long elapsed_utime(struct timeval start_time,
+                                       struct timeval end_time);
 #endif /* _NVME_H */
index 164446ecc70db1d79fba33672ba6155183fa510e..7a6da79c3db169696a63443a45ad99e1a0fc1c9c 100644 (file)
@@ -630,12 +630,14 @@ static int zone_append(int argc, char **argv, struct command *cmd, struct plugin
        const char *lbatm = "logical block application tag mask (for end to end PI)";
        const char *metadata_size = "size of metadata in bytes";
        const char *data_size = "size of data in bytes";
+       const char *latency = "output latency statistics";
 
        int err = -1, fd, dfd = STDIN_FILENO, mfd = STDIN_FILENO;
        unsigned int lba_size, meta_size;
        void *buf = NULL, *mbuf = NULL;
        __u16 nblocks, control = 0;
        __u64 result;
+       struct timeval start_time, end_time;
 
        struct nvme_id_ns ns;
 
@@ -652,6 +654,7 @@ static int zone_append(int argc, char **argv, struct command *cmd, struct plugin
                __u16  lbat;
                __u16  lbatm;
                __u8   prinfo;
+               int   latency;
        };
 
        struct config cfg = {
@@ -659,9 +662,9 @@ static int zone_append(int argc, char **argv, struct command *cmd, struct plugin
 
        OPT_ARGS(opts) = {
                OPT_UINT("namespace-id", 'n', &cfg.namespace_id,  namespace_id),
-               OPT_SUFFIX("zslba",           's', &cfg.zslba,         zslba),
-               OPT_SUFFIX("data-size",       'z', &cfg.data_size,     data_size),
-               OPT_SUFFIX("metadata-size",   'y', &cfg.metadata_size, metadata_size),
+               OPT_SUFFIX("zslba",           's', &cfg.zslba,         zslba),
+               OPT_SUFFIX("data-size",       'z', &cfg.data_size,     data_size),
+               OPT_SUFFIX("metadata-size",   'y', &cfg.metadata_size, metadata_size),
                OPT_FILE("data",              'd', &cfg.data,          data),
                OPT_FILE("metadata",          'M', &cfg.metadata,      metadata),
                OPT_FLAG("limited-retry",     'l', &cfg.limited_retry, limited_retry),
@@ -670,6 +673,7 @@ static int zone_append(int argc, char **argv, struct command *cmd, struct plugin
                OPT_SHRT("app-tag-mask",      'm', &cfg.lbatm,         lbatm),
                OPT_SHRT("app-tag",           'a', &cfg.lbat,          lbat),
                OPT_BYTE("prinfo",            'p', &cfg.prinfo,        prinfo),
+               OPT_FLAG("latency",           't', &cfg.latency,       latency),
                OPT_END()
        };
 
@@ -774,10 +778,16 @@ static int zone_append(int argc, char **argv, struct command *cmd, struct plugin
        if (cfg.fua)
                control |= NVME_RW_FUA;
 
+       gettimeofday(&start_time, NULL);
        err = nvme_zns_append(fd, cfg.namespace_id, cfg.zslba, nblocks,
                              control, cfg.ref_tag, cfg.lbat, cfg.lbatm,
                              cfg.data_size, buf, cfg.metadata_size, mbuf,
                              &result);
+       gettimeofday(&end_time, NULL);
+       if (cfg.latency)
+               printf(" latency: zone append: %llu us\n",
+                       elapsed_utime(start_time, end_time));
+
        if (!err)
                printf("Success appended data to LBA %"PRIx64"\n", (uint64_t)result);
        else