diff options
Diffstat (limited to '0015-ZEN-mm-Disable-watermark-boosting-by-default.patch')
-rw-r--r-- | 0015-ZEN-mm-Disable-watermark-boosting-by-default.patch | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/0015-ZEN-mm-Disable-watermark-boosting-by-default.patch b/0015-ZEN-mm-Disable-watermark-boosting-by-default.patch new file mode 100644 index 000000000000..0ef0887d7df8 --- /dev/null +++ b/0015-ZEN-mm-Disable-watermark-boosting-by-default.patch @@ -0,0 +1,48 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Sultan Alsawaf <sultan@kerneltoast.com> +Date: Sat, 28 Mar 2020 13:06:28 -0700 +Subject: [PATCH] ZEN: 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> +--- + mm/page_alloc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/mm/page_alloc.c b/mm/page_alloc.c +index 3589febc6d31..5690ef37d2bf 100644 +--- a/mm/page_alloc.c ++++ b/mm/page_alloc.c +@@ -341,7 +341,7 @@ compound_page_dtor * const compound_page_dtors[NR_COMPOUND_DTORS] = { + + int min_free_kbytes = 1024; + int user_min_free_kbytes = -1; +-int watermark_boost_factor __read_mostly = 15000; ++int watermark_boost_factor __read_mostly; + int watermark_scale_factor = 10; + + static unsigned long nr_kernel_pages __initdata; +-- +2.35.1 + |