On 09/26/2016 06:20 PM, Vlastimil Babka wrote: > The compaction_zonelist_suitable() function tries to determine if compaction > will be able to proceed after sufficient reclaim, i.e. whether there are > enough reclaimable pages to provide enough order-0 freepages for compaction. > > This addition of reclaimable pages to the free pages works well for the order-0 > watermark check, but in the fragmentation index check we only consider truly > free pages. Thus we can get fragindex value close to 0 which indicates failure > do to lack of memory, and wrongly decide that compaction won't be suitable even > after reclaim. > > Instead of trying to somehow adjust fragindex for reclaimable pages, let's just > skip it from compaction_zonelist_suitable(). > > Signed-off-by: Vlastimil Babka <vbabka@xxxxxxx> > Cc: Michal Hocko <mhocko@xxxxxxxxxx> > Cc: Mel Gorman <mgorman@xxxxxxxxxxxxxxxxxxx> > Cc: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> > Cc: David Rientjes <rientjes@xxxxxxxxxx> > Cc: Rik van Riel <riel@xxxxxxxxxx> Bah, a fix below, sorry. ----8<---- >From 1cd4855305a9c7eef0cf0c1af9f310cecdcc9406 Mon Sep 17 00:00:00 2001 From: Vlastimil Babka <vbabka@xxxxxxx> Date: Thu, 29 Sep 2016 11:54:07 +0200 Subject: [PATCH] mm, compaction: ignore fragindex from compaction_zonelist_suitable()-fix COMPACT_NOT_SUITABLE_ZONE should not leak outside compaction_suitable() and we should not skip tracepoint. Signed-off-by: Vlastimil Babka <vbabka@xxxxxxx> --- mm/compaction.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/compaction.c b/mm/compaction.c index badb92bf14b4..0409a4ad6ea1 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -1445,7 +1445,7 @@ enum compact_result compaction_suitable(struct zone *zone, int order, if (ret == COMPACT_CONTINUE && (order > PAGE_ALLOC_COSTLY_ORDER)) { fragindex = fragmentation_index(zone, order); if (fragindex >= 0 && fragindex <= sysctl_extfrag_threshold) - return COMPACT_NOT_SUITABLE_ZONE; + ret = COMPACT_NOT_SUITABLE_ZONE; } trace_mm_compaction_suitable(zone, order, ret); -- 2.10.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>