Allow a region to collect a latency histogram that only accounts reads. It can be combined with the existing "histogram:" argument within one region.
https://virtuozzo.atlassian.net/browse/VSTOR-103846 Signed-off-by: Andrey Zhadchenko <[email protected]> --- .../admin-guide/device-mapper/statistics.rst | 10 +++++++-- drivers/md/dm-stats.c | 21 +++++++++++++++++-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/Documentation/admin-guide/device-mapper/statistics.rst b/Documentation/admin-guide/device-mapper/statistics.rst index d5b1b1013c087..28e2f9c49ddcb 100644 --- a/Documentation/admin-guide/device-mapper/statistics.rst +++ b/Documentation/admin-guide/device-mapper/statistics.rst @@ -95,6 +95,12 @@ Messages that took 10-20 ms to complete, c is the number of requests that took 20-30 ms to complete and d is the number of requests that took more than 30 ms to complete. + rd_histogram:n1,n2,n3,n4,... + collect a latency histogram like "histogram", but only + account read requests. + Multiple histogram arguments may be specified for one region; + each histogram is reported as an additional counter set in the + @stats_print output, in the order the histograms were specified. <program_id> An optional parameter. A name that uniquely identifies @@ -139,8 +145,8 @@ Messages precise_timestamps hist_total_latency histogram:n1,n2,n3,... The strings "precise_timestamps", "hist_total_latency" and - "histogram" are printed only if they were specified when creating - the region. + "histogram" (also "rd_histogram") are printed only if they were + specified when creating the region. @stats_print <region_id> [<starting_line> <number_of_lines>] Print counters for each step-sized area of a region. diff --git a/drivers/md/dm-stats.c b/drivers/md/dm-stats.c index 51b3c736b64c5..51827e34d2a8b 100644 --- a/drivers/md/dm-stats.c +++ b/drivers/md/dm-stats.c @@ -52,7 +52,7 @@ enum { #define DM_STAT_CLASSES_DATA ((1 << DM_STAT_CLASS_READ) | \ (1 << DM_STAT_CLASS_WRITE)) -#define DM_STAT_MAX_HISTOGRAMS 1 +#define DM_STAT_MAX_HISTOGRAMS 2 struct dm_stat_histogram { unsigned int class_mask; /* classes this histogram accounts */ @@ -540,6 +540,16 @@ static int dm_stats_delete(struct dm_stats *stats, int id) return 0; } +static const char *dm_stat_histogram_name(unsigned int class_mask) +{ + switch (class_mask) { + case 1 << DM_STAT_CLASS_READ: + return "rd_histogram"; + default: + return "histogram"; + } +} + static int dm_stats_list(struct dm_stats *stats, const char *program, char *result, unsigned int maxlen) { @@ -571,7 +581,8 @@ static int dm_stats_list(struct dm_stats *stats, const char *program, struct dm_stat_histogram *h = &s->histograms[hn]; unsigned int i; - DMEMIT(" histogram:"); + DMEMIT(" %s:", + dm_stat_histogram_name(h->class_mask)); for (i = 0; i < h->n_entries; i++) { if (i) DMEMIT(","); @@ -1189,6 +1200,12 @@ static int message_stats_create(struct mapped_device *md, DM_STAT_CLASSES_DATA, a + 10); if (r) goto ret; + } else if (!strncasecmp(a, "rd_histogram:", 13)) { + r = add_histogram(histograms, &n_histograms, + 1 << DM_STAT_CLASS_READ, + a + 13); + if (r) + goto ret; } else goto ret_einval; } -- 2.43.5 _______________________________________________ Devel mailing list [email protected] https://lists.openvz.org/mailman/listinfo/devel
