[v7,0/6] Implement writeback for zsmalloc

Message ID 20221128191616.1261026-1-nphamcs@gmail.com
Headers
Series Implement writeback for zsmalloc |

Message

Nhat Pham Nov. 28, 2022, 7:16 p.m. UTC
  Changelog:
v7:
  * Rebase this series of patch on top of mm-unstable
    which removes some duplicate code (patch 1).
v6-fix:
  * Add a comment explaining LRU update logic in zs_map_object.
    (patch 4)
    (sugegested by Sergey Senozhatsky and Johannes Weiner).
  * Use get_first_page() and add cond_resched() in retry-loop.
    (patch 6) (sugegested by Sergey Senozhatsky).
v6:
  * Move the move-to-front logic into zs_map_object (patch 4)
    (suggested by Minchan Kim).
  * Small clean up for free_zspage at free_handles() call site
    (patch 6) (suggested by Minchan Kim).
v5:
  * Add a new patch that eliminates unused code in zpool and simplify
    the logic for storing evict handler in zbud/z3fold (patch 2)
  * Remove redudant fields in zs_pool (previously required by zpool)
    (patch 3)
  * Wrap under_reclaim and deferred handle freeing logic in CONFIG_ZPOOL
    (patch 6) (suggested by Minchan Kim)
  * Move a small piece of refactoring from patch 6 to patch 4.
v4:
  * Wrap the new LRU logic in CONFIG_ZPOOL (patch 3).
    (suggested by Minchan Kim)
v3:
  * Set pool->ops = NULL when pool->zpool_ops is null (patch 4).
  * Stop holding pool's lock when calling lock_zspage() (patch 5).
    (suggested by Sergey Senozhatsky)
  * Stop holding pool's lock when checking pool->ops and retries.
    (patch 5) (suggested by Sergey Senozhatsky)
  * Fix formatting issues (.shrink, extra spaces in casting removed).
    (patch 5) (suggested by Sergey Senozhatsky)
v2:
  * Add missing CONFIG_ZPOOL ifdefs (patch 5)
    (detected by kernel test robot).

Unlike other zswap's allocators such as zbud or z3fold, zsmalloc
currently lacks the writeback mechanism. This means that when the zswap
pool is full, it will simply reject further allocations, and the pages
will be written directly to swap.

This series of patches implements writeback for zsmalloc. When the zswap
pool becomes full, zsmalloc will attempt to evict all the compressed
objects in the least-recently used zspages.

There are 6 patches in this series:

Johannes Weiner (2):
  zswap: fix writeback lock ordering for zsmalloc
  zpool: clean out dead code

Nhat Pham (4):
  zsmalloc: Consolidate zs_pool's migrate_lock and size_class's locks
  zsmalloc: Add a LRU to zs_pool to keep track of zspages in LRU order
  zsmalloc: Add zpool_ops field to zs_pool to store evict handlers
  zsmalloc: Implement writeback mechanism for zsmalloc

 mm/z3fold.c   |  36 +-----
 mm/zbud.c     |  32 +----
 mm/zpool.c    |  10 +-
 mm/zsmalloc.c | 342 +++++++++++++++++++++++++++++++++++++++++---------
 mm/zswap.c    |  35 +++---
 5 files changed, 311 insertions(+), 144 deletions(-)

--
2.30.2
  

Comments

Thomas Weißschuh Jan. 3, 2023, 4:57 a.m. UTC | #1
Hi,

On Mon, Nov 28, 2022 at 11:16:09AM -0800, Nhat Pham wrote:
> Unlike other zswap's allocators such as zbud or z3fold, zsmalloc
> currently lacks the writeback mechanism. This means that when the zswap
> pool is full, it will simply reject further allocations, and the pages
> will be written directly to swap.
> 
> This series of patches implements writeback for zsmalloc. When the zswap
> pool becomes full, zsmalloc will attempt to evict all the compressed
> objects in the least-recently used zspages.

Then this part of Documentation/admin-guide/mm/zswap.rst should probably
also be updated at some point:

    However, zsmalloc does not implement compressed page eviction, so
    once zswap fills it cannot evict the oldest page, it can only reject
    new pages.

Thomas
  
Nhat Pham Jan. 6, 2023, 8:32 p.m. UTC | #2
On Mon, Jan 2, 2023 at 8:57 PM Thomas Weißschuh <thomas@t-8ch.de> wrote:
>
> Hi,
>
> On Mon, Nov 28, 2022 at 11:16:09AM -0800, Nhat Pham wrote:
> > Unlike other zswap's allocators such as zbud or z3fold, zsmalloc
> > currently lacks the writeback mechanism. This means that when the zswap
> > pool is full, it will simply reject further allocations, and the pages
> > will be written directly to swap.
> >
> > This series of patches implements writeback for zsmalloc. When the zswap
> > pool becomes full, zsmalloc will attempt to evict all the compressed
> > objects in the least-recently used zspages.
>
> Then this part of Documentation/admin-guide/mm/zswap.rst should probably
> also be updated at some point:
>
>     However, zsmalloc does not implement compressed page eviction, so
>     once zswap fills it cannot evict the oldest page, it can only reject
>     new pages.
>
> Thomas

Thanks for pointing this out, Thomas! I'll send a patch to update this.