linux-imx/drivers/block/zram/Kconfig
Sergey Senozhatsky 84b33bf788 zram: introduce recompress sysfs knob
Allow zram to recompress (using secondary compression streams)
pages.

Re-compression algorithms (we support up to 3 at this stage)
are selected via recomp_algorithm:

  echo "algo=zstd priority=1" > /sys/block/zramX/recomp_algorithm

Please read documentation for more details.

We support several recompression modes:

1) IDLE pages recompression is activated by `idle` mode

  echo "type=idle" > /sys/block/zram0/recompress

2) Since there may be many idle pages user-space may pass a size
threshold value (in bytes) and we will recompress pages only
of equal or greater size:

  echo "threshold=888" > /sys/block/zram0/recompress

3) HUGE pages recompression is activated by `huge` mode

  echo "type=huge" > /sys/block/zram0/recompress

4) HUGE_IDLE pages recompression is activated by `huge_idle` mode

  echo "type=huge_idle" > /sys/block/zram0/recompress

[senozhatsky@chromium.org: we should always zero out err variable in recompress loop[
  Link: https://lkml.kernel.org/r/20221110143423.3250790-1-senozhatsky@chromium.org
Link: https://lkml.kernel.org/r/20221109115047.2921851-5-senozhatsky@chromium.org
Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
Acked-by: Minchan Kim <minchan@kernel.org>
Cc: Nathan Chancellor <nathan@kernel.org>
Cc: Alexey Romanov <avromanov@sberdevices.ru>
Cc: Nhat Pham <nphamcs@gmail.com>
Cc: Nitin Gupta <ngupta@vflare.org>
Cc: Suleiman Souhlal <suleiman@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2022-11-30 15:58:51 -08:00

2.5 KiB

SPDX-License-Identifier: GPL-2.0

config ZRAM tristate "Compressed RAM block device support" depends on BLOCK && SYSFS && MMU 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 itself. These disks allow very fast I/O and compression provides good amounts of memory savings.

  It has several use cases, for example: /tmp storage, use as swap
  disks and maybe many more.

  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_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 "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 help With incompressible page, there is no memory saving to keep it in memory. Instead, write it out to backing device. For this feature, admin should set up backing device via /sys/block/zramX/backing_dev.

 With /sys/block/zramX/{idle,writeback}, application could ask
 idle page's writeback to the backing device to save in memory.

 See Documentation/admin-guide/blockdev/zram.rst for more information.

config ZRAM_MEMORY_TRACKING bool "Track zRam block status" depends on ZRAM && DEBUG_FS help With this feature, admin can track the state of allocated blocks of zRAM. Admin could see the information via /sys/kernel/debug/zram/zramX/block_state.

  See Documentation/admin-guide/blockdev/zram.rst for more information.

config ZRAM_MULTI_COMP bool "Enable multiple compression streams" depends on ZRAM help This will enable multi-compression streams, so that ZRAM can re-compress pages using a potentially slower but more effective compression algorithm. Note, that IDLE page recompression requires ZRAM_MEMORY_TRACKING.