Skip to content
  • Michal Hocko's avatar
    memcg: put soft limit reclaim out of way if the excess tree is empty · d6507ff5
    Michal Hocko authored
    We've had a report about soft lockups caused by lock bouncing in the
    soft reclaim path:
    
      BUG: soft lockup - CPU#0 stuck for 22s! [kav4proxy-kavic:3128]
      RIP: 0010:[<ffffffff81469798>]  [<ffffffff81469798>] _raw_spin_lock+0x18/0x20
      Call Trace:
        mem_cgroup_soft_limit_reclaim+0x25a/0x280
        shrink_zones+0xed/0x200
        do_try_to_free_pages+0x74/0x320
        try_to_free_pages+0x112/0x180
        __alloc_pages_slowpath+0x3ff/0x820
        __alloc_pages_nodemask+0x1e9/0x200
        alloc_pages_vma+0xe1/0x290
        do_wp_page+0x19f/0x840
        handle_pte_fault+0x1cd/0x230
        do_page_fault+0x1fd/0x4c0
        page_fault+0x25/0x30
    
    There are no memcgs created so there cannot be any in the soft limit
    excess obviously:
    
      [...]
      memory  0       1       1
    
    so all this just seems to be mem_cgroup_largest_soft_limit_node trying
    to get spin_lock_irq(&mctz->lock) just to find out that the soft limit
    excess tree is empty.  This is just pointless wasting of cycles and
    cache line bouncing during heavy parallel reclaim on large machines.
    The particular machine wasn't very healthy and most probably suffering
    from a memory leak which just caused the memory reclaim to trash
    heavily.  But bouncing on the lock certainly didn't help...
    
    Fix this by optimistic lockless check and bail out early if the tree is
    empty.  This is theoretically racy but that shouldn't matter all that
    much.  First of all soft limit is a best effort feature and it is slowly
    getting deprecated and its usage should be really scarce.  Bouncing on a
    lock without a good reason is surely much bigger problem, especially on
    large CPU machines.
    
    Link: http://lkml.kernel.org/r/1470073277-1056-1-git-send-email-mhocko@kernel.org
    
    
    Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
    Acked-by: default avatarVladimir Davydov <vdavydov@virtuozzo.com>
    Acked-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    d6507ff5