• Nhat Pham's avatar
    zswap: memcontrol: implement zswap writeback disabling · 501a06fe
    Nhat Pham authored
    During our experiment with zswap, we sometimes observe swap IOs due to
    occasional zswap store failures and writebacks-to-swap.  These swapping
    IOs prevent many users who cannot tolerate swapping from adopting zswap to
    save memory and improve performance where possible.
    
    This patch adds the option to disable this behavior entirely: do not
    writeback to backing swapping device when a zswap store attempt fail, and
    do not write pages in the zswap pool back to the backing swap device (both
    when the pool is full, and when the new zswap shrinker is called).
    
    This new behavior can be opted-in/out on a per-cgroup basis via a new
    cgroup file.  By default, writebacks to swap device is enabled, which is
    the previous behavior.  Initially, writeback is enabled for the root
    cgroup, and a newly created cgroup will inherit the current setting of its
    parent.
    
    Note that this is subtly different from setting memory.swap.max to 0, as
    it still allows for pages to be stored in the zswap pool (which itself
    consumes swap space in its current form).
    
    This patch should be applied on top of the zswap shrinker series:
    
    https://lore.kernel.org/linux-mm/20231130194023.4102148-1-nphamcs@gmail.com/
    
    as it also disables the zswap shrinker, a major source of zswap
    writebacks.
    
    For the most part, this feature is motivated by internal parties who
    have already established their opinions regarding swapping - the
    workloads that are highly sensitive to IO, and especially those who are
    using servers with really slow disk performance (for instance, massive
    but slow HDDs).  For these folks, it's impossible to convince them to
    even entertain zswap if swapping also comes as a packaged deal. 
    Writeback disabling is quite a useful feature in these situations - on
    a mixed workloads deployment, they can disable writeback for the more
    IO-sensitive workloads, and enable writeback for other background
    workloads.
    
    For instance, on a server with HDD, I allocate memories and populate
    them with random values (so that zswap store will always fail), and
    specify memory.high low enough to trigger reclaim.  The time it takes
    to allocate the memories and just read through it a couple of times
    (doing silly things like computing the values' average etc.):
    
    zswap.writeback disabled:
    real 0m30.537s
    user 0m23.687s
    sys 0m6.637s
    0 pages swapped in
    0 pages swapped out
    
    zswap.writeback enabled:
    real 0m45.061s
    user 0m24.310s
    sys 0m8.892s
    712686 pages swapped in
    461093 pages swapped out
    
    (the last two lines are from vmstat -s).
    
    [nphamcs@gmail.com: add a comment about recurring zswap store failures leading to reclaim inefficiency]
      Link: https://lkml.kernel.org/r/20231221005725.3446672-1-nphamcs@gmail.com
    Link: https://lkml.kernel.org/r/20231207192406.3809579-1-nphamcs@gmail.comSigned-off-by: default avatarNhat Pham <nphamcs@gmail.com>
    Suggested-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Reviewed-by: default avatarYosry Ahmed <yosryahmed@google.com>
    Acked-by: default avatarChris Li <chrisl@kernel.org>
    Cc: Dan Streetman <ddstreet@ieee.org>
    Cc: David Heidelberg <david@ixit.cz>
    Cc: Domenico Cerasuolo <cerasuolodomenico@gmail.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Mike Rapoport (IBM) <rppt@kernel.org>
    Cc: Muchun Song <muchun.song@linux.dev>
    Cc: Roman Gushchin <roman.gushchin@linux.dev>
    Cc: Sergey Senozhatsky <senozhatsky@chromium.org>
    Cc: Seth Jennings <sjenning@redhat.com>
    Cc: Shakeel Butt <shakeelb@google.com>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Vitaly Wool <vitaly.wool@konsulko.com>
    Cc: Zefan Li <lizefan.x@bytedance.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    501a06fe
zswap.c 51.5 KB