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@xxxxxxxxxxxxxx/ [2]https://lore.kernel.org/lkml/20240904233343.933462-1-yosryahmed@xxxxxxxxxx/ Signed-off-by: Yosry Ahmed <yosry.ahmed@xxxxxxxxx> --- 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@xxxxxxxxx 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