Raspberry Pi 3B+でzramを用いてメモリ拡張をやってみた際のメモ
※ 当ページには【広告/PR】を含む場合があります。
2020/01/20
zramを用いれば、Raspberry Pi 3B+(以降ラズパイ)の1GBメモリを、物理的な手段で拡張することなしに、もっとメモリ大きくした感じにできるようです。
zram
公式の
The zram module creates RAM based block devices named /dev/zram<id> (<id> = 0, 1, …).
Pages written to these disks are compressed and stored in memory itself.
These disks allow very fast I/O and compression provides good amounts of memory savings.
と説明があります。
どうやらzramは
/dev/zram0
こんな素敵なzramですが、ラズパイで使うには初回には手動で立ち上げるしかありません。
またzramは、物理RAMが不足している場合に、LinuxカーネルがSSDなどのボリューム上にRAMとして機能させるブロック領域を割り当てる、仮想メモリ領域(ページファイル)の技術です。
基本的には物理RAMと比較して、アクセス速度とパフォーマンスはかなり低速なため、zramを乱用すると顕著なパフォーマンス低下を引き起こすようです。
さらに、勝手に仮想メモリ領域を書き換えたり、削除してしまうと、無用なエラーやシステム不安定に陥る危険性もあります。
...何を言いたいかといいますと、
zramをご利用される場合はユーザーの自己責任
zramは一つの救済措置であり、本当にメモリ不足が深刻なほどの事態になったら、おとなしくラズパイ4Bを購入を検討されたほうが賢明です。
zram.ko
まずはお手元のラズパイ環境で、
zram
$ ls /lib/modules/{カーネルで一番新しいバージョンのフォルダ}/kernel/drivers/block/zram
zram.ko
この
zram.ko
zram

…最新のカーネルに入ってればいいようですが、とりあえず歴代のカーネルにもちゃんと入っているのが確認できます。
デーモン起動スクリプト
次に手動で毎回起動するわけにもいかないので、起動用のデーモンスクリプトを作成しましょう。
このスクリプトは既に
以下のようにcurlで取得するか、
curl -O http://sstea.blog.jp/raspi/script/zram.sh
もしくはファイルを
zram.sh
#!/bin/sh
###BEGIN INIT INFO
#Provides: zram
#Required-Start:
#Required-Stop:
#Default-Start: 2 3 4 5
#Default-Stop: 0 1 6
###END INIT INFO
case "$1" in
start)
modprobe zram
echo lz4 > /sys/block/zram0/comp_algorithm
echo 256M > /sys/block/zram0/disksize
mkswap /dev/zram0
swapon -p 5 /dev/zram0
;;
stop)
swapoff /dev/zram0
sleep 1
modprobe -r zram
;;
*)
echo "Usage $0 start | stop "
;;
esac
このスクリプトのポイントは、
CONFIG_ZRAM_LZ4_COMPRESS
lz4
LZO圧縮
今回は
2GB(2048MB)
$ chmod 755 zram.sh
$ sudo mv zram.sh /etc/init.d/
$ sudo chkconfig --add zram.sh
終わったら、ラズパイを再起動しましょう。
動作確認
さて、最後にzramが有効になったか確認してみます。
まずは
zramctl
$ zramctl
NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lz4 2G 100M 45.2M 49.4M 4 [SWAP]
ちゃんと動作しているようです。
また
swapon
/var/swap
/dev/zram0
$ swapon -s
Filename Type Size Used Priority
/dev/zram0 partition 2097148 103168 5
/var/swap file 2097148 0 -2
おまけで、zramがきちんとブロックデバイスとして認識されているかを
lsblk
$ lsblk -p -l
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
/dev/sda 8:0 1 7.6G 0 disk /media/pi/UDISK
/dev/sdb 8:16 1 1.7G 1 disk /media/pi/011E-AF76
/dev/mmcblk0 179:0 0 14.9G 0 disk
/dev/mmcblk0p1 179:1 0 256M 0 part /boot
/dev/mmcblk0p2 179:2 0 14.6G 0 part /
/dev/zram0 254:0 0 2G 0 disk [SWAP]
これもしっかり
/dev/zram0
まとめ
さて、今回はラズパイへの
zram
特にラズパイ4Bが発売して市場に出回っている現在においては、もうzramを使ってまでメモリを拡張するという危険を犯してまで利用する必要性は次第に薄れていくように思います。
そんな今更感の漂う
zram
…まさに、「ご利用は計画的に」を身にしみて味わってしまいました(泣)。
最近ではラズパイ4Bにzramでメモリ拡張したらさぞや快適なのでは…という個人的な興味もあってストックも数個程度欲しくはあるのですが、しばらくは3B+を消化していくしかないといった事情もあります。
しかし、半導体業界の常なのか、はたまた中の人たちの大人の事情なのか、
これはもう
4B
5B