linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/5] mm: unify default compressor algorithm for zram/zswap
@ 2024-02-23  3:55 Kefeng Wang
  2024-02-23  3:55 ` [PATCH 1/5] zram: zcomp: remove zcomp_set_max_streams() declaration Kefeng Wang
                   ` (6 more replies)
  0 siblings, 7 replies; 11+ messages in thread
From: Kefeng Wang @ 2024-02-23  3:55 UTC (permalink / raw)
  To: Johannes Weiner, Yosry Ahmed, Nhat Pham, Andrew Morton
  Cc: Chengming Zhou, Huacai Chen, Minchan Kim, Sergey Senozhatsky,
	linux-mm, linux-block, Kefeng Wang

Both zram and zswap are used to reduce memory usage by compressing cold
page, a default compressor algorithm is selected from kinds of compressor
algorithm as the default one from very similar Kconfig, also both of
them could change the algorithm by sysfs interfaces, so unify the
default compressor algorithm to cleanup the default algorithm chosen.

Kefeng Wang (5):
  zram: zcomp: remove zcomp_set_max_streams() declaration
  zram: make zram depends on SWAP
  zram: support deflate compressor
  mm: zswap: default to lzo-rle instead of lzo
  mm: unify default compressor algorithm for zswap and zram

 Documentation/admin-guide/mm/zswap.rst     |   2 +-
 arch/loongarch/configs/loongson3_defconfig |   2 +-
 drivers/block/zram/Kconfig                 |  44 +------
 drivers/block/zram/zcomp.c                 |   3 +
 drivers/block/zram/zcomp.h                 |   1 -
 drivers/block/zram/zram_drv.c              |   2 +-
 mm/Kconfig                                 | 134 +++++++++++----------
 mm/zswap.c                                 |   8 +-
 8 files changed, 83 insertions(+), 113 deletions(-)

-- 
2.27.0



^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/5] zram: zcomp: remove zcomp_set_max_streams() declaration
  2024-02-23  3:55 [PATCH 0/5] mm: unify default compressor algorithm for zram/zswap Kefeng Wang
@ 2024-02-23  3:55 ` Kefeng Wang
  2024-02-23  3:55 ` [PATCH 2/5] zram: make zram depends on SWAP Kefeng Wang
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 11+ messages in thread
From: Kefeng Wang @ 2024-02-23  3:55 UTC (permalink / raw)
  To: Johannes Weiner, Yosry Ahmed, Nhat Pham, Andrew Morton
  Cc: Chengming Zhou, Huacai Chen, Minchan Kim, Sergey Senozhatsky,
	linux-mm, linux-block, Kefeng Wang

The zcomp_set_max_streams() is removed from commit 43209ea2d17a
("zram: remove max_comp_streams internals"), remove the declaration.

Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
---
 drivers/block/zram/zcomp.h | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/block/zram/zcomp.h b/drivers/block/zram/zcomp.h
index cdefdef93da8..e9fe63da0e9b 100644
--- a/drivers/block/zram/zcomp.h
+++ b/drivers/block/zram/zcomp.h
@@ -39,5 +39,4 @@ int zcomp_compress(struct zcomp_strm *zstrm,
 int zcomp_decompress(struct zcomp_strm *zstrm,
 		const void *src, unsigned int src_len, void *dst);
 
-bool zcomp_set_max_streams(struct zcomp *comp, int num_strm);
 #endif /* _ZCOMP_H_ */
-- 
2.27.0



^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 2/5] zram: make zram depends on SWAP
  2024-02-23  3:55 [PATCH 0/5] mm: unify default compressor algorithm for zram/zswap Kefeng Wang
  2024-02-23  3:55 ` [PATCH 1/5] zram: zcomp: remove zcomp_set_max_streams() declaration Kefeng Wang
@ 2024-02-23  3:55 ` Kefeng Wang
  2024-02-23  4:39   ` Sergey Senozhatsky
  2024-02-23  3:55 ` [PATCH 3/5] zram: support deflate compressor Kefeng Wang
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 11+ messages in thread
From: Kefeng Wang @ 2024-02-23  3:55 UTC (permalink / raw)
  To: Johannes Weiner, Yosry Ahmed, Nhat Pham, Andrew Morton
  Cc: Chengming Zhou, Huacai Chen, Minchan Kim, Sergey Senozhatsky,
	linux-mm, linux-block, Kefeng Wang

