Snag: I had issues getting it to use zstd at boot. Not sure if it's a bug or some peculiarity with Debian. Ended up compiling my own kernel for other reasons, and was finally able to get zstd by default, but otherwise I'd have to make/add it to a startup script.
In short: add the kernel modules and update GRUB as usual, then install sysfsutils and add the following line at the end of `/etc/sysfs.conf`:
module/zswap/parameters/compressor = lz4
# For zstd:
#module/zswap/parameters/compressor = zstd
Perhaps some kernel change between Linux 6.8 and 6.12 caused the old approach to no longer work. echo 1 > /sys/module/zswap/parameters/enabled
It's in TFA.Edit: To be extra clear. When I was researching this, I ended up going with zram only because:
* It is the default for Fedora.
* zramctl gives me live statistics of used and compressed size.
* The zswap doc didn't help my confusion on how backing devices work (I guess they're any swapon'd device?)
That said, if you want it to behave at its best when OOM, it does help to tweak vm.swappiness, vm.watermark_scale_factor, vm.min_free_kbytes, vm.page-cluster and a couple of other parameters.
See e.g.
https://makedebianfunagainandlearnhowtodoothercoolstufftoo.c...
https://documentation.suse.com/sles/15-SP7/html/SLES-all/cha...
I don't know of any good statistics script for zswap, I use the script below as a custom waybar module:
#!/bin/bash
stored_pages="$(cat /sys/kernel/debug/zswap/stored_pages)"
pool_total_size="$(cat /sys/kernel/debug/zswap/pool_total_size)"
compressed_size_mib="$((pool_total_size / 1024 / 1024))"
compressed_size_gib="$((pool_total_size / 1024 / 1024 / 1024))"
compressed_size_mib_remainder="$((compressed_size_mib * 10 / 1024 - compressed_size_gib * 10))"
uncompressed_size="$((stored_pages * 4096))"
uncompressed_size_mib="$((uncompressed_size / 1024 / 1024))"
uncompressed_size_gib="$((uncompressed_size / 1024 / 1024 / 1024))"
uncompressed_size_mib_remainder="$((uncompressed_size_mib * 10 / 1024 - uncompressed_size_gib * 10))"
ratio="$((100 * uncompressed_size / (pool_total_size + 1)))"
echo "$compressed_size_gib.$compressed_size_mib_remainder"