ZRAM运行swap

NVIDIA Jetson GPU硬件环境,默认定制的 Ubuntu Linux 激活了基于 zram - 基于内存的压缩块存储设备Jetson Nano的swap ,当时我关闭了 zram - 基于内存的压缩块存储设备 以便适应 Kubernetes Atlas 部署要求。不过,在 Apple ARM架构芯片M1 Pro Macbook Pro 2022笔记本,内存有限,所以想要通过 zram - 基于内存的压缩块存储设备 来增加内存超卖(通过部分内存构建swap来实现压缩)。

zram - 基于内存的压缩块存储设备 能够在内存中存储更多信息,通过消耗CPU资源来节约内存使用。在 KVM内存优化 可以结合采用 zram - 基于内存的压缩块存储设备 来实现,主要有两种方式:

对于 Arch Linux ,也建议采用 zram-generator 工具来完成简洁的配置:

  • 使用 Arch Linux AUR 安装 zram-generator 并将案例配置复制为 /etc/systemd/zram-generator.conf :

安装zram-generator
sudo pacman -S zram-generator
sudo cp /usr/share/doc/zram-generator/zram-generator.conf.example /etc/systemd/zram-generator.conf
  • 检查 /usr/share/doc/zram-generator/zram-generator.conf.example 如下:

/usr/share/doc/zram-generator/zram-generator.conf.example
[zram0]
host-memory-limit = 9048
zram-size = min(ram / 10, 2048)
compression-algorithm = lzo-rle
options =
writeback-device = /dev/zvol/tarta-zoot/swap-writeback

[zram1]
zram-size = ram / 10
fs-type = ext2
mount-point = /run/compressed-mount-point

备注

官方提供的 zram-generator.conf 默认配置了2个zram,但是启动只成功了 zram1 ,看起来是环境问题。

参考Fedora系统,我发现在Fedora上,默认就已经启动了 zram-generator 服务,默认就是使用了配置 /usr/lib/systemd/zram-generator.conf 内容如下

Fedora的默认 /usr/lib/systemd/zram-generator.conf 配置
# This config file enables a /dev/zram0 device with the default settings:
# — size — same as available RAM or 8GB, whichever is less
# — compression — most likely lzo-rle
#
# To disable, uninstall zram-generator-defaults or create empty
# /etc/systemd/zram-generator.conf file.
[zram0]
zram-size = min(ram, 8192)
  • 我感觉配置2G RAM应该足够,或者就采用 1/10 内存来构建swap on zram,所以修订配置为:

参考Fedora配置的 /etc/systemd/zram-generator.conf
[zram0]
zram-size = min(ram / 10, 2048)
compression-algorithm = lzo-rle
  • 启动zram0:

启动zram0压缩swap
systemctl daemon-reload
systemctl start /dev/zram0
  • 此时检查 top 就会看到系统增加了2G的swap,并且执行 zramctl 可以看到:

    NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
    /dev/zram0 lzo-rle         2G  16K  103B   16K      10 [SWAP]
    

参考