前言

zram 也称为 zRAM,先前称为 compcache。是 Linux 内核的核心功能,可提供虚拟内存压缩。
zram 通过在 RAM 内压缩块设备的分页,直到必须使用硬盘的交换空间,避免在磁盘进行分页,从而提高性能。
在本教程中,我将详细说明如何在 Ubuntu 22.04 配置或者启用 zRAM,设置 zRAM的大小以及如何持久化 zRAM的配置参数。
如果你使用其他Linux系统,请跳转到其他Linux系统章节。

Ubuntu

安装

Ubuntu上有对应的apt软件包,可以使用进行安装

1
sudo apt install zram-config

使用

安装后,会同时安装systemctl的服务,但是主要还是会依赖zramctl这个可执行文件

1
zramctl -help

配置

修改/usr/bin/init-zram-swapping,重启即可。下面附有我的配置,创建与cpu核心数量相同的块,zram大小为内存(不含swap)的一半,算法为zstd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/sh

modprobe zram num_devices=$(nproc --all)

# Calculate memory to use for zram (1/2 of ram)
totalmem=`LC_ALL=C free | grep -e "^Mem:" | sed -e 's/^Mem: *//' -e 's/ *.*//'`
mem=$((totalmem / 2 * 1024 / $(nproc --all)))

# initialize the devices
for i in $(seq $(nproc --all)); do
DEVNUMBER=$((i - 1))
echo "zstd" > /sys/block/zram${DEVNUMBER}/comp_algorithm
echo $mem > /sys/block/zram${DEVNUMBER}/disksize
mkswap /dev/zram${DEVNUMBER}
swapon -p 5 /dev/zram${DEVNUMBER}
done

其它Linux系统

创建脚本

1
2
touch /usr/bin/init-zram-swapping
chmod +x /usr/bin/init-zram-swapping

配置

修改/usr/bin/init-zram-swapping。下面附有我的配置,创建与cpu核心数量相同的块,zram大小为内存(不含swap)的一半,算法为zstd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/sh

modprobe zram num_devices=$(nproc --all)

# Calculate memory to use for zram (1/2 of ram)
totalmem=`LC_ALL=C free | grep -e "^Mem:" | sed -e 's/^Mem: *//' -e 's/ *.*//'`
mem=$((totalmem / 2 * 1024 / $(nproc --all)))

# initialize the devices
for i in $(seq $(nproc --all)); do
DEVNUMBER=$((i - 1))
echo "zstd" > /sys/block/zram${DEVNUMBER}/comp_algorithm
echo $mem > /sys/block/zram${DEVNUMBER}/disksize
mkswap /dev/zram${DEVNUMBER}
swapon -p 5 /dev/zram${DEVNUMBER}
done

开机自启动,自动挂载zram

创建/etc/systemd/system/zram.service

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Swap with zram
After=multi-user.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/bin/init-zram-swapping

[Install]
WantedBy=multi-user.target

编辑文件后,运行sudo systemctl enable zram,重启即可

参考文章

Ubuntu启用zram
如何在 Ubuntu 20.04 开启 zRAM
配置 ZRAM,实现 Linux 下的内存压缩,零成本低开销获得成倍内存扩增