• Vlastimil Babka's avatar
    mm: more aggressive page stealing for UNMOVABLE allocations · 9c0415eb
    Vlastimil Babka authored
    When allocation falls back to stealing free pages of another migratetype,
    it can decide to steal extra pages, or even the whole pageblock in order
    to reduce fragmentation, which could happen if further allocation
    fallbacks pick a different pageblock.  In try_to_steal_freepages(), one of
    the situations where extra pages are stolen happens when we are trying to
    allocate a MIGRATE_RECLAIMABLE page.
    
    However, MIGRATE_UNMOVABLE allocations are not treated the same way,
    although spreading such allocation over multiple fallback pageblocks is
    arguably even worse than it is for RECLAIMABLE allocations.  To minimize
    fragmentation, we should minimize the number of such fallbacks, and thus
    steal as much as is possible from each fallback pageblock.
    
    Note that in theory this might put more pressure on movable pageblocks and
    cause movable allocations to steal back from unmovable pageblocks.
    However, movable allocations are not as aggressive with stealing, and do
    not cause permanent fragmentation, so the tradeoff is reasonable, and
    evaluation seems to support the change.
    
    This patch thus adds a check for MIGRATE_UNMOVABLE to the decision to
    steal extra free pages.  When evaluating with stress-highalloc from
    mmtests, this has reduced the number of MIGRATE_UNMOVABLE fallbacks to
    roughly 1/6.  The number of these fallbacks stealing from MIGRATE_MOVABLE
    block is reduced to 1/3.  There was no observation of growing number of
    unmovable pageblocks over time, and also not of increased movable
    allocation fallbacks.
    Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Acked-by: default avatarMel Gorman <mgorman@suse.de>
    Cc: Zhang Yanfei <zhangyanfei@cn.fujitsu.com>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
    Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Michal Hocko <mhocko@suse.cz>
    Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    9c0415eb
page_alloc.c 182 KB