我使用 Ubuntu 16.04 或 18.04 时没有遇到任何问题,但最近我跨接了 20.04 VM,无法让它在启动时设置正确的 Zswap 参数。似乎它找不到所需的模块。
$ dmesg | egrep -i 'zs|zr|zc'
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.4.0-1009-gcp root=PARTUUID=db157b59-599b-4c37-91f7-175253949aca ro console=ttyS0 transparent_hugepage=always zswap.compressor=lz4hc zswap.enabled=1 zswap.max_pool_percent=50 zswap.zpool=z3fold panic=-1
[ 0.200636] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.4.0-1009-gcp root=PARTUUID=db157b59-599b-4c37-91f7-175253949aca ro console=ttyS0 transparent_hugepage=always zswap.compressor=lz4hc zswap.enabled=1 zswap.max_pool_percent=50 zswap.zpool=z3fold panic=-1
[ 2.062108] zswap: compressor lz4hc not available, using default lzo
[ 2.064354] zswap: zpool z3fold not available, using default zbud
[ 2.066454] zswap: loaded using pool lzo/zbud
不过,我已经按照一贯的方式设置了相关的配置文件。
$ cat /etc/initramfs-tools/modules
z3fold
lz4hc
lz4hc_compress
这似乎是在构建 initrd 时发现的。
$ sudo update-initramfs -vu
Available versions: 5.4.0-1009-gcp
Keeping /boot/initrd.img-5.4.0-1009-gcp.dpkg-bak
update-initramfs: Generating /boot/initrd.img-5.4.0-1009-gcp
Adding module /lib/modules/5.4.0-1009-gcp/kernel/mm/z3fold.ko
Adding module /lib/modules/5.4.0-1009-gcp/kernel/lib/lz4/lz4hc_compress.ko
Adding module /lib/modules/5.4.0-1009-gcp/kernel/crypto/lz4hc.ko
[...]
lsinitrd
还显示模块已被复制到 initrd 中。
$ lsinitrd /boot/initrd.img-5.4.0-1009-gcp | egrep 'lz4|z3'
-rw-r--r-- 1 root root 8201 Apr 10 18:35 usr/lib/modules/5.4.0-1009-gcp/kernel/crypto/lz4hc.ko
drwxr-xr-x 2 root root 0 May 3 11:08 usr/lib/modules/5.4.0-1009-gcp/kernel/lib/lz4
-rw-r--r-- 1 root root 17017 Apr 10 18:35 usr/lib/modules/5.4.0-1009-gcp/kernel/lib/lz4/lz4hc_compress.ko
-rw-r--r-- 1 root root 31673 Apr 10 18:35 usr/lib/modules/5.4.0-1009-gcp/kernel/mm/z3fold.ko
启动时lsmod
确认模块尚未加载,但手动启用它们没有问题。
# echo lz4hc >/sys/module/zswap/parameters/compressor
# echo z3fold >/sys/module/zswap/parameters/zpool
$ lsmod | egrep 'lz4|z3'
z3fold 28672 1
lz4hc 16384 18
lz4hc_compress 24576 1 lz4hc
/sys/kernel/debug/zswap/pool_limit_hit:0
/sys/module/zswap/parameters/same_filled_pages_enabled:Y
/sys/module/zswap/parameters/enabled:Y
/sys/module/zswap/parameters/max_pool_percent:50
/sys/module/zswap/parameters/compressor:lz4hc
/sys/module/zswap/parameters/zpool:z3fold
dmesg
但是每次启动似乎都会出现同样的问题。我发现当我更改这里的参数时什么都没有打印出来,这有点奇怪,但我不知道这是否意味着什么。
我可以编写一个脚本来执行此操作后但这显然不是正确的过程。
还有人遇到过这种情况吗?也许是内核发生了变化,导致找不到模块?