Whamcloud - gitweb
LU-15564 osd: add allocation time histogram 68/52768/3
authorAlex Zhuravlev <bzzz@whamcloud.com>
Fri, 18 Feb 2022 08:39:12 +0000 (11:39 +0300)
committerOleg Drokin <green@whamcloud.com>
Mon, 13 Nov 2023 02:07:27 +0000 (02:07 +0000)
add block mapping/allocation histogram to brw stats to debug
mballoc related issues.

$ lctl get_param osd*.*OST*.brw_stats
                           read      |     write
block maps msec        maps  % cum % |  maps        % cum %
1:    1522360 100 100   | 49272  99  99
2:          0   0 100   |    1   0  99
4:          0   0 100   |    1   0  99
8:          0   0 100   |    0   0  99
16:          0   0 100   |    0   0  99
32:          0   0 100   |    0   0  99
64:          0   0 100   |    1   0 100

Lustre-change: https://review.whamcloud.com/46550
Lustre-commit: f97ce54357bc91f7b1285febfc50d6087dd94c13

Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: I1185386adc64e844de71e25a4e439e493e5e5bc5
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/52768
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
lustre/include/lprocfs_status.h
lustre/obdclass/lprocfs_status_server.c
lustre/osd-ldiskfs/osd_io.c

index d5fc7da..68912fb 100644 (file)
@@ -406,6 +406,8 @@ enum brw_rw_stats {
        BRW_W_IO_TIME,
        BRW_R_DISK_IOSIZE,
        BRW_W_DISK_IOSIZE,
+       BRW_MAP_TIME,
+       BRW_ALLOC_TIME,
        BRW_RW_STATS_NUM,
 };
 
index a09ae67..13b9e72 100644 (file)
@@ -768,6 +768,9 @@ static const struct brw_stats_props brw_props[] = {
        { .bsp_name     = "disk I/O size",
          .bsp_units    = "ios",
          .bsp_scale    = true                          },
+       { .bsp_name     = "block maps msec",
+         .bsp_units    = "maps",
+         .bsp_scale    = true,                         },
 };
 
 static int brw_stats_seq_show(struct seq_file *seq, void *v)
index 7131add..5a21f0f 100644 (file)
@@ -1129,6 +1129,7 @@ static int osd_ldiskfs_map_inode_pages(struct inode *inode,
        while (i < pages) {
                long blen, total = 0, previous_total = 0;
                struct ldiskfs_map_blocks map = { 0 };
+               ktime_t time;
 
                if (fp == NULL) { /* start new extent */
                        fp = *page++;
@@ -1180,9 +1181,19 @@ cont_map:
                        else
                                oh->oh_declared_ext--;
                }
+
+               time = ktime_get();
                rc = ldiskfs_map_blocks(handle, inode, &map, create);
+               time = ktime_sub(ktime_get(), time);
+
                if (rc >= 0) {
-                       int c = 0;
+                       struct brw_stats *h = &osd->od_brw_stats;
+                       int idx, c = 0;
+
+                       idx = map.m_flags & LDISKFS_MAP_NEW ?
+                               BRW_ALLOC_TIME : BRW_MAP_TIME;
+                       lprocfs_oh_tally_log2_pcpu(&h->bs_hist[idx],
+                                                  ktime_to_ms(time));
 
                        for (; total < blen && c < map.m_len; c++, total++) {
                                if (rc == 0) {