diff options
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/debug/io-stats/src/io-stats.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/xlators/debug/io-stats/src/io-stats.c b/xlators/debug/io-stats/src/io-stats.c index 266f9449c9e..c0cd0e2477b 100644 --- a/xlators/debug/io-stats/src/io-stats.c +++ b/xlators/debug/io-stats/src/io-stats.c @@ -798,6 +798,11 @@ io_stats_dump_global_to_json_logfp (xlator_t *this, float fop_lat_min; float fop_lat_max; double interval_sec; + double fop_ave_usec = 0.0; + double fop_ave_usec_sum = 0.0; + double weighted_fop_ave_usec = 0.0; + double weighted_fop_ave_usec_sum = 0.0; + long total_fop_hits = 0; interval_sec = ((now->tv_sec * 1000000.0 + now->tv_usec) - (stats->started_at.tv_sec * 1000000.0 + @@ -902,7 +907,34 @@ io_stats_dump_global_to_json_logfp (xlator_t *this, ios_log (this, logfp, "\"%s.%s.fop.%s.latency_max_usec\": \"%0.2lf\",", key_prefix, str_prefix, lc_fop_name, fop_lat_max); + + fop_ave_usec_sum += fop_lat_ave; + weighted_fop_ave_usec_sum += fop_hits * fop_lat_ave; + total_fop_hits += fop_hits; + } + + if (total_fop_hits) { + weighted_fop_ave_usec = + weighted_fop_ave_usec_sum/total_fop_hits; + /* Extra key that does not print out an entry w/ 0.00 for + * intervals with no data + */ + ios_log (this, logfp, + "\"%s.%s.fop.weighted_latency_ave_usec_nozerofill\": " + "\"%0.4lf\",", + key_prefix, str_prefix, weighted_fop_ave_usec); } + ios_log (this, logfp, + "\"%s.%s.fop.weighted_latency_ave_usec\": \"%0.4lf\",", + key_prefix, str_prefix, weighted_fop_ave_usec); + ios_log (this, logfp, + "\"%s.%s.fop.weighted_fop_count\": \"%ld\",", + key_prefix, str_prefix, total_fop_hits); + + fop_ave_usec = fop_ave_usec_sum/GF_FOP_MAXVALUE; + ios_log (this, logfp, + "\"%s.%s.fop.unweighted_latency_ave_usec\":\"%0.4lf\",", + key_prefix, str_prefix, fop_ave_usec); for (i = 0; i < GF_UPCALL_FLAGS_MAXVALUE; i++) { lc_fop_name = strdupa (gf_upcall_list[i]); |