Memory offline and memory failure handling dissolve free hugetlb folios and lower nr_hugepages. Nothing records this, so when the pool shrinks it is hard to tell whether that or a write to nr_hugepages caused it. Add an htlb_dissolve event, counted for each free folio that dissolve_free_hugetlb_folio() takes out of the pool. Signed-off-by: Mark Bundschuh --- v2: say "takes out of the pool" instead of "frees" (Jiaqi) v1: https://lore.kernel.org/all/20261105020324.2011790-1-mkbund@amazon.com/ include/linux/vm_event_item.h | 1 + mm/hugetlb.c | 1 + mm/vmstat.c | 1 + 3 files changed, 3 insertions(+) diff --git a/include/linux/vm_event_item.h b/include/linux/vm_event_item.h index 2628ccda076a..822fe862e5b3 100644 --- a/include/linux/vm_event_item.h +++ b/include/linux/vm_event_item.h @@ -71,6 +71,7 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT, #endif #ifdef CONFIG_HUGETLB_PAGE HTLB_BUDDY_PGALLOC, HTLB_BUDDY_PGALLOC_FAIL, + HTLB_DISSOLVE, #endif #ifdef CONFIG_CMA CMA_ALLOC_SUCCESS, diff --git a/mm/hugetlb.c b/mm/hugetlb.c index da5d04edf7c1..7c79523b2a3c 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -2047,6 +2047,7 @@ int dissolve_free_hugetlb_folio(struct folio *folio) } update_and_free_hugetlb_folio(h, folio, false); + count_vm_event(HTLB_DISSOLVE); return rc; } out: diff --git a/mm/vmstat.c b/mm/vmstat.c index a3e809c57f29..6282eef7074a 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -1397,6 +1397,7 @@ const char * const vmstat_text[] = { #ifdef CONFIG_HUGETLB_PAGE [I(HTLB_BUDDY_PGALLOC)] = "htlb_buddy_alloc_success", [I(HTLB_BUDDY_PGALLOC_FAIL)] = "htlb_buddy_alloc_fail", + [I(HTLB_DISSOLVE)] = "htlb_dissolve", #endif #ifdef CONFIG_CMA [I(CMA_ALLOC_SUCCESS)] = "cma_alloc_success", base-commit: 05441d697f7f9a927264f4058cbbc6a03dfcac9d -- 2.50.1