• Vlastimil Babka's avatar
    mm, compaction: reduce spurious pcplist drains · a34753d2
    Vlastimil Babka authored
    Compaction drains the local pcplists each time migration scanner moves
    away from a cc->order aligned block where it isolated pages for
    migration, so that the pages freed by migrations can merge into higher
    orders.
    
    The detection is currently coarser than it could be.  The
    cc->last_migrated_pfn variable should track the lowest pfn that was
    isolated for migration.  But it is set to the pfn where
    isolate_migratepages_block() starts scanning, which is typically the
    first pfn of the pageblock.  There, the scanner might fail to isolate
    several order-aligned blocks, and then isolate COMPACT_CLUSTER_MAX in
    another block.  This would cause the pcplists drain to be performed,
    although the scanner didn't yet finish the block where it isolated from.
    
    This patch thus makes cc->last_migrated_pfn handling more accurate by
    setting it to the pfn of an actually isolated page in
    isolate_migratepages_block().  Although practical effects of this patch
    are likely low, it arguably makes the intent of the code more obvious.
    Also the next patch will make async direct compaction skip blocks more
    aggressively, and draining pcplists due to skipped blocks is wasteful.
    Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a34753d2
compaction.c 52.7 KB