blog.monophile.net

コンピュータのこととかのメモ。

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、 情報科学芸術大学院大学[IAMAS] においてメディア表現を専攻し修了。 現在は digitiminimi Inc. において、インフラエンジニアとして生計をたててている。

work

各種システム構築と管理を承ります。

Cloud Platform Openstack, GCP, AWS, Azure, ...
Openstack keystone, glance, cinder, swift, neutron, nova, ...
Virtualization QEMU+KVM, LXD/LXC, Docker, ...
OS Debian GNU/Linux, Ubuntu, CentOS, ...
Networks IPSec, L2TP, VXLAN, WirelessAP, ...
WebApps WordPress, GitLab, Redmine, ...
Configuration Management Ansible, Terraform, ...
Monitoring Nagios, Munin, ...

posts

ubuntuでzramとzswapを有効にする

概要

メモリが足りなかったので、少しでも良くなればと、zramとzswapを試してみた。 (同じ様な技術なので、どちらか一方で良い。) 環境はUbuntu16.04。

zram

基本はzram-configで管理する。 /usr/bin/init-zram-swapping を一部書き換えてlz4による圧縮にしておく。

install

$ sudo apt install zram-config

/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

reboot

以下で反映されている事が確認できる。

$ 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
cat /sys/block/zram0/comp_algorithm
lzo [lz4]

zswap

zswapはスワップデバイスがあることが前提になる。 lz4を使うためにカーネルブートパラメータとinitramfsのモジュールを調整する。

/etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=70"
$ sudo update-grub

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から確認できる。

$ dmesg | grep "zswap: "
[    2.868315] zswap: loaded using pool lz4/zbud

refs