Commit bf3480d7 authored by Weilin Tong's avatar Weilin Tong Committed by Andrew Morton
Browse files

mm/shmem: add mTHP swpout fallback statistics in shmem_writeout()

Currently, when shmem mTHPs are split and swapped out via
shmem_writeout(), there are no unified statistics to trace these mTHP
swpout fallback events.  This makes it difficult to analyze the prevalence
of mTHP splitting and fallback during swap operations, which is important
for memory diagnostics.

Here we add statistics counting for mTHP fallback to small pages when
splitting and swapping out in shmem_writeout().

Link: https://lkml.kernel.org/r/20251215024632.250149-1-tongweilin@linux.alibaba.com


Signed-off-by: default avatarWeilin Tong <tongweilin@linux.alibaba.com>
Reviewed-by: default avatarBaolin Wang <baolin.wang@linux.alibaba.com>
Cc: Hugh Dickins <hughd@google.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent ee628d9c
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -1593,11 +1593,23 @@ int shmem_writeout(struct folio *folio, struct swap_iocb **plug,
	}

	if (split) {
		int order;

try_split:
		order = folio_order(folio);
		/* Ensure the subpages are still dirty */
		folio_test_set_dirty(folio);
		if (split_folio_to_list(folio, folio_list))
			goto redirty;

#ifdef CONFIG_TRANSPARENT_HUGEPAGE
		if (order >= HPAGE_PMD_ORDER) {
			count_memcg_folio_events(folio, THP_SWPOUT_FALLBACK, 1);
			count_vm_event(THP_SWPOUT_FALLBACK);
		}
#endif
		count_mthp_stat(order, MTHP_STAT_SWPOUT_FALLBACK);

		folio_clear_dirty(folio);
	}