zram でメモリを圧縮する
Ubuntu 12.10 でかなりメモリを使用するプログラムを実行したのだが、 HDD の swap を使用することになり、あまりに速度が低下してプログラムを続けても終わる見込みがなくなった。 プログラムを改良するのが正攻法なのだが、メモリを圧縮する仕組みがあったことを思い出して試してみた。
zram-config
Ubuntu 12.10 だと zram-config をインストールするだけで、 RAM 上にデータを圧縮する swap を作成することができる。 インストール前に
free -m
で swap のサイズを見ておく。次に、
apt-get install zram-config
でインストールする。
free -m
とすると swap のサイズが増えているのがわかる。また、
dmesg
とすると
[13774.808923] zram: module is from the staging directory, the quality is unknown, you have been warned.
[13774.809364] zram: Creating 8 devices ...
[13774.850333] Adding 1026104k swap on /dev/zram0. Priority:5 extents:1 across:1026104k SS
[13774.853914] Adding 1026104k swap on /dev/zram1. Priority:5 extents:1 across:1026104k SS
[13774.857183] Adding 1026104k swap on /dev/zram2. Priority:5 extents:1 across:1026104k SS
[13774.860589] Adding 1026104k swap on /dev/zram3. Priority:5 extents:1 across:1026104k SS
[13774.864000] Adding 1026104k swap on /dev/zram4. Priority:5 extents:1 across:1026104k SS
[13774.867564] Adding 1026104k swap on /dev/zram5. Priority:5 extents:1 across:1026104k SS
[13774.870944] Adding 1026104k swap on /dev/zram6. Priority:5 extents:1 across:1026104k SS
[13774.874442] Adding 1026104k swap on /dev/zram7. Priority:5 extents:1 across:1026104k SS
のようになっていて /dev/zram? が追加されたことがわかる。
サイズについて
swap として使用できるメモリのサイズをどれくらいにするのかについては なにも設定をしなかったが、うまくやってくれるようだ。 CPU の数とメモリの全容量から計算して割り当てている。 /etc/init/zram-config.conf を見るとわかる。
swap の優先度
HDD にも swap があるので /dev/zram? とどちらが利用されるのか心配になったので調べてみた。
swapon -s
とすると swap の優先度が表示される。 /dev/zram? の優先度は 5 で HDD 上の swap の優先度は 0 だったので /dev/zram? の方が優先的に利用される。