The zram is useless when SWAP is disabled, make zram depends on SWAP.

Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
---
 drivers/block/zram/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/block/zram/Kconfig b/drivers/block/zram/Kconfig
index 7b29cce60ab2..0cee425da0f5 100644
--- a/drivers/block/zram/Kconfig
+++ b/drivers/block/zram/Kconfig
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 config ZRAM
 	tristate "Compressed RAM block device support"
-	depends on BLOCK && SYSFS && MMU
+	depends on SWAP && SYSFS
 	depends on CRYPTO_LZO || CRYPTO_ZSTD || CRYPTO_LZ4 || CRYPTO_LZ4HC || CRYPTO_842
 	select ZSMALLOC
 	help
-- 
2.27.0



^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 3/5] zram: support deflate compressor
  2024-02-23  3:55 [PATCH 0/5] mm: unify default compressor algorithm for zram/zswap Kefeng Wang
  2024-02-23  3:55 ` [PATCH 1/5] zram: zcomp: remove zcomp_set_max_streams() declaration Kefeng Wang
  2024-02-23  3:55 ` [PATCH 2/5] zram: make zram depends on SWAP Kefeng Wang
@ 2024-02-23  3:55 ` Kefeng Wang
  2024-02-23  3:55 ` [PATCH 4/5] mm: zswap: default to lzo-rle instead of lzo Kefeng Wang
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 11+ messages in thread
From: Kefeng Wang @ 2024-02-23  3:55 UTC (permalink / raw)
  To: Johannes Weiner, Yosry Ahmed, Nhat Pham, Andrew Morton
  Cc: Chengming Zhou, Huacai Chen, Minchan Kim, Sergey Senozhatsky,
	linux-mm, linux-block, Kefeng Wang

Add deflate compressor support, also it is prepare for unifying the
default compressor compressor for zram and zswap.

Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
---
 drivers/block/zram/Kconfig | 7 ++++++-
 drivers/block/zram/zcomp.c | 3 +++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/block/zram/Kconfig b/drivers/block/zram/Kconfig
index 0cee425da0f5..b007dda16430 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
+	depends on CRYPTO_LZO || CRYPTO_ZSTD || CRYPTO_LZ4 || CRYPTO_LZ4HC || CRYPTO_842 || CRYPTO_DEFLATE
 	select ZSMALLOC
 	help
 	  Creates virtual block devices called /dev/zramX (X = 0, 1, ...).
@@ -20,6 +20,10 @@ choice
 	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
@@ -48,6 +52,7 @@ 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
diff --git a/drivers/block/zram/zcomp.c b/drivers/block/zram/zcomp.c
index 8237b08c49d8..1f9a431f771e 100644
--- a/drivers/block/zram/zcomp.c
+++ b/drivers/block/zram/zcomp.c
@@ -16,6 +16,9 @@
 #include "zcomp.h"
 
 static const char * const backends[] = {
+#if IS_ENABLED(CONFIG_CRYPTO_DEFLATE)
+	"deflate",
+#endif
 #if IS_ENABLED(CONFIG_CRYPTO_LZO)
 	"lzo",
 	"lzo-rle",
-- 
2.27.0



^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 4/5] mm: zswap: default to lzo-rle instead of lzo
  2024-02-23  3:55 [PATCH 0/5] mm: unify default compressor algorithm for zram/zswap Kefeng Wang
                   ` (2 preceding siblings ...)
  2024-02-23  3:55 ` [PATCH 3/5] zram: support deflate compressor Kefeng Wang
@ 2024-02-23  3:55 ` Kefeng Wang
  2024-02-23  3:55 ` [PATCH 5/5] mm: unify default compressor algorithm for zswap and zram Kefeng Wang
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 11+ messages in thread
From: Kefeng Wang @ 2024-02-23  3:55 UTC (permalink / raw)
  To: Johannes Weiner, Yosry Ahmed, Nhat Pham, Andrew Morton
  Cc: Chengming Zhou, Huacai Chen, Minchan Kim, Sergey Senozhatsky,
	linux-mm, linux-block, Kefeng Wang

Since lzo-rle performance is better than lzo, see commit ce82f19fd580
("zram: default to lzo-rle instead of lzo"), converting zswap to use
lze-rle too.

Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
---
 mm/Kconfig | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/mm/Kconfig b/mm/Kconfig
index b1448aa81e15..f41a28b74efd 100644
--- a/mm/Kconfig
+++ b/mm/Kconfig
@@ -62,7 +62,7 @@ config ZSWAP_SHRINKER_DEFAULT_ON
 choice
 	prompt "Default compressor"
 	depends on ZSWAP
