• Johannes Weiner's avatar
    mm: page_io: fix psi memory pressure error on cold swapins · d8c47cc7
    Johannes Weiner authored
    Once upon a time, all swapins counted toward memory pressure[1].  Then
    Joonsoo introduced workingset detection for anonymous pages and we gained
    the ability to distinguish hot from cold swapins[2][3].  But we failed to
    update swap_readpage() accordingly, and now we account partial memory
    pressure in the swapin path of cold memory.
    
    Not for all situations - which adds more inconsistency: paths using the
    conventional submit_bio() and lock_page() route will not see much pressure
    - unless storage itself is heavily congested and the bio submissions
    stall.  ZRAM and ZSWAP do most of the work directly from swap_readpage()
    and will see all swapins reflected as pressure.
    
    IOW, a workload doing cold swapins could see little to no pressure
    reported with on-disk swap, but potentially high pressure with a zram or
    zswap backend.  That confuses any psi-based health monitoring, load
    shedding, proactive reclaim, or userspace OOM killing schemes that might
    be in place for the workload.
    
    Restore consistency by making all swapin stall accounting conditional on
    the page actually being part of the workingset.
    
    [1] commit 93779069 ("mm/page_io.c: annotate refault stalls from swap_readpage")
    [2] commit aae466b0 ("mm/swap: implement workingset detection for anonymous LRU")
    [3] commit cad8320b ("mm/swap: don't SetPageWorkingset unconditionally during swapin")
    
    Link: https://lkml.kernel.org/r/20220214214921.419687-1-hannes@cmpxchg.orgSigned-off-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Reported-by: default avatarCGEL <cgel.zte@gmail.com>
    Acked-by: default avatarMinchan Kim <minchan@kernel.org>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Yu Zhao <yuzhao@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    d8c47cc7
page_io.c 11.3 KB