Linux ZRAM

起因一半是因为公司配的电脑太菜(暴言

最近编译操作系统时进行了个智熄操作(make -j)导致build server的物理内存被光速塞爆,于是翻出闲置许久的M.2 SATA SSD当作swap。但不知是硬盘盒故障还是SSD故障,写入速度只有可怜的60MB/s(甚至用久了还能更慢),当作swap并不能提速,顶多免死。

与此同时,折腾NEC洋垃圾轻薄本(Fedora 36)的时候偶然发现lsblk命令汇报了一个zram0 252:0 0 3.7G disk [SWAP],遂Google了一下,好家伙,突然领悟了低内存+强劲CPU的正确使用方法。

低内存: anything below 6 gigs of RAM

强劲CPU:anything after Hotwell(amd64)

1
2
3
4
5
6
# modprobe zram num_devices=1
# echo [4G|8G|whatever] | tee /sys/block/zram0/disksize
# sysctl vm.swappiness=60  # Ubuntu 20.04 默认
# sysctl vm.vfs_cacke_pressure=100  # Ubuntu 20.04 默认
# mkswap /dev/zram0
# swapon /dev/zram0 -p 100

可以酌情写入modprobesystemd配置文件启动自动配置。

可以使用cat /sys/block/zram0/mm_stat或更加人性化的zramctl [--output-all]来检查zram设备使用状况。

ZRAM设备本质上还是一种用时间换取空间的做法。关于ZRAM应用和调优甚至还有深入讲解的博客文章。文中也提到,应当根据实际应用情况来选择压缩算法和vm.swappiness参数配置。




但最开始提到的问题其实只要别偷懒,make -j14就好了


20221122更新 压缩算法设置位于/sys/block/zramn/disksize,或者其实不如直接

1
2
3
4
modprobe zram num_devices=1
zramctl -a zstd -s 16G /dev/zram0
mkswap /dev/zram0
swapon /dev/zram0 -p 14

Works on my machine™