• Mel Gorman's avatar
    mm, page_alloc: drain per-cpu pages from workqueue context · 0ccce3b9
    Mel Gorman authored
    The per-cpu page allocator can be drained immediately via
    drain_all_pages() which sends IPIs to every CPU.  In the next patch, the
    per-cpu allocator will only be used for interrupt-safe allocations which
    prevents draining it from IPI context.  This patch uses workqueues to
    drain the per-cpu lists instead.
    
    This is slower but no slowdown during intensive reclaim was measured and
    the paths that use drain_all_pages() are not that sensitive to
    performance.  This is particularly true as the path would only be
    triggered when reclaim is failing.  It also makes a some sense to avoid
    storming a machine with IPIs when it's under memory pressure.  Arguably,
    it should be further adjusted so that only one caller at a time is
    draining pages but it's beyond the scope of the current patch.
    
    Link: http://lkml.kernel.org/r/20170123153906.3122-4-mgorman@techsingularity.netSigned-off-by: default avatarMel Gorman <mgorman@techsingularity.net>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Hillf Danton <hillf.zj@alibaba-inc.com>
    Cc: Jesper Dangaard Brouer <brouer@redhat.com>
    Cc: Tejun Heo <tj@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    0ccce3b9
page_alloc.c 208 KB