Ubuntu で zram または zswap を有効にする
概要
メモリが足りなかったので、少しでも良くなればと、zram と zswap を試してみた。 (同じ様な技術なので、どちらか一方で良い。) 環境は Ubuntu16.04。
zram
基本は zram-config で管理する。 /usr/bin/init-zram-swapping
を一部書き換えて lz4
による圧縮にしておく。
install
/usr/bin/init-zram-swapping の編集
/usr/bin/init-zram-swapping
を下記のように編集する必要がある。 差分は echo "lz4" ...
の行を追加のみになると思われる。
#!/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))
# initialize the devices
for i in $(seq ${NRDEVICES}); do
DEVNUMBER=$((i - 1))
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
再起動
再起動したあと、以下で反映されている事が確認できる。
$ swapon -s
Filename Type Size Used Priority
/dev/vda2 partition 7200764 0 -1
/dev/zram0 partition 254000 0 5
/dev/zram1 partition 254000 0 5
zswap
zswap はスワップデバイスがあることが前提になる。 lz4 を使うためにカーネルブートパラメータと initramfs のモジュールを調整する。
/etc/default/grub の編集と GRUB の更新
下記のように、 GRUB_CMDLINE_LINUX_DEFAULT
を変更する。
initramfs の更新
echo lz4 | sudo tee -a /etc/initramfs-tools/modules
echo lz4_compress | sudo tee -a /etc/initramfs-tools/modules
sudo update-initramfs -u
reboot
再起動したあと、zswap が有効になっていることが dmesg から確認できる。