• Johannes Weiner's avatar
    mm: vmscan: make rotations a secondary factor in balancing anon vs file · 0538a82c
    Johannes Weiner authored
    We noticed a 2% webserver throughput regression after upgrading from 5.6. 
    This could be tracked down to a shift in the anon/file reclaim balance
    (confirmed with swappiness) that resulted in worse reclaim efficiency and
    thus more kswapd activity for the same outcome.
    
    The change that exposed the problem is aae466b0 ("mm/swap: implement
    workingset detection for anonymous LRU").  By qualifying swapins based on
    their refault distance, it lowered the cost of anon reclaim in this
    workload, in turn causing (much) more anon scanning than before.  Scanning
    the anon list is more expensive due to the higher ratio of mmapped pages
    that may rotate during reclaim, and so the result was an increase in %sys
    time.
    
    Right now, rotations aren't considered a cost when balancing scan pressure
    between LRUs.  We can end up with very few file refaults putting all the
    scan pressure on hot anon pages that are rotated en masse, don't get
    reclaimed, and never push back on the file LRU again.  We still only
    reclaim file cache in that case, but we burn a lot CPU rotating anon
    pages.  It's "fair" from an LRU age POV, but doesn't reflect the real cost
    it imposes on the system.
    
    Consider rotations as a secondary factor in balancing the LRUs.  This
    doesn't attempt to make a precise comparison between IO cost and CPU cost,
    it just says: if reloads are about comparable between the lists, or
    rotations are overwhelmingly different, adjust for CPU work.
    
    This fixed the regression on our webservers.  It has since been deployed
    to the entire Meta fleet and hasn't caused any problems.
    
    Link: https://lkml.kernel.org/r/20221013193113.726425-1-hannes@cmpxchg.orgSigned-off-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Cc: Rik van Riel <riel@surriel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    0538a82c
swap.c 31.7 KB