-	default ZSWAP_COMPRESSOR_DEFAULT_LZO
+	default ZSWAP_COMPRESSOR_DEFAULT_LZORLE
 	help
 	  Selects the default compression algorithm for the compressed cache
 	  for swap pages.
@@ -72,7 +72,7 @@ choice
 	  available at the following LWN page:
 	  https://lwn.net/Articles/751795/
 
-	  If in doubt, select 'LZO'.
+	  If in doubt, select 'LZO-RLE'.
 
 	  The selection made here can be overridden by using the kernel
 	  command line 'zswap.compressor=' option.
@@ -83,6 +83,12 @@ config ZSWAP_COMPRESSOR_DEFAULT_DEFLATE
 	help
 	  Use the Deflate algorithm as the default compression algorithm.
 
+config ZSWAP_COMPRESSOR_DEFAULT_LZORLE
+	bool "LZO-RLE"
+	select CRYPTO_LZO
+	help
+	  Use the LZO algorithm as the default compression algorithm.
+
 config ZSWAP_COMPRESSOR_DEFAULT_LZO
 	bool "LZO"
 	select CRYPTO_LZO
@@ -118,6 +124,7 @@ config ZSWAP_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
-- 
2.27.0



^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 5/5] mm: unify default compressor algorithm for zswap and zram
  2024-02-23  3:55 [PATCH 0/5] mm: unify default compressor algorithm for zram/zswap Kefeng Wang
                   ` (3 preceding siblings ...)
  2024-02-23  3:55 ` [PATCH 4/5] mm: zswap: default to lzo-rle instead of lzo Kefeng Wang
@ 2024-02-23  3:55 ` Kefeng Wang
  2024-02-23  4:46 ` [PATCH 0/5] mm: unify default compressor algorithm for zram/zswap Yosry Ahmed
  2024-02-23  4:51 ` Sergey Senozhatsky
  6 siblings, 0 replies; 11+ messages in thread
From: Kefeng Wang @ 2024-02-23  3:55 UTC (permalink / raw)
  To: Johannes Weiner, Yosry Ahmed, Nhat Pham, Andrew Morton
  Cc: Chengming Zhou, Huacai Chen, Minchan Kim, Sergey Senozhatsky,
	linux-mm, linux-block, Kefeng Wang

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@huawei.com>
---
 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



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 2/5] zram: make zram depends on SWAP
  2024-02-23  3:55 ` [PATCH 2/5] zram: make zram depends on SWAP Kefeng Wang
@ 2024-02-23  4:39   ` Sergey Senozhatsky
  0 siblings, 0 replies; 11+ messages in thread
From: Sergey Senozhatsky @ 2024-02-23  4:39 UTC (permalink / raw)
  To: Kefeng Wang
  Cc: Johannes Weiner, Yosry Ahmed, Nhat Pham, Andrew Morton,
	Chengming Zhou, Huacai Chen, Minchan Kim, Sergey Senozhatsky,
	linux-mm, linux-block

On (24/02/23 11:55), Kefeng Wang wrote:
> 
> The zram is useless when SWAP is disabled, make zram depends on SWAP.
> 

I'm sorry, this doesn't make a lot of sense to me. zram is a generic
block device.


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 0/5] mm: unify default compressor algorithm for zram/zswap
  2024-02-23  3:55 [PATCH 0/5] mm: unify default compressor algorithm for zram/zswap Kefeng Wang
                   ` (4 preceding siblings ...)
  2024-02-23  3:55 ` [PATCH 5/5] mm: unify default compressor algorithm for zswap and zram Kefeng Wang
@ 2024-02-23  4:46 ` Yosry Ahmed
  2024-02-23  6:43   ` Kefeng Wang
  2024-02-23  4:51 ` Sergey Senozhatsky
  6 siblings, 1 reply; 11+ messages in thread
From: Yosry Ahmed @ 2024-02-23  4:46 UTC (permalink / raw)
  To: Kefeng Wang
  Cc: Johannes Weiner, Nhat Pham, Andrew Morton, Chengming Zhou,
	Huacai Chen, Minchan Kim, Sergey Senozhatsky, linux-mm,
	linux-block

On Thu, Feb 22, 2024 at 7:56 PM Kefeng Wang <wangkefeng.wang@huawei.com> wrote:
>
> Both zram and zswap are used to reduce memory usage by compressing cold
> page, a default compressor algorithm is selected from kinds of compressor
> algorithm as the default one from very similar Kconfig, also both of
> them could change the algorithm by sysfs interfaces, so unify the
> default compressor algorithm to cleanup the default algorithm chosen.

