[lkml]   [2011]   [May]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[PATCH 2/4] mm: slub: Do not wake kswapd for SLUBs speculative high-order allocations
    To avoid locking and per-cpu overhead, SLUB optimisically uses
    high-order allocations and falls back to lower allocations if they
    fail. However, by simply trying to allocate, kswapd is woken up to
    start reclaiming at that order. On a desktop system, two users report
    that the system is getting locked up with kswapd using large amounts
    of CPU. Using SLAB instead of SLUB made this problem go away.

    This patch prevents kswapd being woken up for high-order allocations.
    Testing indicated that with this patch applied, the system was much
    harder to hang and even when it did, it eventually recovered.

    Signed-off-by: Mel Gorman <>
    mm/slub.c | 2 +-
    1 files changed, 1 insertions(+), 1 deletions(-)

    diff --git a/mm/slub.c b/mm/slub.c
    index 9d2e5e4..98c358d 100644
    --- a/mm/slub.c
    +++ b/mm/slub.c
    @@ -1170,7 +1170,7 @@ static struct page *allocate_slab(struct kmem_cache *s, gfp_t flags, int node)
    * Let the initial higher-order allocation fail under memory pressure
    * so we fall-back to the minimum order allocation.
    - alloc_gfp = (flags | __GFP_NOWARN | __GFP_NORETRY) & ~__GFP_NOFAIL;
    + alloc_gfp = (flags | __GFP_NOWARN | __GFP_NORETRY | __GFP_NO_KSWAPD) & ~__GFP_NOFAIL;

    page = alloc_slab_page(alloc_gfp, node, oo);
    if (unlikely(!page)) {

     \ /
      Last update: 2011-05-13 16:05    [W:0.020 / U:56.604 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site