path: root/cconv.c
diff options
authorKarl Cronburg <>2016-08-05 14:45:00 -0400
committerKarl Cronburg <>2016-08-06 18:25:17 -0400
commit1e613c9c23932006263dd8334007865f32891a0c (patch)
tree7fa5a62282e556d7465a6e05145d1e4b93b02108 /cconv.c
parent059b61f219b15db434eddc2207b876c6a0bad6c0 (diff)
This commit / feature adds completion latency histogram output to fio, piggybacking
on the existing histograms recorded by stat.c and adding the following command line options: - log_hist_msec operates like log_avg_msec does, but produces files named *_clat_hist* - write_hist_log has the same semantics as write_lat_log but for histograms. - log_hist_coarseness changes how many bins are logged. The more substantial contribution is a post-processor for digesting these log files, located in fio/tools/hist/, which computes min/max/avg/percentile statistics. To compare the accuracy of the statistics produced by, a reference implementation is located here: for computing the same statistics from the *_clat.* files fio already produces. A comparison can be viewed here: The reference implementation is excluded from this commit, as I'm still working with Mark (markhpc) on getting it into the branch where he's working on fiologparser. Also I'd eventually like to make FIO_IO_U_PLAT_GROUP_NR in stat.h configurable (allowing for a larger maximum histogram latency value than 17 seconds), but haven't added it to keep the changes to fio minimal for now. A more detailed description of the motivation behind this feature, and explanation of the design process and algorithms used in the post-processor can be found here:
Diffstat (limited to 'cconv.c')
1 files changed, 2 insertions, 0 deletions
diff --git a/cconv.c b/cconv.c
index ac826a30..2e693209 100644
--- a/cconv.c
+++ b/cconv.c
@@ -178,6 +178,8 @@ void convert_thread_options_to_cpu(struct thread_options *o,
o->allrand_repeatable = le32_to_cpu(top->allrand_repeatable);
o->rand_seed = le64_to_cpu(top->rand_seed);
o->log_avg_msec = le32_to_cpu(top->log_avg_msec);
+ o->log_hist_msec = le32_to_cpu(top->log_hist_msec);
+ o->log_hist_coarseness = le32_to_cpu(top->log_hist_coarseness);
o->log_max = le32_to_cpu(top->log_max);
o->log_offset = le32_to_cpu(top->log_offset);
o->log_gz = le32_to_cpu(top->log_gz);