ZSWAP [0] ________________________________________________________________________________ zswap is a feature built-in to the Linux kernel [1] which allows users to utilize compressed caches in RAM as swap pages. Instead of the kernel immediately swapping pages in RAM and writing them to the hard drive, wasting time on I/O operations, it compresses them into a pool in RAM. Only when the available RAM is exhausted will the kernel then write-out the least recently used page as an uncompressed file to swap on the drive. When swap will be used, zswap should provide performance improvements. Prerequisites ________________________________________________________________________________ zswap works in conjuction with swap and is handled entirely by the kernel. As such, there are only two requirements: zswap enabled in the kernel and a swapfile or swap partition on the system. Several compression options are available for zswap. The choice is use-case dependent, with the primary trade-offs being speed or size. See [2] for example benchmarks of compressors in general. Ensure zswap (CONFIG_ZSWAP) support and a compressor are enabled in the kernel: +------------------------------------------------------------------------------+ | | | Memory Management options ---> | | <*> Compressed cache for swap pages | | Compressed cache for swap pages default compressor (xxx) | | Compressed cache for swap pages default allocator (xxx) | | <*> Enable the compression cache for swap pages by default | | | +------------------------------------------------------------------------------+ Either set CONFIG_ZSWAP_DEFAULT_ON=y in the kernel config or add zswap_enabled=1 to your kernel command line (via the bootloader or the built-in command line) to have zswap enabled at boot-time. To enable zswap at runtime, +------------------------------------------------------------------------------+ | | | $ echo 1 > /sys/module/zswap/parameters/enabled | | | +------------------------------------------------------------------------------+ zswap has many options that can also be configured at runtime, including which compressor is in use. To see them all, +------------------------------------------------------------------------------+ | | | $ grep -R . /sys/module/zswap/parameters | | | +------------------------------------------------------------------------------+ For information on setting up a swapfile or swap partition, see @/storage/disks. zbud versus z3fold versus zsmalloc ________________________________________________________________________________ There are three different allocators to choose from for compressed pages: +-------------+----------------------------------------------------------------+ | Allocator | Description | |-------------+----------------------------------------------------------------| | | | | zbud | Uses a 2:1 compressed:uncompressed page allocation (legacy) | | z3fold | Uses a 3:1 ratio | | zsmalloc | Designed for zram - better under low memory conditions | | | | +-------------+----------------------------------------------------------------+ In general, z3fold should be preferred to zbud; the latter is supported solely for compatibility purposes. z3fold provides a better compression ratio and should be preferred when possible. zsmalloc has a very different page allocation method than either zbud or z3fold, and provides for greater storage density. However, zsmalloc does not implement compressed page eviction; it can only reject new pages when full. For more information on z3fold and zsmalloc, see [3] and [4]. References ________________________________________________________________________________ [0] https://kernel.org/doc/html/latest/vm/zswap.html [1] https://lkml.iu.edu/hypermail/linux/kernel/1212.1/01472.html [2] https://github.com/lz4/lz4 [3] https://kernel.org/doc/html/latest/vm/z3fold.html [4] https://kernel.org/doc/html/latest/vm/zsmalloc.html