Both zswap and zram could change compressor algorithm dynamically, it can be overridden at boot time by 'zswap.compressor=' for zswap, also there is a sysfs interface to change it, see /sys/block/zramX/comp_algorithm /sys/module/zswap/parameters/compressor So there is no need to maintain independence default compressor algorithm, unify the Kconfig to use lzo-rle as the default page compressor algorithm. Signed-off-by: Kefeng Wang <wangkefeng.wang@xxxxxxxxxx> --- Documentation/admin-guide/mm/zswap.rst | 2 +- arch/loongarch/configs/loongson3_defconfig | 2 +- drivers/block/zram/Kconfig | 47 +------- drivers/block/zram/zram_drv.c | 2 +- mm/Kconfig | 131 +++++++++++---------- mm/zswap.c | 8 +- 6 files changed, 74 insertions(+), 118 deletions(-) diff --git a/Documentation/admin-guide/mm/zswap.rst b/Documentation/admin-guide/mm/zswap.rst index b42132969e31..375366b9a642 100644 --- a/Documentation/admin-guide/mm/zswap.rst +++ b/Documentation/admin-guide/mm/zswap.rst @@ -90,7 +90,7 @@ controlled policy: * max_pool_percent - The maximum percentage of memory that the compressed pool can occupy. -The default compressor is selected in ``CONFIG_ZSWAP_COMPRESSOR_DEFAULT`` +The default compressor is selected in ``CONFIG_COMPRESSOR_DEFAULT`` Kconfig option, but it can be overridden at boot time by setting the ``compressor`` attribute, e.g. ``zswap.compressor=lzo``. It can also be changed at runtime using the sysfs "compressor" diff --git a/arch/loongarch/configs/loongson3_defconfig b/arch/loongarch/configs/loongson3_defconfig index f18c2ba871ef..dc718089a530 100644 --- a/arch/loongarch/configs/loongson3_defconfig +++ b/arch/loongarch/configs/loongson3_defconfig @@ -91,7 +91,7 @@ CONFIG_BFQ_GROUP_IOSCHED=y CONFIG_BINFMT_MISC=m CONFIG_ZPOOL=y CONFIG_ZSWAP=y -CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD=y +CONFIG_COMPRESSOR_DEFAULT_ZSTD=y CONFIG_ZBUD=y CONFIG_Z3FOLD=y CONFIG_ZSMALLOC=m diff --git a/drivers/block/zram/Kconfig b/drivers/block/zram/Kconfig index b007dda16430..26558159824e 100644 --- a/drivers/block/zram/Kconfig +++ b/drivers/block/zram/Kconfig @@ -2,7 +2,7 @@ config ZRAM tristate "Compressed RAM block device support" depends on SWAP && SYSFS - depends on CRYPTO_LZO || CRYPTO_ZSTD || CRYPTO_LZ4 || CRYPTO_LZ4HC || CRYPTO_842 || CRYPTO_DEFLATE + select CRYPTO select ZSMALLOC help Creates virtual block devices called /dev/zramX (X = 0, 1, ...). @@ -15,51 +15,6 @@ config ZRAM See Documentation/admin-guide/blockdev/zram.rst for more information. -choice - prompt "Default zram compressor" - default ZRAM_DEF_COMP_LZORLE - depends on ZRAM - -config ZRAM_DEF_COMP_DEFLATE - bool "Deflate" - depends on CRYPTO_DEFLATE - -config ZRAM_DEF_COMP_LZORLE - bool "lzo-rle" - depends on CRYPTO_LZO - -config ZRAM_DEF_COMP_ZSTD - bool "zstd" - depends on CRYPTO_ZSTD - -config ZRAM_DEF_COMP_LZ4 - bool "lz4" - depends on CRYPTO_LZ4 - -config ZRAM_DEF_COMP_LZO - bool "lzo" - depends on CRYPTO_LZO - -config ZRAM_DEF_COMP_LZ4HC - bool "lz4hc" - depends on CRYPTO_LZ4HC - -config ZRAM_DEF_COMP_842 - bool "842" - depends on CRYPTO_842 - -endchoice - -config ZRAM_DEF_COMP - string - default "deflate" if ZRAM_DEF_COMP_DEFLATE - default "lzo-rle" if ZRAM_DEF_COMP_LZORLE - default "zstd" if ZRAM_DEF_COMP_ZSTD - default "lz4" if ZRAM_DEF_COMP_LZ4 - default "lzo" if ZRAM_DEF_COMP_LZO - default "lz4hc" if ZRAM_DEF_COMP_LZ4HC - default "842" if ZRAM_DEF_COMP_842 - config ZRAM_WRITEBACK bool "Write back incompressible or idle page to backing device" depends on ZRAM diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index f0639df6cd18..664c4012ced4 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -41,7 +41,7 @@ static DEFINE_IDR(zram_index_idr); static DEFINE_MUTEX(zram_index_mutex); static int zram_major; -static const char *default_compressor = CONFIG_ZRAM_DEF_COMP; +static const char *default_compressor = CONFIG_COMPRESSOR_DEFAULT; /* Module params (documentation at end) */ static unsigned int num_devices = 1; diff --git a/mm/Kconfig b/mm/Kconfig index f41a28b74efd..9da2671e0b20 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -9,9 +9,6 @@ menu "Memory Management options" config ARCH_NO_SWAP bool -config ZPOOL - bool - menuconfig SWAP bool "Support for paging of anonymous memory (swap)" depends on MMU && BLOCK && !ARCH_NO_SWAP @@ -22,116 +19,118 @@ menuconfig SWAP used to provide more virtual memory than the actual RAM present in your computer. If unsure say Y. -config ZSWAP - bool "Compressed cache for swap pages" - depends on SWAP - select CRYPTO - select ZPOOL - help - A lightweight compressed cache for swap pages. It takes - pages that are in the process of being swapped out and attempts to - compress them into a dynamically allocated RAM-based memory pool. - This can result in a significant I/O reduction on swap device and, - in the case where decompressing from RAM is faster than swap device - reads, can also improve workload performance. - -config ZSWAP_DEFAULT_ON - bool "Enable the compressed cache for swap pages by default" - depends on ZSWAP - help - If selected, the compressed cache for swap pages will be enabled - at boot, otherwise it will be disabled. - - The selection made here can be overridden by using the kernel - command line 'zswap.enabled=' option. - -config ZSWAP_SHRINKER_DEFAULT_ON - bool "Shrink the zswap pool on memory pressure" - depends on ZSWAP - default n - help - If selected, the zswap shrinker will be enabled, and the pages - stored in the zswap pool will become available for reclaim (i.e - written back to the backing swap device) on memory pressure. - - This means that zswap writeback could happen even if the pool is - not yet full, or the cgroup zswap limit has not been reached, - reducing the chance that cold pages will reside in the zswap pool - and consume memory indefinitely. +if SWAP choice - prompt "Default compressor" - depends on ZSWAP - default ZSWAP_COMPRESSOR_DEFAULT_LZORLE + prompt "Default page compressor algorithm" + depends on ZSWAP || ZRAM + default COMPRESSOR_DEFAULT_LZORLE help - Selects the default compression algorithm for the compressed cache - for swap pages. + Selects the default compression algorithm for compressing pages. For an overview what kind of performance can be expected from a particular compression algorithm please refer to the benchmarks available at the following LWN page: https://lwn.net/Articles/751795/ - If in doubt, select 'LZO-RLE'. + If in doubt, select 'LZO-rle'. - The selection made here can be overridden by using the kernel - command line 'zswap.compressor=' option. - -config ZSWAP_COMPRESSOR_DEFAULT_DEFLATE +config COMPRESSOR_DEFAULT_DEFLATE bool "Deflate" select CRYPTO_DEFLATE help Use the Deflate algorithm as the default compression algorithm. -config ZSWAP_COMPRESSOR_DEFAULT_LZORLE +config COMPRESSOR_DEFAULT_LZORLE bool "LZO-RLE" select CRYPTO_LZO help Use the LZO algorithm as the default compression algorithm. -config ZSWAP_COMPRESSOR_DEFAULT_LZO +config COMPRESSOR_DEFAULT_LZO bool "LZO" select CRYPTO_LZO help Use the LZO algorithm as the default compression algorithm. -config ZSWAP_COMPRESSOR_DEFAULT_842 +config COMPRESSOR_DEFAULT_842 bool "842" select CRYPTO_842 help Use the 842 algorithm as the default compression algorithm. -config ZSWAP_COMPRESSOR_DEFAULT_LZ4 +config COMPRESSOR_DEFAULT_LZ4 bool "LZ4" select CRYPTO_LZ4 help Use the LZ4 algorithm as the default compression algorithm. -config ZSWAP_COMPRESSOR_DEFAULT_LZ4HC +config COMPRESSOR_DEFAULT_LZ4HC bool "LZ4HC" select CRYPTO_LZ4HC help Use the LZ4HC algorithm as the default compression algorithm. -config ZSWAP_COMPRESSOR_DEFAULT_ZSTD - bool "zstd" +config COMPRESSOR_DEFAULT_ZSTD + bool "ZSTD" select CRYPTO_ZSTD help Use the zstd algorithm as the default compression algorithm. + endchoice -config ZSWAP_COMPRESSOR_DEFAULT +config COMPRESSOR_DEFAULT string - depends on ZSWAP - default "deflate" if ZSWAP_COMPRESSOR_DEFAULT_DEFLATE - default "lzo-rle" if ZSWAP_COMPRESSOR_DEFAULT_LZORLE - default "lzo" if ZSWAP_COMPRESSOR_DEFAULT_LZO - default "842" if ZSWAP_COMPRESSOR_DEFAULT_842 - default "lz4" if ZSWAP_COMPRESSOR_DEFAULT_LZ4 - default "lz4hc" if ZSWAP_COMPRESSOR_DEFAULT_LZ4HC - default "zstd" if ZSWAP_COMPRESSOR_DEFAULT_ZSTD + depends on ZSWAP || ZRAM + default "deflate" if COMPRESSOR_DEFAULT_DEFLATE + default "lzo-rle" if COMPRESSOR_DEFAULT_LZORLE + default "lzo" if COMPRESSOR_DEFAULT_LZO + default "842" if COMPRESSOR_DEFAULT_842 + default "lz4" if COMPRESSOR_DEFAULT_LZ4 + default "lz4hc" if COMPRESSOR_DEFAULT_LZ4HC + default "zstd" if COMPRESSOR_DEFAULT_ZSTD default "" +config ZPOOL + bool + +config ZSWAP + bool "Compressed cache for swap pages" + depends on SWAP + select CRYPTO + select ZPOOL + help + A lightweight compressed cache for swap pages. It takes + pages that are in the process of being swapped out and attempts to + compress them into a dynamically allocated RAM-based memory pool. + This can result in a significant I/O reduction on swap device and, + in the case where decompressing from RAM is faster than swap device + reads, can also improve workload performance. + +config ZSWAP_DEFAULT_ON + bool "Enable the compressed cache for swap pages by default" + depends on ZSWAP + help + If selected, the compressed cache for swap pages will be enabled + at boot, otherwise it will be disabled. + + The selection made here can be overridden by using the kernel + command line 'zswap.enabled=' option. + +config ZSWAP_SHRINKER_DEFAULT_ON + bool "Shrink the zswap pool on memory pressure" + depends on ZSWAP + default n + help + If selected, the zswap shrinker will be enabled, and the pages + stored in the zswap pool will become available for reclaim (i.e + written back to the backing swap device) on memory pressure. + + This means that zswap writeback could happen even if the pool is + not yet full, or the cgroup zswap limit has not been reached, + reducing the chance that cold pages will reside in the zswap pool + and consume memory indefinitely. + choice prompt "Default allocator" depends on ZSWAP @@ -231,6 +230,8 @@ config ZSMALLOC_CHAIN_SIZE For more information, see zsmalloc documentation. +endif #SWAP + menu "Slab allocator options" config SLUB diff --git a/mm/zswap.c b/mm/zswap.c index 011e068eb355..907ae7797d98 100644 --- a/mm/zswap.c +++ b/mm/zswap.c @@ -96,7 +96,7 @@ static const struct kernel_param_ops zswap_enabled_param_ops = { module_param_cb(enabled, &zswap_enabled_param_ops, &zswap_enabled, 0644); /* Crypto compressor to use */ -static char *zswap_compressor = CONFIG_ZSWAP_COMPRESSOR_DEFAULT; +static char *zswap_compressor = CONFIG_COMPRESSOR_DEFAULT; static int zswap_compressor_param_set(const char *, const struct kernel_param *); static const struct kernel_param_ops zswap_compressor_param_ops = { @@ -386,11 +386,11 @@ static struct zswap_pool *__zswap_pool_create_fallback(void) has_comp = crypto_has_acomp(zswap_compressor, 0, 0); if (!has_comp && strcmp(zswap_compressor, - CONFIG_ZSWAP_COMPRESSOR_DEFAULT)) { + CONFIG_COMPRESSOR_DEFAULT)) { pr_err("compressor %s not available, using default %s\n", - zswap_compressor, CONFIG_ZSWAP_COMPRESSOR_DEFAULT); + zswap_compressor, CONFIG_COMPRESSOR_DEFAULT); param_free_charp(&zswap_compressor); - zswap_compressor = CONFIG_ZSWAP_COMPRESSOR_DEFAULT; + zswap_compressor = CONFIG_COMPRESSOR_DEFAULT; has_comp = crypto_has_acomp(zswap_compressor, 0, 0); } if (!has_comp) { -- 2.27.0