• Yosry Ahmed's avatar
    mm: zswap: remove nr_zswap_stored atomic · cc9bc36e
    Yosry Ahmed authored
    nr_stored was introduced by commit b5ba474f ("zswap: shrink zswap pool
    based on memory pressure") as a per zswap_pool counter of the number of
    stored pages that are not same-filled pages.  It is used in
    zswap_shrinker_count() to scale the number of freeable compressed pages by
    the compression ratio.  That is, to reduce the amount of writeback from
    zswap with higher compression ratios as the ROI from IO diminishes.
    
    Later on, commit bf9b7df2 ("mm/zswap: global lru and shrinker shared
    by all zswap_pools") made the shrinker global (not per zswap_pool), and
    replaced nr_stored with nr_zswap_stored (initially introduced as
    zswap.nr_stored), which is now a global counter.
    
    The counter is now awfully close to zswap_stored_pages.  The only
    difference is that the latter also includes same-filled pages.  Also, when
    memcgs are enabled, we use memcg_page_state(memcg, MEMCG_ZSWAPPED), which
    includes same-filled pages anyway (i.e.  equivalent to
    zswap_stored_pages).
    
    Use zswap_stored_pages instead in zswap_shrinker_count() to keep things
    consistent whether memcgs are enabled or not, and add a comment about the
    number of freeable pages possibly being scaled down more than it should if
    we have lots of same-filled pages (i.e.  inflated compression ratio).
    
    Remove nr_zswap_stored and one atomic operation in the store and free
    paths.
    
    Link: https://lkml.kernel.org/r/20240322001001.1562517-1-yosryahmed@google.comSigned-off-by: default avatarYosry Ahmed <yosryahmed@google.com>
    Reviewed-by: default avatarNhat Pham <nphamcs@gmail.com>
    Acked-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Reviewed-by: default avatarChengming Zhou <chengming.zhou@linux.dev>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    cc9bc36e
zswap.c 50.9 KB