linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Revert "mm/page_alloc.c: don't show protection in zone's ->lowmem_reserve[] for empty zone"
@ 2025-02-26  3:22 Gabriel Krisman Bertazi
  2025-02-26  6:54 ` Michal Hocko
                   ` (2 more replies)
  0 siblings, 3 replies; 19+ messages in thread
From: Gabriel Krisman Bertazi @ 2025-02-26  3:22 UTC (permalink / raw)
  To: akpm
  Cc: linux-mm, Gabriel Krisman Bertazi, Michal Hocko, Mel Gorman,
	Vlastimil Babka, Baoquan He

Commit 96a5c186efff ("mm/page_alloc.c: don't show protection in zone's
->lowmem_reserve[] for empty zone") removes the protection of lower
zones from allocations targeting memory-less high zones.  This had an
unintended impact on the pattern of reclaims because it makes the
high-zone-targeted allocation more likely to succeed in lower zones,
which adds pressure to said zones.  I.e, the following corresponding
checks in zone_watermark_ok/zone_watermark_fast are less likely to
trigger:

        if (free_pages <= min + z->lowmem_reserve[highest_zoneidx])
                return false;

As a result, we are observing an increase in reclaim and kswapd scans,
due to the increased pressure.  This was initially observed as increased
latency in filesystem operations when benchmarking with fio on a machine
with some memory-less zones, but it has since been associated with
increased contention in locks related to memory reclaim.  By reverting
this patch, the original performance was recovered on that machine.

The original commit was introduced as a clarification of the
/proc/zoneinfo output, so it doesn't seem there are usecases depending
on it, making the revert a simple solution.

Cc: Michal Hocko <mhocko@kernel.org>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Baoquan He <bhe@redhat.com>
Fixes: 96a5c186efff ("mm/page_alloc.c: don't show protection in zone's ->lowmem_reserve[] for empty zone")
Signed-off-by: Gabriel Krisman Bertazi <krisman@suse.de>
---
 mm/page_alloc.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 579789600a3c..fe986e6de7a0 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -5849,11 +5849,10 @@ static void setup_per_zone_lowmem_reserve(void)
 
 			for (j = i + 1; j < MAX_NR_ZONES; j++) {
 				struct zone *upper_zone = &pgdat->node_zones[j];
-				bool empty = !zone_managed_pages(upper_zone);
 
 				managed_pages += zone_managed_pages(upper_zone);
 
-				if (clear || empty)
+				if (clear)
 					zone->lowmem_reserve[j] = 0;
 				else
 					zone->lowmem_reserve[j] = managed_pages / ratio;
-- 
2.47.0



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

end of thread, other threads:[~2025-02-27 15:53 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-02-26  3:22 [PATCH] Revert "mm/page_alloc.c: don't show protection in zone's ->lowmem_reserve[] for empty zone" Gabriel Krisman Bertazi
2025-02-26  6:54 ` Michal Hocko
2025-02-26 10:00   ` Baoquan He
2025-02-26 10:52     ` Michal Hocko
2025-02-26 11:00       ` Michal Hocko
2025-02-26 11:51         ` Baoquan He
2025-02-26 12:01           ` Michal Hocko
2025-02-26 15:57             ` Baoquan He
2025-02-26 17:46               ` Michal Hocko
2025-02-27  9:41                 ` Baoquan He
2025-02-27  9:16               ` Vlastimil Babka
2025-02-27 10:24                 ` Baoquan He
2025-02-27 13:16                   ` Vlastimil Babka
2025-02-27 15:53                     ` Baoquan He
2025-02-26 13:07   ` Vlastimil Babka
2025-02-26 16:05   ` Gabriel Krisman Bertazi
2025-02-26 23:00     ` Andrew Morton
2025-02-26 13:00 ` Vlastimil Babka
2025-02-27 11:50 ` Mel Gorman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox