• Hugh Dickins's avatar
    mm: fix migratetype bug which slowed swapping · a7016235
    Hugh Dickins authored
    After memory pressure has forced it to dip into the reserves, 2.6.32's
    5f8dcc21 "page-allocator: split per-cpu
    list into one-list-per-migrate-type" has been returning MIGRATE_RESERVE
    pages to the MIGRATE_MOVABLE free_list: in some sense depleting reserves.
    
    Fix that in the most straightforward way (which, considering the overheads
    of alternative approaches, is Mel's preference): the right migratetype is
    already in page_private(page), but free_pcppages_bulk() wasn't using it.
    
    How did this bug show up?  As a 20% slowdown in my tmpfs loop kbuild
    swapping tests, on PowerMac G5 with SLUB allocator.  Bisecting to that
    commit was easy, but explaining the magnitude of the slowdown not easy.
    
    The same effect appears, but much less markedly, with SLAB, and even
    less markedly on other machines (the PowerMac divides into fewer zones
    than x86, I think that may be a factor).  We guess that lumpy reclaim
    of short-lived high-order pages is implicated in some way, and probably
    this bug has been tickling a poor decision somewhere in page reclaim.
    
    But instrumentation hasn't told me much, I've run out of time and
    imagination to determine exactly what's going on, and shouldn't hold up
    the fix any longer: it's valid, and might even fix other misbehaviours.
    Signed-off-by: default avatarHugh Dickins <hugh.dickins@tiscali.co.uk>
    Acked-by: default avatarMel Gorman <mel@csn.ul.ie>
    Cc: stable@kernel.org
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a7016235
page_alloc.c 141 KB