mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
mm: swap: count successful large folio zswap stores in hugepage zswpout stats
Added a new MTHP_STAT_ZSWPOUT entry to the sysfs transparent_hugepage stats so that successful large folio zswap stores can be accounted under the per-order sysfs "zswpout" stats: /sys/kernel/mm/transparent_hugepage/hugepages-*kB/stats/zswpout Other non-zswap swap device swap-out events will be counted under the existing sysfs "swpout" stats: /sys/kernel/mm/transparent_hugepage/hugepages-*kB/stats/swpout Also, added documentation for the newly added sysfs per-order hugepage "zswpout" stats. The documentation clarifies that only non-zswap swapouts will be accounted in the existing "swpout" stats. Link: https://lkml.kernel.org/r/20241001053222.6944-8-kanchana.p.sridhar@intel.com Signed-off-by: Kanchana P Sridhar <kanchana.p.sridhar@intel.com> Reviewed-by: Nhat Pham <nphamcs@gmail.com> Cc: Chengming Zhou <chengming.zhou@linux.dev> Cc: "Huang, Ying" <ying.huang@intel.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Matthew Wilcox <willy@infradead.org> Cc: Ryan Roberts <ryan.roberts@arm.com> Cc: Shakeel Butt <shakeel.butt@linux.dev> Cc: Usama Arif <usamaarif642@gmail.com> Cc: Wajdi Feghali <wajdi.k.feghali@intel.com> Cc: Yosry Ahmed <yosryahmed@google.com> Cc: "Zou, Nanhai" <nanhai.zou@intel.com> Cc: Barry Song <21cnbao@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
b7c0ccdfba
commit
0c560dd860
|
|
@ -530,10 +530,14 @@ anon_fault_fallback_charge
|
|||
instead falls back to using huge pages with lower orders or
|
||||
small pages even though the allocation was successful.
|
||||
|
||||
swpout
|
||||
is incremented every time a huge page is swapped out in one
|
||||
zswpout
|
||||
is incremented every time a huge page is swapped out to zswap in one
|
||||
piece without splitting.
|
||||
|
||||
swpout
|
||||
is incremented every time a huge page is swapped out to a non-zswap
|
||||
swap device in one piece without splitting.
|
||||
|
||||
swpout_fallback
|
||||
is incremented if a huge page has to be split before swapout.
|
||||
Usually because failed to allocate some continuous swap space
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@ enum mthp_stat_item {
|
|||
MTHP_STAT_ANON_FAULT_ALLOC,
|
||||
MTHP_STAT_ANON_FAULT_FALLBACK,
|
||||
MTHP_STAT_ANON_FAULT_FALLBACK_CHARGE,
|
||||
MTHP_STAT_ZSWPOUT,
|
||||
MTHP_STAT_SWPOUT,
|
||||
MTHP_STAT_SWPOUT_FALLBACK,
|
||||
MTHP_STAT_SHMEM_ALLOC,
|
||||
|
|
|
|||
|
|
@ -615,6 +615,7 @@ static struct kobj_attribute _name##_attr = __ATTR_RO(_name)
|
|||
DEFINE_MTHP_STAT_ATTR(anon_fault_alloc, MTHP_STAT_ANON_FAULT_ALLOC);
|
||||
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(zswpout, MTHP_STAT_ZSWPOUT);
|
||||
DEFINE_MTHP_STAT_ATTR(swpout, MTHP_STAT_SWPOUT);
|
||||
DEFINE_MTHP_STAT_ATTR(swpout_fallback, MTHP_STAT_SWPOUT_FALLBACK);
|
||||
#ifdef CONFIG_SHMEM
|
||||
|
|
@ -633,6 +634,7 @@ static struct attribute *anon_stats_attrs[] = {
|
|||
&anon_fault_fallback_attr.attr,
|
||||
&anon_fault_fallback_charge_attr.attr,
|
||||
#ifndef CONFIG_SHMEM
|
||||
&zswpout_attr.attr,
|
||||
&swpout_attr.attr,
|
||||
&swpout_fallback_attr.attr,
|
||||
#endif
|
||||
|
|
@ -663,6 +665,7 @@ static struct attribute_group file_stats_attr_grp = {
|
|||
|
||||
static struct attribute *any_stats_attrs[] = {
|
||||
#ifdef CONFIG_SHMEM
|
||||
&zswpout_attr.attr,
|
||||
&swpout_attr.attr,
|
||||
&swpout_fallback_attr.attr,
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -277,6 +277,7 @@ int swap_writepage(struct page *page, struct writeback_control *wbc)
|
|||
swap_zeromap_folio_clear(folio);
|
||||
}
|
||||
if (zswap_store(folio)) {
|
||||
count_mthp_stat(folio_order(folio), MTHP_STAT_ZSWPOUT);
|
||||
folio_unlock(folio);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user