Skip to content

Commit

Permalink
mm: Kconfig: simplify zswap configuration
Browse files Browse the repository at this point in the history
- CONFIG_ZRAM: Zram is a user-facing feature, whereas zsmalloc is
  not. Don't make the user chase down a technical dependency like
  that, just select it in automatically when zram is requested. The
  CONFIG_CRYPTO dependency is redundant due to more specific deps.

- CONFIG_ZPOOL: This is not a user-facing feature. Hide the symbol and
  have it selected in as needed.

- CONFIG_ZSWAP: Select CRYPTO instead of depend. Common pattern.

- Make the ZSWAP suboptions and their descriptions (compression,
  allocation backend) a bit more straight-forward for the user.

Link: https://lkml.kernel.org/r/[email protected]
Signed-off-by: Johannes Weiner <[email protected]>
Cc: Dan Streetman <[email protected]>
Cc: Michal Hocko <[email protected]>
Cc: Minchan Kim <[email protected]>
Cc: Roman Gushchin <[email protected]>
Cc: Seth Jennings <[email protected]>
Cc: Shakeel Butt <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
  • Loading branch information
hnaz authored and akpm00 committed May 19, 2022
1 parent 519bcb7 commit b3fbd58
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 31 deletions.
3 changes: 2 additions & 1 deletion drivers/block/zram/Kconfig
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
# SPDX-License-Identifier: GPL-2.0
config ZRAM
tristate "Compressed RAM block device support"
depends on BLOCK && SYSFS && ZSMALLOC && CRYPTO
depends on BLOCK && SYSFS
depends on CRYPTO_LZO || CRYPTO_ZSTD || CRYPTO_LZ4 || CRYPTO_LZ4HC || CRYPTO_842
select ZSMALLOC
help
Creates virtual block devices called /dev/zramX (X = 0, 1, ...).
Pages written to these disks are compressed and stored in memory
Expand Down
55 changes: 25 additions & 30 deletions mm/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ 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
Expand All @@ -21,8 +24,9 @@ menuconfig SWAP

config ZSWAP
bool "Compressed cache for swap pages (EXPERIMENTAL)"
depends on SWAP && CRYPTO=y
depends on SWAP
select FRONTSWAP
select CRYPTO
select ZPOOL
help
A lightweight compressed cache for swap pages. It takes
Expand All @@ -38,8 +42,18 @@ config ZSWAP
they have not be fully explored on the large set of potential
configurations and workloads that exist.

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.

choice
prompt "Compressed cache for swap pages default compressor"
prompt "Default compressor"
depends on ZSWAP
default ZSWAP_COMPRESSOR_DEFAULT_LZO
help
Expand Down Expand Up @@ -105,7 +119,7 @@ config ZSWAP_COMPRESSOR_DEFAULT
default ""

choice
prompt "Compressed cache for swap pages default allocator"
prompt "Default allocator"
depends on ZSWAP
default ZSWAP_ZPOOL_DEFAULT_ZBUD
help
Expand Down Expand Up @@ -145,26 +159,9 @@ config ZSWAP_ZPOOL_DEFAULT
default "zsmalloc" if ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
default ""

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 ZPOOL
tristate "Common API for compressed memory storage"
depends on ZSWAP
help
Compressed memory storage API. This allows using either zbud or
zsmalloc.

config ZBUD
tristate "Low (Up to 2x) density storage for compressed pages"
depends on ZPOOL
tristate "2:1 compression allocator (zbud)"
depends on ZSWAP
help
A special purpose allocator for storing compressed pages.
It is designed to store up to two compressed pages per physical
Expand All @@ -173,24 +170,22 @@ config ZBUD
density approach when reclaim will be used.

config Z3FOLD
tristate "Up to 3x density storage for compressed pages"
depends on ZPOOL
tristate "3:1 compression allocator (z3fold)"
depends on ZSWAP
help
A special purpose allocator for storing compressed pages.
It is designed to store up to three compressed pages per physical
page. It is a ZBUD derivative so the simplicity and determinism are
still there.

config ZSMALLOC
tristate "Memory allocator for compressed pages"
tristate
prompt "N:1 compression allocator (zsmalloc)" if ZSWAP
depends on MMU
help
zsmalloc is a slab-based memory allocator designed to store
compressed RAM pages. zsmalloc uses virtual memory mapping
in order to reduce fragmentation. However, this results in a
non-standard allocator interface where a handle, not a pointer, is
returned by an alloc(). This handle must be mapped in order to
access the allocated space.
pages of various compression levels efficiently. It achieves
the highest storage density with the least amount of fragmentation.

config ZSMALLOC_STAT
bool "Export zsmalloc statistics"
Expand Down

0 comments on commit b3fbd58

Please sign in to comment.