• Wei Xu's avatar
    mm/mglru: only clear kswapd_failures if reclaimable · b130ba4a
    Wei Xu authored
    lru_gen_shrink_node() unconditionally clears kswapd_failures, which can
    prevent kswapd from sleeping and cause 100% kswapd cpu usage even when
    kswapd repeatedly fails to make progress in reclaim.
    
    Only clear kswap_failures in lru_gen_shrink_node() if reclaim makes some
    progress, similar to shrink_node().
    
    I happened to run into this problem in one of my tests recently.  It
    requires a combination of several conditions: The allocator needs to
    allocate a right amount of pages such that it can wake up kswapd
    without itself being OOM killed; there is no memory for kswapd to
    reclaim (My test disables swap and cleans page cache first); no other
    process frees enough memory at the same time.
    
    Link: https://lkml.kernel.org/r/20241014221211.832591-1-weixugc@google.com
    Fixes: e4dde56c ("mm: multi-gen LRU: per-node lru_gen_folio lists")
    Signed-off-by: default avatarWei Xu <weixugc@google.com>
    Cc: Axel Rasmussen <axelrasmussen@google.com>
    Cc: Brian Geffon <bgeffon@google.com>
    Cc: Jan Alexander Steffens <heftig@archlinux.org>
    Cc: Suleiman Souhlal <suleiman@google.com>
    Cc: Yu Zhao <yuzhao@google.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    b130ba4a
vmscan.c 210 KB