Yesterday read for first time an article about zswap. I though it was something new, but a bit search showed that it started around 2013 as per this article.
I have a 2015 Dell XPS13 with i7, 128GB SSD and 8GB RAM. But some times my systems struggle with memory and when swapping kicks in, the system gets stuck. I have used swappiness in the past but not much improvement (or it was in my former company laptop??). Anyway this is my current swappiness:
# cat /proc/sys/vm/swappiness 60 # sysctl vm.swappiness vm.swappiness = 60
Even having “suspender” enabled in Chrome, I just have over 2GB RAM free.
$ top top - 10:23:14 up 6 days, 1:54, 1 user, load average: 0.23, 0.41, 0.44 Tasks: 333 total, 1 running, 332 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.7 us, 0.2 sy, 0.0 ni, 99.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 56.6/7933.8 [||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ] MiB Swap: 1.3/6964.0 [| ]
Ok, check you have ZSWAP available in your kernel.
$ uname -a
Linux x 5.7.0-2-amd64 #1 SMP Debian 5.7.10-1 (2020-07-26) x86_64 GNU/Linux
$ cat /boot/config-uname -r
| grep -i zswap
CONFIG_ZSWAP=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_DEFLATE is not set
CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_842 is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4 is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4HC is not set
# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
CONFIG_ZSWAP_COMPRESSOR_DEFAULT="lzo"
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set
# CONFIG_ZSWAP_ZPOOL_DEFAULT_ZSMALLOC is not set
CONFIG_ZSWAP_ZPOOL_DEFAULT="zbud"
# CONFIG_ZSWAP_DEFAULT_ON is not set
$ cat /sys/module/zswap/parameters/enabled
N
If you have “N”in the last command and “CONFIG_ZSWAP=y” then your systems supports zswap but it is not enabled.
$ echo Y | sudo tee /sys/module/zswap/parameters/enabled $ cat /sys/module/zswap/parameters/enabled Y
Now you can tune some parameters to increase compression rate (3:1)
# list all parameters grep . /sys/module/zswap/parameters/* # change compression params echo z3fold | sudo tee /sys/module/zswap/parameters/zpool echo lzo | sudo tee /sys/module/zswap/parameters/compressor
How to check zswap is working? I followed this email thread to find some clues:
# cd /sys/kernel/debug/zswap /sys/kernel/debug/zswap# grep . * duplicate_entry:0 pool_limit_hit:0 pool_total_size:237568 reject_alloc_fail:0 reject_compress_poor:0 reject_kmemcache_fail:0 reject_reclaim_fail:0 same_filled_pages:33 stored_pages:151 written_back_pages:0 ############### ## 12h later ## ############### /sys/kernel/debug/zswap# grep . * duplicate_entry:0 pool_limit_hit:0 pool_total_size:17944576 reject_alloc_fail:0 reject_compress_poor:8 reject_kmemcache_fail:0 reject_reclaim_fail:0 same_filled_pages:4146 stored_pages:16927 written_back_pages:0
So it seems some values are increasing.
The difficult part seems to make this change to survive a reboot. The easy way, it is just to update “/etc/rc.local”.
# cat /etc/rc.local .... # enabling zswap - 2020-08 echo Y >/sys/module/zswap/parameters/enabled echo z3fold >/sys/module/zswap/parameters/zpool