Re: [PATCH 05/27] mm, vmscan: Have kswapd only scan based on the highest requested zone

From: Vlastimil Babka
Date: Wed Jun 15 2016 - 09:13:28 EST


On 06/09/2016 08:04 PM, Mel Gorman wrote:
kswapd checks all eligible zones to see if they need balancing even if it was
woken for a lower zone. This made sense when we reclaimed on a per-zone basis
because we wanted to shrink zones fairly so avoid age-inversion problems.

Now we reclaim a single lru, but still will skip over pages from the higher zones than reclaim_idx, so this is not much different from per-zone basis wrt age-inversion?

Ideally this is completely unnecessary when reclaiming on a per-node basis.
In theory, there may still be anomalies when all requests are for lower
zones and very old pages are preserved in higher zones but this should be
the exceptional case.

Signed-off-by: Mel Gorman <mgorman@xxxxxxxxxxxxxxxxxxx>

I don't see the argument, but agree it should be exceptional in any case, and if there's such a case, it's better to focus on pages from the zone(s) where a pending (potentially atomic) allocation is restricted to. Or rather, this is the only way we can focus reclaim on such pages now that there's a single lru list.

Acked-by: Vlastimil Babka <vbabka@xxxxxxx>

---
mm/vmscan.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/mm/vmscan.c b/mm/vmscan.c
index ab1b28e7e20a..0a619241c576 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -3171,11 +3171,8 @@ static int balance_pgdat(pg_data_t *pgdat, int order, int classzone_idx)

sc.nr_reclaimed = 0;

- /*
- * Scan in the highmem->dma direction for the highest
- * zone which needs scanning
- */
- for (i = pgdat->nr_zones - 1; i >= 0; i--) {
+ /* Scan from the highest requested zone to dma */
+ for (i = classzone_idx; i >= 0; i--) {
struct zone *zone = pgdat->node_zones + i;

if (!populated_zone(zone))