简介
zram 是 Linux 原生支持的内存压缩模块。它在内存里创建一个虚拟块设备,所有写入数据都会即时压缩存储。最常见用途是当作 swap 设备:比传统硬盘 swap 快十倍以上,同时大幅减少对磁盘的磨损。zram一般用于于树莓派、路由器等低配设备,但是在内存比较大的机器上使用zram,也可以增加一定的系统性能,减少系统的oom,简而言之,zram swap属于“开了没坏处,出事时极有用”的增强手段。
操作
我最常使用nixos和ubuntu,所以介绍下这两个系统的配置方法
nixos最简单,直接在/etc/nixos/configuration.nix
加入:
zramSwap.enable = true;
就可以了,一般默认是内存的一半大小,当然还有下面这些参数:
- zramSwap.priority 设置 zram swap 的交换优先级。
- zramSwap.memoryMax 设置 zram 设备的最大内存空间(即 zram 设备最大压缩块设备大小)。
- zramSwap.algorithm 指定 zram 使用的压缩算法。
- zramSwap.swapDevices 允许在 zramSwap 配置下声明多个 zram swap 设备。
- zramSwap.memoryPercent 根据物理内存百分比自动分配 zram swap 大小 默认50%。
- zramSwap.writebackDevice 实验性功能,让 zram swap 支持“写回”,部分 swap 数据先压缩存在 zram,超出后写回硬盘分区(结合硬盘swap和内存swap双策略)。
保存之后执行:
nixos-rebuild switch
就可以生效。
之后用:
swapon --show
验证效果。
ubuntu配置其实也不复杂,只要安装下面这个包就可以:
sudo apt install zram-tools
之后就是和nixos一样配置一些参数:
编辑 /etc/default/zramswap
:
# Compression algorithm selection
# speed: lz4 > zstd > lzo
# compression: zstd > lzo > lz4
# This is not inclusive of all that is available in latest kernels
# See /sys/block/zram0/comp_algorithm (when zram module is loaded) to see
# what is currently set and available for your kernel[1]
# [1] https://github.com/torvalds/linux/blob/master/Documentation/blockdev/zram.txt#L86
ALGO=lz4
# Specifies the amount of RAM that should be used for zram
# based on a percentage the total amount of available memory
# This takes precedence and overrides SIZE below
PERCENT=50
# Specifies a static amount of RAM that should be used for
# the ZRAM devices, this is in MiB
SIZE=4096
# Specifies the priority for the swap devices, see swapon(2)
# for more details. Higher number = higher priority
# This should probably be higher than hdd/ssd swaps.
PRIORITY=100
- ALGO 指定 zram 所用的压缩算法。
- PERCENT 指定用多少百分比的物理内存分配给 zram。
- SIZE 指定 zram swap 的固定大小,单位为 MiB(兆字节)。
- PRIORITY 设置该swap设备的优先级。多个swap设备并存时,优先级数值越高,系统越优先使用(比如 zram swap 可以设为100,远高于默认的硬盘swap)。
之后重启下面服务生效:
systemctl restart zramswap.service
最后查看效果:
swapon --show
关于压缩算法
zram 支持很多压缩算法,你可以使用下面命令查看支持的压缩算法:
cat /sys/block/zram0/comp_algorithm
但是一般常用的是lzo和zstd,lzo的优势就是速度快,zstd的优势是压缩率高,所以追求容量可以使用zstd,追求速度可以使用lzo。
欢迎关注我的博客 www.bboy.app
Have Fun