mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] mm/hugetlb: add htlb_dissolve vmstat event
@ 2026-11-05  2:03 Mark Bundschuh
  2026-11-05 17:46 ` Jiaqi Yan
  0 siblings, 1 reply; 3+ messages in thread
From: Mark Bundschuh @ 2026-11-05  2:03 UTC (permalink / raw)
  To: akpm, muchun.song, osalvador
  Cc: david, linux-mm, linux-kernel, Mark Bundschuh

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 folio that
dissolve_free_hugetlb_folio() frees.

Signed-off-by: Mark Bundschuh <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


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] mm/hugetlb: add htlb_dissolve vmstat event
  2026-11-05  2:03 [PATCH] mm/hugetlb: add htlb_dissolve vmstat event Mark Bundschuh
@ 2026-11-05 17:46 ` Jiaqi Yan
  2026-11-05 19:12   ` Mark Bundschuh
  0 siblings, 1 reply; 3+ messages in thread
From: Jiaqi Yan @ 2026-11-05 17:46 UTC (permalink / raw)
  To: Mark Bundschuh
  Cc: akpm, muchun.song, osalvador, david, linux-mm, linux-kernel

On Wed, Nov 4, 2026 at 6:03 PM Mark Bundschuh <mkbund@amazon.com> wrote:
>
> 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 folio that
> dissolve_free_hugetlb_folio() frees.
>
> Signed-off-by: Mark Bundschuh <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);

What if update_and_free_hugetlb_folio() failed / bailed out?

>                 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
>
>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] mm/hugetlb: add htlb_dissolve vmstat event
  2026-11-05 17:46 ` Jiaqi Yan
@ 2026-11-05 19:12   ` Mark Bundschuh
  0 siblings, 0 replies; 3+ messages in thread
From: Mark Bundschuh @ 2026-11-05 19:12 UTC (permalink / raw)
  To: jiaqiyan; +Cc: akpm, muchun.song, osalvador, david, linux-mm, linux-kernel

On Thu, Nov 5, 2026 at 09:46:58AM -0800, Jiaqi Yan wrote:
> >                 update_and_free_hugetlb_folio(h, folio, false);
> > +               count_vm_event(HTLB_DISSOLVE);
>
> What if update_and_free_hugetlb_folio() failed / bailed out?

dissolve_free_hugetlb_folio() already rejects gigantic folios without
runtime support, and restores the vmemmap itself before calling it, so
the only bail out left is a folio with unreliable raw hwpoison, which is
leaked on purpose. That folio still leaves the pool, so I think it should
be counted. "frees" in the commit message is misleading though, I'll fix
that in v2.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-11-05 19:12 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-05  2:03 [PATCH] mm/hugetlb: add htlb_dissolve vmstat event Mark Bundschuh
2026-11-05 17:46 ` Jiaqi Yan
2026-11-05 19:12   ` Mark Bundschuh

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®