stat: add IO submit and complete depths to JSON output
authorVincent Fu <vincent.fu@wdc.com>
Tue, 19 Jun 2018 19:25:58 +0000 (12:25 -0700)
committerVincent Fu <vincent.fu@wdc.com>
Thu, 26 Jul 2018 15:19:52 +0000 (08:19 -0700)
The IO submit and IO complete depths were missing from the JSON
output. This patch adds JSON objects for these distributions.

stat.c

diff --git a/stat.c b/stat.c
index a308eb88455725192aca3d530d7234247792cde9..428590e795a7f8a9db2fa76ce06ff8b69e134165 100644 (file)
--- a/stat.c
+++ b/stat.c
@@ -1295,13 +1295,8 @@ static struct json_object *show_thread_status_json(struct thread_stat *ts,
        json_object_add_value_int(root, "majf", ts->majf);
        json_object_add_value_int(root, "minf", ts->minf);
 
        json_object_add_value_int(root, "majf", ts->majf);
        json_object_add_value_int(root, "minf", ts->minf);
 
-
-       /* Calc % distribution of IO depths, usecond, msecond latency */
+       /* Calc % distribution of IO depths */
        stat_calc_dist(ts->io_u_map, ddir_rw_sum(ts->total_io_u), io_u_dist);
        stat_calc_dist(ts->io_u_map, ddir_rw_sum(ts->total_io_u), io_u_dist);
-       stat_calc_lat_n(ts, io_u_lat_n);
-       stat_calc_lat_u(ts, io_u_lat_u);
-       stat_calc_lat_m(ts, io_u_lat_m);
-
        tmp = json_create_object();
        json_object_add_value_object(root, "iodepth_level", tmp);
        /* Only show fixed 7 I/O depth levels*/
        tmp = json_create_object();
        json_object_add_value_object(root, "iodepth_level", tmp);
        /* Only show fixed 7 I/O depth levels*/
@@ -1314,6 +1309,44 @@ static struct json_object *show_thread_status_json(struct thread_stat *ts,
                json_object_add_value_float(tmp, (const char *)name, io_u_dist[i]);
        }
 
                json_object_add_value_float(tmp, (const char *)name, io_u_dist[i]);
        }
 
+       /* Calc % distribution of submit IO depths */
+       stat_calc_dist(ts->io_u_submit, ts->total_submit, io_u_dist);
+       tmp = json_create_object();
+       json_object_add_value_object(root, "iodepth_submit", tmp);
+       /* Only show fixed 7 I/O depth levels*/
+       for (i = 0; i < 7; i++) {
+               char name[20];
+               if (i == 0)
+                       snprintf(name, 20, "0");
+               else if (i < 6)
+                       snprintf(name, 20, "%d", 1 << (i+1));
+               else
+                       snprintf(name, 20, ">=%d", 1 << i);
+               json_object_add_value_float(tmp, (const char *)name, io_u_dist[i]);
+       }
+
+       /* Calc % distribution of completion IO depths */
+       stat_calc_dist(ts->io_u_complete, ts->total_complete, io_u_dist);
+       tmp = json_create_object();
+       json_object_add_value_object(root, "iodepth_complete", tmp);
+       /* Only show fixed 7 I/O depth levels*/
+       for (i = 0; i < 7; i++) {
+               char name[20];
+               if (i == 0)
+                       snprintf(name, 20, "0");
+               else if (i < 6)
+                       snprintf(name, 20, "%d", 1 << (i+1));
+               else
+                       snprintf(name, 20, ">=%d", 1 << i);
+               json_object_add_value_float(tmp, (const char *)name, io_u_dist[i]);
+       }
+
+       /* Calc % distribution of nsecond, usecond, msecond latency */
+       stat_calc_dist(ts->io_u_map, ddir_rw_sum(ts->total_io_u), io_u_dist);
+       stat_calc_lat_n(ts, io_u_lat_n);
+       stat_calc_lat_u(ts, io_u_lat_u);
+       stat_calc_lat_m(ts, io_u_lat_m);
+
        /* Nanosecond latency */
        tmp = json_create_object();
        json_object_add_value_object(root, "latency_ns", tmp);
        /* Nanosecond latency */
        tmp = json_create_object();
        json_object_add_value_object(root, "latency_ns", tmp);