[RFC PATCH v4 11/16] mm/mglru: skip gentle reclaim at DEF_PRIORITY for extreme swappiness
From: Barry Song (Xiaomi)
Date: Wed Aug 12 2026 - 08:26:30 EST
For extreme swappiness (<= MIN_SWAPPINESS + 1 or >= MAX_SWAPPINESS),
skip gentle reclaim.
Falling back too easily, even at DEF_PRIORITY, undermines the effect
of extreme swappiness.
This matches the logic in get_type_to_scan(), where we have:
if (swappiness <= MIN_SWAPPINESS + 1)
return LRU_GEN_FILE;
if (swappiness >= MAX_SWAPPINESS)
return LRU_GEN_ANON;
Signed-off-by: Barry Song (Xiaomi) <baohua@xxxxxxxxxx>
---
mm/vmscan.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/mm/vmscan.c b/mm/vmscan.c
index b6c17ece3b3f..48a068b50678 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -281,6 +281,13 @@ static inline bool is_exec_file_folio(const struct folio *folio,
return vma_flags_test(vma_flags, VMA_EXEC_BIT) && folio_is_file_lru(folio);
}
+/* See get_type_to_scan(): these values always select FILE or ANON */
+static inline bool is_extreme_swappiness(int swappiness)
+{
+ return swappiness <= MIN_SWAPPINESS + 1 ||
+ swappiness >= MAX_SWAPPINESS;
+}
+
static void set_task_reclaim_state(struct task_struct *task,
struct reclaim_state *rs)
{
@@ -5094,8 +5101,11 @@ static bool should_run_aging(struct lruvec *lruvec, unsigned long max_seq,
if (evictable_min_seq(min_seq, swappiness) + MIN_NR_GENS > max_seq)
return true;
- /* try to avoid aging, do gentle reclaim at the default priority */
- if (sc->priority == DEF_PRIORITY)
+ /*
+ * Try to avoid aging by doing gentle reclaim at the default
+ * priority. Skip gentle reclaim for extreme swappiness.
+ */
+ if (sc->priority == DEF_PRIORITY && !is_extreme_swappiness(swappiness))
return false;
/* better to run aging even though eviction is still possible */
--
2.34.1