stat: make priority summary statistics consistent with percentiles
authorVincent Fu <vincent.fu@wdc.com>
Thu, 30 Jan 2020 20:16:52 +0000 (15:16 -0500)
committerVincent Fu <vincent.fu@wdc.com>
Tue, 4 Feb 2020 15:14:04 +0000 (10:14 -0500)
When lat_percentiles=1, reported high/low priority percentiles will
describe total latency values. Make the summary statistics (min, max,
mean, stddev) also describe total latency. Otherwise there will be a
mismatch in the JSON output with completion latency summary statistics
combined with total latency percentile values.

Signed-off-by: Vincent Fu <vincent.fu@wdc.com>
stat.c

diff --git a/stat.c b/stat.c
index 5082486bd825d044e217115cab4998fa6f5f25b7..778cc4a67bac96cede8b4bbc19cca67b5931f0b3 100644 (file)
--- a/stat.c
+++ b/stat.c
@@ -483,7 +483,8 @@ static void show_ddir_status(struct group_run_stats *rs, struct thread_stat *ts,
        if (calc_lat(&ts->lat_stat[ddir], &min, &max, &mean, &dev))
                display_lat(" lat", min, max, mean, dev, out);
        if (calc_lat(&ts->clat_high_prio_stat[ddir], &min, &max, &mean, &dev))
-               display_lat("prio_clat", min, max, mean, dev, out);
+               display_lat(ts->lat_percentiles ? "prio_lat" : "prio_clat",
+                               min, max, mean, dev, out);
 
        if (ts->slat_percentiles && ts->slat_stat[ddir].samples > 0)
                show_clat_percentiles(ts->io_u_plat[FIO_SLAT][ddir],
@@ -502,7 +503,7 @@ static void show_ddir_status(struct group_run_stats *rs, struct thread_stat *ts,
                                        ts->percentile_precision, "lat", out);
 
        if (ts->clat_percentiles || ts->lat_percentiles) {
-               const char *name = ts->lat_percentiles ? " lat" : "clat";
+               const char *name = ts->lat_percentiles ? "lat" : "clat";
                char prio_name[32];
                uint64_t samples;
 
@@ -2826,10 +2827,11 @@ void add_clat_sample(struct thread_data *td, enum fio_ddir ddir,
 
        add_stat_sample(&ts->clat_stat[ddir], nsec);
 
-       if (priority_bit) {
-               add_stat_sample(&ts->clat_high_prio_stat[ddir], nsec);
-       } else {
-               add_stat_sample(&ts->clat_prio_stat[ddir], nsec);
+       if (!ts->lat_percentiles) {
+               if (priority_bit)
+                       add_stat_sample(&ts->clat_high_prio_stat[ddir], nsec);
+               else
+                       add_stat_sample(&ts->clat_prio_stat[ddir], nsec);
        }
 
        if (td->clat_log)
@@ -2930,9 +2932,14 @@ void add_lat_sample(struct thread_data *td, enum fio_ddir ddir,
                add_log_sample(td, td->lat_log, sample_val(nsec), ddir, bs,
                               offset, priority_bit);
 
-       if (ts->lat_percentiles)
+       if (ts->lat_percentiles) {
                add_lat_percentile_sample(ts, nsec, ddir, priority_bit, FIO_LAT);
+               if (priority_bit)
+                       add_stat_sample(&ts->clat_high_prio_stat[ddir], nsec);
+               else
+                       add_stat_sample(&ts->clat_prio_stat[ddir], nsec);
 
+       }
        if (needs_lock)
                __td_io_u_unlock(td);
 }