1. 30 Dec, 2023 1 commit
    • 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
  2. 29 Dec, 2023 39 commits