[Devel] [PATCH VZ10 v2 07/11] drivers/md/dm-stats: add rd_histogram option
Andrey Zhadchenko
andrey.zhadchenko at virtuozzo.com
Mon Jul 27 19:32:50 MSK 2026
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 <andrey.zhadchenko at virtuozzo.com>
---
.../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 e55b821fb9a34..46d4468294197 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 */
@@ -541,6 +541,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)
{
@@ -572,7 +582,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(",");
@@ -1188,6 +1199,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
More information about the Devel
mailing list