Re: [PATCH 25/34] mm, vmscan: avoid passing in classzone_idx unnecessarily to compaction_ready

From: Vlastimil Babka
Date: Thu Jul 14 2016 - 08:12:39 EST


On 07/08/2016 11:35 AM, Mel Gorman wrote:
The scan_control structure has enough information available for
compaction_ready() to make a decision. The classzone_idx manipulations in
shrink_zones() are no longer necessary as the highest populated zone is
no longer used to determine if shrink_slab should be called or not.

Signed-off-by: Mel Gorman <mgorman@xxxxxxxxxxxxxxxxxxx>
Acked-by: Hillf Danton <hillf.zj@xxxxxxxxxxxxxxx>

Acked-by: Vlastimil Babka <vbabka@xxxxxxx>

@@ -2621,8 +2609,8 @@ static void shrink_zones(struct zonelist *zonelist, struct scan_control *sc)
*/
if (IS_ENABLED(CONFIG_COMPACTION) &&
sc->order > PAGE_ALLOC_COSTLY_ORDER &&
- zonelist_zone_idx(z) <= classzone_idx &&
- compaction_ready(zone, sc->order, classzone_idx)) {
+ zonelist_zone_idx(z) <= sc->reclaim_idx &&

Hm I notice that the condition on the line above should be always true as the same sc->reclaim_idx value is used to limit zone_idx in for_each_zone_zonelist_nodemask(). The implication was probably true even before this patch (classzone_idx would be <= sc->reclaim_idx), but now it stands out clearly.

+ compaction_ready(zone, sc)) {
sc->compaction_ready = true;
continue;
}