[PATCH v2 1/3] feat: scale vmpressure window with machine size
From: deepakroag
Date: Thu Jul 16 2026 - 08:01:11 EST
Replace the fixed 512-page vmpressure window with a boot-time value
derived from total memory and CPU count, clamped between 128 and 2048 pages.
Signed-off-by: deepakroag <gaikwad.dcg@xxxxxxxxx>
---
mm/vmpressure.c | 24 ++++++++++++++++++++++--
1 file changed, 22 insertions(+), 2 deletions(-)
diff --git a/mm/vmpressure.c b/mm/vmpressure.c
index f053554e5..8925d4ad3 100644
--- a/mm/vmpressure.c
+++ b/mm/vmpressure.c
@@ -33,9 +33,29 @@
* SWAP_CLUSTER_MAX, it makes sense to use it for the window size as well.
*
* TODO: Make the window size depend on machine size, as we do for vmstat
- * thresholds. Currently we set it to 512 pages (2MB for 4KB pages).
+ * thresholds. Scales with CPU count and total memory at boot.
*/
-static const unsigned long vmpressure_win = SWAP_CLUSTER_MAX * 16;
+static unsigned long vmpressure_win;
+
+static unsigned long __init vmpressure_window_size(void)
+{
+ unsigned long win;
+ int mem;
+
+ mem = totalram_pages() >> (27 - PAGE_SHIFT);
+ win = SWAP_CLUSTER_MAX * (unsigned long)fls(num_online_cpus()) *
+ (1 + fls(mem));
+ win = max(win, SWAP_CLUSTER_MAX * 4UL);
+ win = min(win, SWAP_CLUSTER_MAX * 64UL);
+ return win;
+}
+
+static int __init vmpressure_win_init(void)
+{
+ vmpressure_win = vmpressure_window_size();
+ return 0;
+}
+core_initcall(vmpressure_win_init);
/*
* These thresholds are used when we account memory pressure through
--
Deepak Rao Gaikwad