Hi Yosry, On Tue, Jan 28, 2025 at 12:58 AM Yosry Ahmed wrote: > The zbud compressed pages allocator is rarely used, most users use > zsmalloc. zbud consumes much more memory (only stores 1 or 2 compressed > pages per physical page). The only advantage of zbud is a marginal > performance improvement that by no means justify the memory overhead. > > Historically, zsmalloc had significantly worse latency than zbud and > z3fold but offered better memory savings. This is no longer the case as > shown by a simple recent analysis [1]. In a kernel build test on tmpfs > in a limited cgroup, zbud 2-3% less time than zsmalloc, but at the cost > of using ~32% more memory (1.5G vs 1.13G). The tradeoff does not make > sense for zbud in any practical scenario. > > The only alleged advantage of zbud is not having the dependency on > CONFIG_MMU, but CONFIG_SWAP already depends on CONFIG_MMU anyway, and > zbud is only used by zswap. > > Following in the footsteps of [2], which deprecated z3fold, deprecated > zbud as planned and remove it in a few cycles if no objections are > raised from active users. > > Rename the user-visible config options so that users with CONFIG_ZBUD=y > get a new prompt with explanation during make oldconfig. Also, remove > CONFIG_ZBUD from defconfig. > > [1] > https://lore.kernel.org/lkml/CAJD7tkbRF6od-2x_L8-A1QL3=2Ww13sCj4S3i4bNndqF+3+_Vg@mail.gmail.com/ > [2] > https://lore.kernel.org/lkml/20240904233343.933462-1-yosryahmed@google.com/ > > Signed-off-by: Yosry Ahmed > Let me disagree here. The footprint for zbud and the ability to work in MMU-less setups make it self sufficient and I don't support its deprecation. I can give a formal NAK if that's required. Thanks, Vitaly > --- > arch/loongarch/configs/loongson3_defconfig | 3 +-- > mm/Kconfig | 26 ++++++++++++++++------ > 2 files changed, 20 insertions(+), 9 deletions(-) > > diff --git a/arch/loongarch/configs/loongson3_defconfig > b/arch/loongarch/configs/loongson3_defconfig > index 73c77500ac467..7ce5beb3cbf34 100644 > --- a/arch/loongarch/configs/loongson3_defconfig > +++ b/arch/loongarch/configs/loongson3_defconfig > @@ -109,8 +109,7 @@ CONFIG_BINFMT_MISC=m > CONFIG_ZPOOL=y > CONFIG_ZSWAP=y > CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD=y > -CONFIG_ZBUD=y > -CONFIG_ZSMALLOC=m > +CONFIG_ZSMALLOC=y > # CONFIG_COMPAT_BRK is not set > CONFIG_MEMORY_HOTPLUG=y > # CONFIG_MHP_DEFAULT_ONLINE_TYPE_OFFLINE is not set > diff --git a/mm/Kconfig b/mm/Kconfig > index 1b501db064172..e3e15ab0cba49 100644 > --- a/mm/Kconfig > +++ b/mm/Kconfig > @@ -129,7 +129,6 @@ choice > prompt "Default allocator" > depends on ZSWAP > default ZSWAP_ZPOOL_DEFAULT_ZSMALLOC if MMU > - default ZSWAP_ZPOOL_DEFAULT_ZBUD > help > Selects the default allocator for the compressed cache for > swap pages. > @@ -140,12 +139,15 @@ choice > The selection made here can be overridden by using the kernel > command line 'zswap.zpool=' option. > > -config ZSWAP_ZPOOL_DEFAULT_ZBUD > - bool "zbud" > - select ZBUD > +config ZSWAP_ZPOOL_DEFAULT_ZBUD_DEPRECATED > + bool "zbud (DEPRECATED)" > + select ZBUD_DEPRECATED > help > Use the zbud allocator as the default allocator. > > + Deprecated and scheduled for removal in a few cycles, > + see CONFIG_ZBUD_DEPRECATED. > + > config ZSWAP_ZPOOL_DEFAULT_Z3FOLD_DEPRECATED > bool "z3foldi (DEPRECATED)" > select Z3FOLD_DEPRECATED > @@ -165,21 +167,31 @@ endchoice > config ZSWAP_ZPOOL_DEFAULT > string > depends on ZSWAP > - default "zbud" if ZSWAP_ZPOOL_DEFAULT_ZBUD > + default "zbud" if ZSWAP_ZPOOL_DEFAULT_ZBUD_DEPRECATED > default "z3fold" if ZSWAP_ZPOOL_DEFAULT_Z3FOLD_DEPRECATED > default "zsmalloc" if ZSWAP_ZPOOL_DEFAULT_ZSMALLOC > default "" > > -config ZBUD > - tristate "2:1 compression allocator (zbud)" > +config ZBUD_DEPRECATED > + tristate "2:1 compression allocator (zbud) (DEPRECATED)" > depends on ZSWAP > help > + Deprecated and scheduled for removal in a few cycles. If you have > + a good reason for using ZBUD over ZSMALLOC, please contact > + linux-mm@kvack.org and the zswap maintainers. > + > A special purpose allocator for storing compressed pages. > It is designed to store up to two compressed pages per physical > page. While this design limits storage density, it has simple > and > deterministic reclaim properties that make it preferable to a > higher > density approach when reclaim will be used. > > +config ZBUD > + tristate > + default y if ZBUD_DEPRECATED=y > + default m if ZBUD_DEPRECATED=m > + depends on ZBUD_DEPRECATED > + > config Z3FOLD_DEPRECATED > tristate "3:1 compression allocator (z3fold) (DEPRECATED)" > depends on ZSWAP > -- > 2.48.1.262.g85cc9f2d1e-goog > >