[lkml]   [2010]   [Nov]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    SubjectRe: Free memory never fully used, swapping
    > There are actually a few problems here.  I think they are worth looking
    > at them separately, unless "don't use order 3 allocations" is a valid
    > statement, in which case we should fix slub.
    > The funny thing here is that slub.c's allocate_slab() calls alloc_pages()
    > with flags | __GFP_NOWARN | __GFP_NORETRY, and intentionally tries a
    > lower order allocation automatically if it fails. This is why there is
    > no allocation failure warning when this happens. However, it is too late
    > -- kswapd is woken and it ties to bring order 3 up to the watermark.
    > If we hacked __alloc_pages_slowpath() to not wake kswapd when
    > __GFP_NOWARN is set, we would never see this problem and the slub
    > optimization might still mostly work. Either way, we should "fix" slub
    > or "fix" order-3 allocations, so that other people who are using slub
    > don't hit the same problem.


    Subject: [PATCH] slub: use no __GFP_WAIT instead __GFP_NORETRY

    mm/slub.c | 2 +-
    1 files changed, 1 insertions(+), 1 deletions(-)

    diff --git a/mm/slub.c b/mm/slub.c
    index 8c66aef..0c77399 100644
    --- a/mm/slub.c
    +++ b/mm/slub.c
    @@ -1134,7 +1134,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_NOFAIL | __GFP_WAIT);

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

     \ /
      Last update: 2010-11-25 11:21    [W:0.026 / U:33.312 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site