前言
ZRAM这个玩意儿在移动端上已经存在很长时间了,但是不知道为什么现在PC上依然在使用普通的swap。在我看来,zram这个玩意其实放在PC上也是很不错的一个功能。特别是现在一些云服务的内存不到的情况下使用,还是能缓解一下内存不足的问题的。所以接下来这篇是记录下Ubuntu下启用zram的一个过程。
安装
ubuntu上有对应的apt软件包,可以使用进行安装
1 2 |
sudo apt install zram-config |
使用
安装后,会同时安装systemctl的服务,但是主要还是会依赖zramctl这个可执行文件
1 2 |
zramctl -help |
可以查看一些有用的帮助,但是其实要进行完整配置,一般不会直接使用这个,要进行配置的话需要通过修改/usr/bin/init-zram-swapping
算法选择
这个东西安卓圈的人研究过挺多的,最后的结论一般都是:默认的lzo就是垃圾,
但是ubuntu下的默认算法居然也是lzo,但是是进化版的lzo-rle,所以我特地去找了下这个新算法的相关测试数据,结果它还是不怎样。
所以从上面综合来看,zstd压缩率不错,但是速度欠缺,需要搭配vm.page-cluster=0
使用。但是因为本机已经有16G运存,搭配vm.page-cluster=0
使用了,因为要跑gitlab、mysql,已经够用了。下面是我整体的配置文件,大家可以参考
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#!/bin/sh # load dependency modules NRDEVICES=$(grep -c ^processor /proc/cpuinfo | sed 's/^0$/1/') if modinfo zram | grep -q ' zram_num_devices:' 2>/dev/null; then MODPROBE_ARGS="zram_num_devices=${NRDEVICES}" elif modinfo zram | grep -q ' num_devices:' 2>/dev/null; then MODPROBE_ARGS="num_devices=${NRDEVICES}" else exit 1 fi modprobe zram $MODPROBE_ARGS # 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 / ${NRDEVICES}) * 1024)) # 配置vm特性 sysctl vm.page-cluster=0 sysctl vm.swappiness=100 # initialize the devices for i in $(seq ${NRDEVICES}); do DEVNUMBER=$((i - 1)) # 配置使用lz4压缩 echo "lz4" > /sys/block/zram${DEVNUMBER}/comp_algorithm echo $mem > /sys/block/zram${DEVNUMBER}/disksize mkswap /dev/zram${DEVNUMBER} swapon -p 5 /dev/zram${DEVNUMBER} done |
lz4跟page-cluster我都改過,結果會發生問題或者卡頓。
反而原來的zlo+page-cluster=3很順而且什麼問題都沒有。
之前參考別的大大的文章,她也是測試一堆之後做基礎測試不如默認。
https://segmentfault.com/a/1190000041578292###