Both zswap and zram *can* be used for compressed swap, but zram is a
generic block device that has other use cases, see
https://docs.kernel.org/admin-guide/blockdev/zram.html.

For starters, making zram depend on SWAP may break some of those use cases.

Otherwise, I don't immediately see the benefit of unifying the config
options for two independent subsystems just because they both use
"compression". The reduction of the config options is nice, but in
this case I am not sure it's doing more good than harm. Also, most
people use either zswap or zram in my experience, so they don't really
have to configure both anyway.

>
> Kefeng Wang (5):
>   zram: zcomp: remove zcomp_set_max_streams() declaration
>   zram: make zram depends on SWAP
>   zram: support deflate compressor
>   mm: zswap: default to lzo-rle instead of lzo
>   mm: unify default compressor algorithm for zswap and zram
>
>  Documentation/admin-guide/mm/zswap.rst     |   2 +-
>  arch/loongarch/configs/loongson3_defconfig |   2 +-
>  drivers/block/zram/Kconfig                 |  44 +------
>  drivers/block/zram/zcomp.c                 |   3 +
>  drivers/block/zram/zcomp.h                 |   1 -
>  drivers/block/zram/zram_drv.c              |   2 +-
>  mm/Kconfig                                 | 134 +++++++++++----------
>  mm/zswap.c                                 |   8 +-
>  8 files changed, 83 insertions(+), 113 deletions(-)
>
> --
> 2.27.0
>


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 0/5] mm: unify default compressor algorithm for zram/zswap
  2024-02-23  3:55 [PATCH 0/5] mm: unify default compressor algorithm for zram/zswap Kefeng Wang
                   ` (5 preceding siblings ...)
  2024-02-23  4:46 ` [PATCH 0/5] mm: unify default compressor algorithm for zram/zswap Yosry Ahmed
@ 2024-02-23  4:51 ` Sergey Senozhatsky
  2024-02-23  6:45   ` Kefeng Wang
  6 siblings, 1 reply; 11+ messages in thread
From: Sergey Senozhatsky @ 2024-02-23  4:51 UTC (permalink / raw)
  To: Kefeng Wang
  Cc: Johannes Weiner, Yosry Ahmed, Nhat Pham, Andrew Morton,
	Chengming Zhou, Huacai Chen, Minchan Kim, Sergey Senozhatsky,
	linux-mm, linux-block

On (24/02/23 11:55), Kefeng Wang wrote:
> 
> Both zram and zswap are used to reduce memory usage by compressing cold
> page, a default compressor algorithm is selected from kinds of compressor
> algorithm as the default one from very similar Kconfig, also both of
> them could change the algorithm by sysfs interfaces, so unify the
> default compressor algorithm to cleanup the default algorithm chosen.
> 
> Kefeng Wang (5):
>   zram: zcomp: remove zcomp_set_max_streams() declaration

I'm afraid this (1/5) is the only patch in the series that we can land.

The rest of the series doesn't look beneficial nor correct.  Sorry.

>   zram: make zram depends on SWAP
>   zram: support deflate compressor
>   mm: zswap: default to lzo-rle instead of lzo
>   mm: unify default compressor algorithm for zswap and zram


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 0/5] mm: unify default compressor algorithm for zram/zswap
  2024-02-23  4:46 ` [PATCH 0/5] mm: unify default compressor algorithm for zram/zswap Yosry Ahmed
@ 2024-02-23  6:43   ` Kefeng Wang
  0 siblings, 0 replies; 11+ messages in thread
From: Kefeng Wang @ 2024-02-23  6:43 UTC (permalink / raw)
  To: Yosry Ahmed
  Cc: Johannes Weiner, Nhat Pham, Andrew Morton, Chengming Zhou,
	Huacai Chen, Minchan Kim, Sergey Senozhatsky, linux-mm,
	linux-block



