Commit 210ed5ef authored by Ryan Roberts's avatar Ryan Roberts Committed by Liu Shixin
Browse files

mm: shmem: rename mTHP shmem counters

mainline inclusion
from mainline-v6.11-rc1
commit 63d9866ab01ffd0d0835d5564107283a4afc0a38
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/IAIHPC

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=63d9866ab01ffd0d0835d5564107283a4afc0a38

--------------------------------

The legacy PMD-sized THP counters at /proc/vmstat include thp_file_alloc,
thp_file_fallback and thp_file_fallback_charge, which rather confusingly
refer to shmem THP and do not include any other types of file pages.  This
is inconsistent since in most other places in the kernel, THP counters are
explicitly separated for anon, shmem and file flavours.  However, we are
stuck with it since it constitutes a user ABI.

Recently, commit 66f44583f9b6 ("mm: shmem: add mTHP counters for anonymous
shmem") added equivalent mTHP stats for shmem, keeping the same "file_"
prefix in the names.  But in future, we may want to add extra stats to
cover actual file pages, at which point, it would all become very
confusing.

So let's take the opportunity to rename these new counters "shmem_" before
the change makes it upstream and the ABI becomes immutable.  While we are
at it, let's improve the documentation for the legacy counters to make it
clear that they count shmem pages only.

Link: https://lkml.kernel.org/r/20240710095503.3193901-1-ryan.roberts@arm.com


Signed-off-by: default avatarRyan Roberts <ryan.roberts@arm.com>
Reviewed-by: default avatarBaolin Wang <baolin.wang@linux.alibaba.com>
Reviewed-by: default avatarLance Yang <ioworker0@gmail.com>
Reviewed-by: default avatarZi Yan <ziy@nvidia.com>
Reviewed-by: default avatarBarry Song <baohua@kernel.org>
Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
Cc: Daniel Gomez <da.gomez@samsung.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLiu Shixin <liushixin2@huawei.com>
parent b7e9a1a5
Loading
Loading
Loading
Loading
+16 −13
Original line number Diff line number Diff line
@@ -441,20 +441,23 @@ thp_collapse_alloc_failed
	the allocation.

thp_file_alloc
	is incremented every time a file huge page is successfully
	allocated.
	is incremented every time a shmem huge page is successfully
	allocated (Note that despite being named after "file", the counter
	measures only shmem).

thp_file_fallback
	is incremented if a file huge page is attempted to be allocated
	but fails and instead falls back to using small pages.
	is incremented if a shmem huge page is attempted to be allocated
	but fails and instead falls back to using small pages. (Note that
	despite being named after "file", the counter measures only shmem).

thp_file_fallback_charge
	is incremented if a file huge page cannot be charged and instead
	is incremented if a shmem huge page cannot be charged and instead
	falls back to using small pages even though the allocation was
	successful.
	successful. (Note that despite being named after "file", the
	counter measures only shmem).

thp_file_mapped
	is incremented every time a file huge page is mapped into
	is incremented every time a file or shmem huge page is mapped into
	user address space.

thp_split_page
@@ -525,16 +528,16 @@ swpout_fallback
	Usually because failed to allocate some continuous swap space
	for the huge page.

file_alloc
	is incremented every time a file huge page is successfully
shmem_alloc
	is incremented every time a shmem huge page is successfully
	allocated.

file_fallback
	is incremented if a file huge page is attempted to be allocated
shmem_fallback
	is incremented if a shmem huge page is attempted to be allocated
	but fails and instead falls back to using small pages.

file_fallback_charge
	is incremented if a file huge page cannot be charged and instead
shmem_fallback_charge
	is incremented if a shmem huge page cannot be charged and instead
	falls back to using small pages even though the allocation was
	successful.

+3 −3
Original line number Diff line number Diff line
@@ -281,9 +281,9 @@ enum mthp_stat_item {
	MTHP_STAT_ANON_FAULT_FALLBACK_CHARGE,
	MTHP_STAT_SWPOUT,
	MTHP_STAT_SWPOUT_FALLBACK,
	MTHP_STAT_FILE_ALLOC,
	MTHP_STAT_FILE_FALLBACK,
	MTHP_STAT_FILE_FALLBACK_CHARGE,
	MTHP_STAT_SHMEM_ALLOC,
	MTHP_STAT_SHMEM_FALLBACK,
	MTHP_STAT_SHMEM_FALLBACK_CHARGE,
	MTHP_STAT_SPLIT,
	MTHP_STAT_SPLIT_FAILED,
	MTHP_STAT_SPLIT_DEFERRED,
+6 −6
Original line number Diff line number Diff line
@@ -719,9 +719,9 @@ DEFINE_MTHP_STAT_ATTR(anon_fault_fallback, MTHP_STAT_ANON_FAULT_FALLBACK);
DEFINE_MTHP_STAT_ATTR(anon_fault_fallback_charge, MTHP_STAT_ANON_FAULT_FALLBACK_CHARGE);
DEFINE_MTHP_STAT_ATTR(swpout, MTHP_STAT_SWPOUT);
DEFINE_MTHP_STAT_ATTR(swpout_fallback, MTHP_STAT_SWPOUT_FALLBACK);
DEFINE_MTHP_STAT_ATTR(file_alloc, MTHP_STAT_FILE_ALLOC);
DEFINE_MTHP_STAT_ATTR(file_fallback, MTHP_STAT_FILE_FALLBACK);
DEFINE_MTHP_STAT_ATTR(file_fallback_charge, MTHP_STAT_FILE_FALLBACK_CHARGE);
DEFINE_MTHP_STAT_ATTR(shmem_alloc, MTHP_STAT_SHMEM_ALLOC);
DEFINE_MTHP_STAT_ATTR(shmem_fallback, MTHP_STAT_SHMEM_FALLBACK);
DEFINE_MTHP_STAT_ATTR(shmem_fallback_charge, MTHP_STAT_SHMEM_FALLBACK_CHARGE);
DEFINE_MTHP_STAT_ATTR(split, MTHP_STAT_SPLIT);
DEFINE_MTHP_STAT_ATTR(split_failed, MTHP_STAT_SPLIT_FAILED);
DEFINE_MTHP_STAT_ATTR(split_deferred, MTHP_STAT_SPLIT_DEFERRED);
@@ -732,9 +732,9 @@ static struct attribute *stats_attrs[] = {
	&anon_fault_fallback_charge_attr.attr,
	&swpout_attr.attr,
	&swpout_fallback_attr.attr,
	&file_alloc_attr.attr,
	&file_fallback_attr.attr,
	&file_fallback_charge_attr.attr,
	&shmem_alloc_attr.attr,
	&shmem_fallback_attr.attr,
	&shmem_fallback_charge_attr.attr,
	&split_attr.attr,
	&split_failed_attr.attr,
	&split_deferred_attr.attr,
+4 −4
Original line number Diff line number Diff line
@@ -1792,7 +1792,7 @@ static struct folio *shmem_alloc_and_add_folio(struct vm_fault *vmf,
			if (pages == HPAGE_PMD_NR)
				count_vm_event(THP_FILE_FALLBACK);
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
			count_mthp_stat(order, MTHP_STAT_FILE_FALLBACK);
			count_mthp_stat(order, MTHP_STAT_SHMEM_FALLBACK);
#endif
			order = next_order(&suitable_orders, order);
		}
@@ -1821,8 +1821,8 @@ static struct folio *shmem_alloc_and_add_folio(struct vm_fault *vmf,
				count_vm_event(THP_FILE_FALLBACK_CHARGE);
			}
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
			count_mthp_stat(folio_order(folio), MTHP_STAT_FILE_FALLBACK);
			count_mthp_stat(folio_order(folio), MTHP_STAT_FILE_FALLBACK_CHARGE);
			count_mthp_stat(folio_order(folio), MTHP_STAT_SHMEM_FALLBACK);
			count_mthp_stat(folio_order(folio), MTHP_STAT_SHMEM_FALLBACK_CHARGE);
#endif
		}
		goto unlock;
@@ -2203,7 +2203,7 @@ static int shmem_get_folio_gfp(struct inode *inode, pgoff_t index,
			if (folio_test_pmd_mappable(folio))
				count_vm_event(THP_FILE_ALLOC);
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
			count_mthp_stat(folio_order(folio), MTHP_STAT_FILE_ALLOC);
			count_mthp_stat(folio_order(folio), MTHP_STAT_SHMEM_ALLOC);
#endif
			goto alloced;
		}