Zswap - ArchWiki

Download as pdf or txt
Download as pdf or txt
You are on page 1of 4

zswap - ArchWiki https://wiki.archlinux.

org/title/Zswap

zswap
zswap is a kernel feature that provides a compressed RAM cache for swap Related articles
pages. Pages which would otherwise be swapped out to disk are instead
compressed and stored into a memory pool in RAM. Once the pool is full or Kernel parameters
the RAM is exhausted, the least recently used (LRU) page is decompressed
and written to disk, as if it had not been intercepted. After the page has been Mkinitcpio
decompressed into the swap cache, the compressed version in the pool can be
freed.

The difference compared to zram is that zswap works in conjunction with a swap device while zram with
created swap on top of it is a swap device in RAM that does not require a backing swap device.

1 Toggling zswap
All officially supported kernels have zswap enabled by default. This can be verified with
zgrep CONFIG_ZSWAP_DEFAULT_ON /proc/config.gz .

To disable zswap at runtime, execute the following command:

# echo 0 > /sys/module/zswap/parameters/enabled

To disable zswap permanently, add zswap.enabled=0 to your kernel parameters.

2 Customizing zswap

2.1 Current parameters


zswap has several customizable parameters. The live settings can be displayed using:

$ grep -r . /sys/module/zswap/parameters/

/sys/module/zswap/parameters/same_filled_pages_enabled:Y
/sys/module/zswap/parameters/enabled:Y
/sys/module/zswap/parameters/max_pool_percent:20
/sys/module/zswap/parameters/compressor:zstd
/sys/module/zswap/parameters/non_same_filled_pages_enabled:Y
/sys/module/zswap/parameters/zpool:zsmalloc
/sys/module/zswap/parameters/exclusive_loads:N
/sys/module/zswap/parameters/accept_threshold_percent:90

See the zswap documentation (https://docs.kernel.org/admin-guide/mm/zswap.html) for the


description of the different parameters.

For more information about exclusive_loads parameter (which is not currently in zswap
documentation), see this commentary in linux kernel source code (https://github.com/torvalds/linux/
blob/9ed22ae6be817d7a3f5c15ca22cbc9d3963b481d/mm/Kconfig#L48).

1 of 4 15/11/2023, 18:08
zswap - ArchWiki https://wiki.archlinux.org/title/Zswap

The boot time load message showing the initial configuration can be retrieved with:

# dmesg | grep zswap:

[ 0.317569] zswap: loaded using pool zstd/zsmalloc

2.2 Set parameters

2.2.1 Using sysfs


Each setting can be changed at runtime via the sysfs interface. For example, to change the
compressor parameter:

# echo lz4 > /sys/module/zswap/parameters/compressor

2.2.2 Using kernel boot parameters


To persist the parameter change, the corresponding option, for example zswap.compressor=lz4 ,
must be added to the kernel boot parameter. Therefore to set permanently all the above settings, the
following kernel parameters must be added:

zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=20 zswap.zpool=z3fold

When changing the compression algorithm via boot parameter, one needs to ensure the corresponding
compression module is loaded early during boot (refer to #Compression algorithm).

2.3 Maximum pool size


The memory pool is not preallocated, it is allowed to grow up to a certain limit in percentage of the total
memory available, by default up to 20% of the total RAM. Once this threshold is reached, pages are
evicted from the pool into the swap device. The maximum compressed pool size is controlled with the
parameter max_pool_percent .

2.4 Compressed memory pool allocator


The zpool parameter controls the management of the compressed memory pool.

With the zbud data allocator, 2 compressed objects are stored into 1 page which limits the compression
ratio to 2 or less.

z3fold (https://docs.kernel.org/mm/z3fold.html) allocator allows up to 3 compressed objects by page.


The compression ratio with z3fold typically averages 2.7 while it is 1.7 for zbud.

A zpool of type z3fold is created by default. Use the kernel parameter zswap.zpool to select another
allocator at boot time. The data allocator can also be changed at a later stage via the sysfs interface.

In later kernels (after 6.3.arch1-1+) zsmalloc (https://docs.kernel.org/mm/zsmalloc.html) allocator was


added. It is supposed to work well under low memory conditions and it saves more memory.

2 of 4 15/11/2023, 18:08
zswap - ArchWiki https://wiki.archlinux.org/title/Zswap

2.5 Compression algorithm


For page compression, zswap uses compressor modules provided by the kernel's cryptographic API. In
official kernels the zstd compression algorithm is used by default but this can be changed with
zswap.compressor= at boot time. Other options include deflate, lzo, 842, lz4 and lz4hc.

There is no issue changing the compression at runtime using sysfs but zswap starts in this case with zstd
and switches at a later stage to the defined algorithm. To start zswap with another algorithm straight away,
this must be set via the kernel boot parameters and the corresponding module must be loaded early by the
kernel. This can be achieved by following these steps:

1. Add the modules required for the chosen compressor to the mkinitcpio#MODULES
array.
2. Regenerate the initramfs.
3. Set the compression algorithm using the zswap.compressor= kernel parameter.

On next boot, see #Current parameters to check if zswap now uses the requested compressor.

3 Zswap statistics
To see zswap statistics you can run this:

# grep -r . /sys/kernel/debug/zswap

duplicate_entry:0
pool_limit_hit:13404213
pool_total_size:6184960 (pool size in total in pages)
reject_alloc_fail:5
reject_compress_poor:0
reject_kmemcache_fail:0
reject_reclaim_fail:13404213
stored_pages:4251 (pool size after compression)
written_back_pages:0

4 See also
▪ zswap: How to determine whether it is compressing swap pages? (https://lore.ker
nel.org/lkml/1674223.HVFdAhB7u5@merkaba/).
▪ IBM Support Article "New Linux zswap compression functionality" (benchmarks
images do not load) (https://www.ibm.com/support/pages/new-linux-zswap-com
pression-functionality).
▪ Ask Ubuntu: zram vs. zswap vs. zcache (https://askubuntu.com/questions/471912
/zram-vs-zswap-vs-zcache-ultimate-guide-when-to-use-which-one). (zcache is
deprecated)
▪ Arch Linux forum thread (https://bbs.archlinux.org/viewtopic.php?id=169585).
▪ LWN.net technical article by the main developer of zswap (https://lwn.net/Article
s/537422/).

Retrieved from "https://wiki.archlinux.org/index.php?title=Zswap&oldid=791882"

3 of 4 15/11/2023, 18:08
zswap - ArchWiki https://wiki.archlinux.org/title/Zswap

4 of 4 15/11/2023, 18:08

You might also like