On 2024/2/23 12:46, Yosry Ahmed wrote:
> On Thu, Feb 22, 2024 at 7:56 PM Kefeng Wang <wangkefeng.wang@huawei.com> wrote:
>>
>> Both zram and zswap are used to reduce memory usage by compressing cold
>> page, a default compressor algorithm is selected from kinds of compressor
>> algorithm as the default one from very similar Kconfig, also both of
>> them could change the algorithm by sysfs interfaces, so unify the
>> default compressor algorithm to cleanup the default algorithm chosen.
> 
> Both zswap and zram *can* be used for compressed swap, but zram is a
> generic block device that has other use cases, see
> https://docs.kernel.org/admin-guide/blockdev/zram.html.
> 
> For starters, making zram depend on SWAP may break some of those use cases.
> 
> Otherwise, I don't immediately see the benefit of unifying the config
> options for two independent subsystems just because they both use
> "compression". The reduction of the config options is nice, but in
> this case I am not sure it's doing more good than harm. Also, most
> people use either zswap or zram in my experience, so they don't really
> have to configure both anyway.
Fair enough, then, please ignore the patches, thanks.
> 
>>
>> Kefeng Wang (5):
>>    zram: zcomp: remove zcomp_set_max_streams() declaration
>>    zram: make zram depends on SWAP
>>    zram: support deflate compressor
>>    mm: zswap: default to lzo-rle instead of lzo
>>    mm: unify default compressor algorithm for zswap and zram
>>
>>   Documentation/admin-guide/mm/zswap.rst     |   2 +-
>>   arch/loongarch/configs/loongson3_defconfig |   2 +-
>>   drivers/block/zram/Kconfig                 |  44 +------
>>   drivers/block/zram/zcomp.c                 |   3 +
>>   drivers/block/zram/zcomp.h                 |   1 -
>>   drivers/block/zram/zram_drv.c              |   2 +-
>>   mm/Kconfig                                 | 134 +++++++++++----------
>>   mm/zswap.c                                 |   8 +-
>>   8 files changed, 83 insertions(+), 113 deletions(-)
>>
>> --
>> 2.27.0
>>


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 0/5] mm: unify default compressor algorithm for zram/zswap
  2024-02-23  4:51 ` Sergey Senozhatsky
@ 2024-02-23  6:45   ` Kefeng Wang
  0 siblings, 0 replies; 11+ messages in thread
From: Kefeng Wang @ 2024-02-23  6:45 UTC (permalink / raw)
  To: Sergey Senozhatsky
  Cc: Johannes Weiner, Yosry Ahmed, Nhat Pham, Andrew Morton,
	Chengming Zhou, Huacai Chen, Minchan Kim, linux-mm, linux-block



On 2024/2/23 12:51, Sergey Senozhatsky wrote:
> On (24/02/23 11:55), Kefeng Wang wrote:
>>
>> Both zram and zswap are used to reduce memory usage by compressing cold
>> page, a default compressor algorithm is selected from kinds of compressor
>> algorithm as the default one from very similar Kconfig, also both of
>> them could change the algorithm by sysfs interfaces, so unify the
>> default compressor algorithm to cleanup the default algorithm chosen.
>>
>> Kefeng Wang (5):
>>    zram: zcomp: remove zcomp_set_max_streams() declaration
> 
> I'm afraid this (1/5) is the only patch in the series that we can land.
> 
> The rest of the series doesn't look beneficial nor correct.  Sorry.

OK, please ignore the reset of patches, Andrew, could you only pick the 
first one, thanks.

> 
>>    zram: make zram depends on SWAP
>>    zram: support deflate compressor
>>    mm: zswap: default to lzo-rle instead of lzo
>>    mm: unify default compressor algorithm for zswap and zram


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2024-02-23  6:45 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-02-23  3:55 [PATCH 0/5] mm: unify default compressor algorithm for zram/zswap Kefeng Wang
2024-02-23  3:55 ` [PATCH 1/5] zram: zcomp: remove zcomp_set_max_streams() declaration Kefeng Wang
2024-02-23  3:55 ` [PATCH 2/5] zram: make zram depends on SWAP Kefeng Wang
2024-02-23  4:39   ` Sergey Senozhatsky
2024-02-23  3:55 ` [PATCH 3/5] zram: support deflate compressor Kefeng Wang
2024-02-23  3:55 ` [PATCH 4/5] mm: zswap: default to lzo-rle instead of lzo Kefeng Wang
2024-02-23  3:55 ` [PATCH 5/5] mm: unify default compressor algorithm for zswap and zram Kefeng Wang
2024-02-23  4:46 ` [PATCH 0/5] mm: unify default compressor algorithm for zram/zswap Yosry Ahmed
2024-02-23  6:43   ` Kefeng Wang
2024-02-23  4:51 ` Sergey Senozhatsky
2024-02-23  6:45   ` Kefeng Wang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox