什么是 zram?
zram,旧称为 compcache,是一个用于在内存中创建压缩的块设备的 Linux 内核模块,即带实时磁盘压缩的内存盘。
通俗来讲,这是通过压缩在内存中闲置的占用,变成更小的内容储存在内存当中。不需要用的时候压缩,需要用来再解压。
因为这个过程全程都是在内存中进行,不涉及到如 swap 那样的硬盘 IO 操作,所以速度和延迟都会比 swap 快很多,并且没有传统 swap 那样的 IO 读写,对硬盘也更加友好(比如在树莓派那样使用 TF 卡作为储存介质的设备)。
但是 zram 也有一定的缺点,整体操作都需要占用一部分的 CPU 来进行操作。
如何配置 zram?
我使用的是 ArchLinux 作为主操作系统,具体的情况如下:

我们遵循 ArchLinux Wiki 来完成一步步操作。
现代内核基本都已经合入了 zram 的驱动,所以本篇不再赘述如何启用 zram。
关闭 zswap
zswap 是用于与 swap 设备协同工作的压缩模块,启用 zswap 将会阻止 zram 的使用,所以第一步我们将会先关闭 zswap。
此处的禁用我们会编辑内核参数部分,实现 永久禁用 zswap 功能。
-
编辑
/etc/default/grub文件,添加如下内容 GRUB_CMDLINE_LINUX_DEFAULT = “zswap.enabled = 0” -
使用对应命令重新生成 grub 文件,ArchLinux 这里使用的是
grub-mkconfig:Terminal window sudo grub-mkconfig -o /boot/grub/grub.cfg -
然后再次检查 zswap 是否有效关闭。
Terminal window cat /sys/module/zswap/parameters/enabled
当输出内容为 N 时则为关闭了 zswap。
使用 zram-generator 进行 zram 配置
根据 ArchWiki, 我们使用 zram-generator 进行配置,只需要安装对应的包即可。
sudo pacman -S zram-generator -y创建 /etc/systemd/zram-generator 文件,并加入如下内容:
[zram0]zram-size = min(ram / 2) # 使用本机 RAM 的一半compression-algorithm = zstd之后先执行 daemon-reload,再启用对应的服务即可(zramN 要与上面的实例编号相对应)。
可以使用 zramctl 来对配置的 zram 进行查看。
zramctl输出如下:
NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT/dev/zram0 zstd 7.6G 4K 64B 20K [SWAP]据观测来说,zram-generator 配置的 zram 的优先度会自动高于已配置的 swap,系统会自动先使用 zram。
补充资料
本文只是简单介绍了我的 zram 配置过程,下面贴出一些优秀博文,更加详细地解释关于 zram 的内容:
- 配置 ZRAM,实现 Linux 下的内存压缩,零成本低开销获得成倍内存扩增 - yooooooo:该文章更加详细的介绍了关于 zram 的压缩算法和内存使用的关系。