All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH v3 0/6] mm: mglru: fix swappiness behavior
@ 2026-07-31  8:38 Barry Song (Xiaomi)
  2026-07-31  8:38 ` [RFC PATCH v3 1/6] mm: mglru: prevent min_seq[type] from pointing to an empty generation Barry Song (Xiaomi)
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Barry Song (Xiaomi) @ 2026-07-31  8:38 UTC (permalink / raw)
  To: akpm, linux-mm
  Cc: axelrasmussen, david, hannes, kasong, linux-kernel, ljs,
	lyugaofei, mhocko, qi.zheng, shakeel.butt, stevensd, weixugc,
	yuanchu, chenridong, zhangbo56, wangzicheng, lianux.mm,
	Barry Song (Xiaomi)

RFC v3:
 - Added Ridong's patch of improving isolate_folios() readability;
 - for lru_gen_imbalanced(), apply some suggestions from Zicheng
   and Kairui, considering lruvec size and use macro;
 - drop "mm: mglru: only fall back when reclaim is running at high
   priority"
 - mitigate aging for balanced swappiess value(near middle 100)
   as swappiness bias is less a concern for them; but slightly
   increased aging overhead might not be good.
 *  RFC v2 link:
   https://lore.kernel.org/linux-mm/20260726122123.7614-1-baohua@kernel.org/

RFC v2:
 - Quickly address a few issues raised in the Sashiko comments so
   reviewers can ignore v1 and review a cleaner version instead.
   https://sashiko.dev/#/patchset/20260726012946.18684-1-baohua@kernel.org
   Thanks, Sashiko!

The active/inactive LRU respects swappiness well. Anonymous page
scanning and reclamation increase roughly linearly with
swappiness, while file page scanning and reclamation decrease
accordingly.
For example, when swappiness reaches 200, both pgsteal_file and
pgscan_file drop to zero while building the kernel in a 1 GB
memcg. In contrast, MGLRU shows almost no change across different
swappiness values.

                   pgsteal_file

Swappiness    LRU         MGLRU
--------------------------------
1             10567455      763612
36              990706      480205
71              688170      415848
106             446294      386164
141             286307      359196
176             201733      351686
200                  0      330093


                   pgsteal_anon

Swappiness    LRU         MGLRU
--------------------------------
1              4410548     2726362
36             2465268     2762859
71             2677908     2885124
106            2737227     2841796
141            2984276     3035015
176            3381338     2938302
200           13116359     3113499


                   pgscan_file

Swappiness    LRU         MGLRU
--------------------------------
1             17997223      923094
36             1325674      539571
71              852345      464222
106             538207      464477
141             357253      412277
176             217536      399446
200                  0      375902


                   pgscan_anon

Swappiness    LRU         MGLRU
--------------------------------
1             31639423     5987136
36            23441521     5753224
71            26067110     6101780
106           25619448     5782919
141           26842088     6234264
176           29200021     5980292
200           62193924     6413125

This patchset respects the type selected by positive_ctrl_err(),
which uses swappiness as its gain. It does so by running aging when
the preferred type has few or no reclaimable folios, allowing more
folios of that type to become reclaimable.

For balanced swappiness values near the middle (for example,
60~140), the swappiness bias is less of a concern. We still avoid
aggressive aging and allow fallback to reduce any potential aging
overhead.

In other words, this patch strengthens reclaim type preference
for extreme swappiness values while preserving the existing
MGLRU behavior for balanced swappiness values.

With this patchset, swappiness starts to behave similarly to the
active/inactive LRU.

                         pgsteal_file

Swappiness      LRU        MGLRU      MGLRU+Patch
-------------------------------------------------
1             10567455      763612        1938714
36              990706      480205         427934
71              688170      415848         373450
106             446294      386164         368160
141             286307      359196         334467
176             201733      351686         293716
200                  0      330093             25


                         pgsteal_anon

Swappiness      LRU        MGLRU      MGLRU+Patch
-------------------------------------------------
1              4410548     2726362        3284272
36             2465268     2762859        3315112
71             2677908     2885124        2942357
106            2737227     2841796        2941288
141            2984276     3035015        3345933
176            3381338     2938302        3409531
200           13116359     3113499       14414151


                         pgscan_file

Swappiness      LRU        MGLRU      MGLRU+Patch
-------------------------------------------------
1             17997223      923094        2612649
36             1325674      539571         514506
71              852345      464222         423155
106             538207      464477         436573
141             357253      412277         389644
176             217536      399446         333973
200                  0      375902             25


                         pgscan_anon

Swappiness      LRU        MGLRU      MGLRU+Patch
-------------------------------------------------
1             31639423     5987136        6191482
36            23441521     5753224        6097925
71            26067110     6101780        6157755
106           25619448     5782919        6203221
141           26842088     6234264        6599502
176           29200021     5980292        6783074
200           62193924     6413125       22814377

Barry Song (Xiaomi) (4):
  mm: mglru: prevent min_seq[type] from pointing to an empty generation
  mm: mglru: let scan_folios() scan both reclaimable generations
  mm: mglru: improve scan_folios() exhaustion detection
  mm: mglru: run aging if the preferred type has no folios in
    reclaimable gens

Ridong Chen (1):
  mm/mglru: improve readability of isolate_folios()

lyugaofei (1):
  mm: mglru: run aging when pages are severely imbalanced across gens

 include/linux/mmzone.h |   6 +-
 mm/vmscan.c            | 145 +++++++++++++++++++++++++++++++----------
 2 files changed, 112 insertions(+), 39 deletions(-)

-- 
2.34.1


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

end of thread, other threads:[~2026-07-31  8:39 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-31  8:38 [RFC PATCH v3 0/6] mm: mglru: fix swappiness behavior Barry Song (Xiaomi)
2026-07-31  8:38 ` [RFC PATCH v3 1/6] mm: mglru: prevent min_seq[type] from pointing to an empty generation Barry Song (Xiaomi)
2026-07-31  8:38 ` [RFC PATCH v3 2/6] mm: mglru: let scan_folios() scan both reclaimable generations Barry Song (Xiaomi)
2026-07-31  8:38 ` [RFC PATCH v3 3/6] mm/mglru: improve readability of isolate_folios() Barry Song (Xiaomi)
2026-07-31  8:38 ` [RFC PATCH v3 4/6] mm: mglru: improve scan_folios() exhaustion detection Barry Song (Xiaomi)
2026-07-31  8:38 ` [RFC PATCH v3 5/6] mm: mglru: run aging when pages are severely imbalanced across gens Barry Song (Xiaomi)
2026-07-31  8:38 ` [RFC PATCH v3 6/6] mm: mglru: run aging if the preferred type has no folios in reclaimable gens Barry Song (Xiaomi)

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.