Whamcloud - gitweb
EX-7989 utils: lpurge to dump empty slots
authorAlex Zhuravlev <bzzz@whamcloud.com>
Fri, 28 Jul 2023 07:18:04 +0000 (10:18 +0300)
committerAndreas Dilger <adilger@whamcloud.com>
Tue, 1 Aug 2023 22:03:36 +0000 (22:03 +0000)
empty time slots may still have detailed stats explaining
slot's emptiness: how many objects were scanned, how many
had no pfid, no mirror, etc.

Test-Parameters: trivial testlist=hot-pools
Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: I7e8f594d8615a5e964c01ec1baf2a2b5d3e9cce3
Reviewed-on: https://review.whamcloud.com/c/ex/lustre-release/+/51796
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Colin Faber <cfaber@ddn.com>
Reviewed-by: Alexandre Ioffe <aioffe@ddn.com>
lipe/src/lpurge.c

index 2a4e823..cd86269 100644 (file)
@@ -88,6 +88,7 @@ struct lpurge_slot {
        time_t ls_max_utime;
        unsigned long ls_age;
        unsigned long ls_found;
+       unsigned long ls_scanned;
        unsigned long ls_used_kb;
        unsigned long ls_stored; /* FIDs stored */
        unsigned int ls_scan;
@@ -216,6 +217,7 @@ static void lpurge_init_result(void)
                lpurge_hist[i].ls_min_utime = ~0UL;
                lpurge_hist[i].ls_max_utime = 0;
                lpurge_hist[i].ls_found = 0;
+               lpurge_hist[i].ls_scanned = 0;
                lpurge_hist[i].ls_used_kb = 0;
                lpurge_hist[i].ls_stored = 0;
                LIPE_INIT_LIST_HEAD(&lpurge_hist[i].ls_obj_list);
@@ -231,6 +233,7 @@ static void lpurge_reset_result(void)
 
        for (i = 0; i < LPURGE_HIST_MAX; i++) {
                lpurge_hist[i].ls_found = 0;
+               lpurge_hist[i].ls_scanned = 0;
                lpurge_hist[i].ls_used_kb = 0;
                lpurge_hist[i].ls_stored = 0;
                lpurge_hist[i].ls_scan = 1;
@@ -548,6 +551,7 @@ static void lpurge_reclaim_slot(unsigned int index)
                                      &ls_1->ls_obj_list);
                ls_1->ls_stored = ls_2->ls_stored;
                ls_1->ls_found = ls_2->ls_found;
+               ls_1->ls_scanned = ls_2->ls_scanned;
                ls_1->ls_used_kb = ls_2->ls_used_kb;
                ls_1->ls_age = ls_2->ls_age;
                ls_1->ls_max_utime = ls_2->ls_max_utime;
@@ -564,6 +568,7 @@ static void lpurge_reclaim_slot(unsigned int index)
        pthread_mutex_lock(&lpurge_hist[index].ls_mutex);
        lpurge_hist[index].ls_stored = 0;
        lpurge_hist[index].ls_found = 0;
+       lpurge_hist[index].ls_scanned = 0;
        lpurge_hist[index].ls_used_kb = 0;
        lpurge_hist[index].ls_min_utime = ~0UL;
        lpurge_hist[index].ls_max_utime = 0;
@@ -728,6 +733,7 @@ static int lpurge_lipe_callback(struct lipe_instance *instance,
 
        pthread_mutex_lock(&ls->ls_mutex);
 
+       ls->ls_scanned++;
        if (is_mdt)
                rc = lpurge_check_mdt_object(ls, attrs);
        else
@@ -1777,17 +1783,17 @@ static void lpurge_usr1_handle(int sig)
                total_kb);
 
 #define HIST_FMT \
-       "    hist%u: { age: %lu, found: %lu, space: %lu, stored: %lu, nomirror_cnt: %lu, nomirror_used_kb: %lu, nopfid_cnt: %lu, nopfid_used_kb: %lu, notfirst_cnt: %lu, notfirst_used_kb: %lu }\n"
+       "    hist%u: { age: %lu, scanned: %lu, found: %lu, space: %lu, stored: %lu, nomirror_cnt: %lu, nomirror_used_kb: %lu, nopfid_cnt: %lu, nopfid_used_kb: %lu, notfirst_cnt: %lu, notfirst_used_kb: %lu }\n"
 
        fprintf(f, "hlists:\n");
        for (i = LPURGE_HIST_MAX - 1; i >= 0; i--) {
                struct lpurge_slot *ls = lpurge_hist + i;
 
-               if (ls->ls_found == 0)
+               if (ls->ls_scanned == 0)
                        continue;
 
-               fprintf(f, HIST_FMT, i, ls->ls_age, ls->ls_found,
-                       ls->ls_used_kb, ls->ls_stored,
+               fprintf(f, HIST_FMT, i, ls->ls_age, ls->ls_scanned,
+                       ls->ls_found, ls->ls_used_kb, ls->ls_stored,
                        ls->ls_nomirror_objs, ls->ls_nomirror_used_kb,
                        ls->ls_nopfid_objs, ls->ls_nopfid_used_kb,
                        ls->ls_notfirst_objs, ls->ls_notfirst_used_kb);