2024-10-29 05:12:06 +03:00
|
|
|
From 5f16843397798d2c709e3b8af4b1a73539d13aa8 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Sultan Alsawaf <sultan@kerneltoast.com>
|
|
|
|
Date: Sat, 28 Mar 2020 13:06:28 -0700
|
|
|
|
Subject: ZEN: INTERACTIVE: mm: Disable watermark boosting by default
|
|
|
|
|
|
|
|
What watermark boosting does is preemptively fire up kswapd to free
|
|
|
|
memory when there hasn't been an allocation failure. It does this by
|
|
|
|
increasing kswapd's high watermark goal and then firing up kswapd. The
|
|
|
|
reason why this causes freezes is because, with the increased high
|
|
|
|
watermark goal, kswapd will steal memory from processes that need it in
|
|
|
|
order to make forward progress. These processes will, in turn, try to
|
|
|
|
allocate memory again, which will cause kswapd to steal necessary pages
|
|
|
|
from those processes again, in a positive feedback loop known as page
|
|
|
|
thrashing. When page thrashing occurs, your system is essentially
|
|
|
|
livelocked until the necessary forward progress can be made to stop
|
|
|
|
processes from trying to continuously allocate memory and trigger
|
|
|
|
kswapd to steal it back.
|
|
|
|
|
|
|
|
This problem already occurs with kswapd *without* watermark boosting,
|
|
|
|
but it's usually only encountered on machines with a small amount of
|
|
|
|
memory and/or a slow CPU. Watermark boosting just makes the existing
|
|
|
|
problem worse enough to notice on higher spec'd machines.
|
|
|
|
|
|
|
|
Disable watermark boosting by default since it's a total dumpster fire.
|
|
|
|
I can't imagine why anyone would want to explicitly enable it, but the
|
|
|
|
option is there in case someone does.
|
|
|
|
|
|
|
|
Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
|
|
|
|
---
|
|
|
|
init/Kconfig | 1 +
|
|
|
|
mm/page_alloc.c | 4 ++++
|
|
|
|
2 files changed, 5 insertions(+)
|
|
|
|
|
|
|
|
--- a/init/Kconfig
|
|
|
|
+++ b/init/Kconfig
|
2024-12-05 18:46:18 +03:00
|
|
|
@@ -160,6 +160,7 @@ config ZEN_INTERACTIVE
|
2024-10-29 05:12:06 +03:00
|
|
|
MG-LRU minimum cache TTL.......: 0 -> 1000 ms
|
|
|
|
Compact unevictable............: yes -> no
|
|
|
|
Compaction proactiveness.......: 20 -> 0
|
|
|
|
+ Watermark boost factor.........: 1.5 -> 0
|
|
|
|
|
|
|
|
--- EEVDF CPU Scheduler --------------------------------
|
|
|
|
|
|
|
|
--- a/mm/page_alloc.c
|
|
|
|
+++ b/mm/page_alloc.c
|
|
|
|
@@ -271,7 +271,11 @@ const char * const migratetype_names[MIG
|
|
|
|
|
|
|
|
int min_free_kbytes = 1024;
|
|
|
|
int user_min_free_kbytes = -1;
|
|
|
|
+#ifdef CONFIG_ZEN_INTERACTIVE
|
|
|
|
+static int watermark_boost_factor __read_mostly;
|
|
|
|
+#else
|
|
|
|
static int watermark_boost_factor __read_mostly = 15000;
|
|
|
|
+#endif
|
|
|
|
static int watermark_scale_factor = 10;
|
|
|
|
|
|
|
|
/* movable_zone is the "real" zone pages in ZONE_MOVABLE are taken from */
|