🍓
RO化したRPi3A+でアプリを快適に動かす方法
メモリが足りない
RO化したRPi3A+はデフォルトではアプリが利用できるメモリは180MB程度になってしまいヘビーなアプリケーションを動かすには少し不足しがちです。
Raspberry pi OS 64bit Liteでofflineかつheadlessで動かすことを前提とします。
Before
吊るしでRO化 -> 利用可能領域:181MB
pi@rpi:~ $ free -h
total used free shared buff/cache available
Mem: 419Mi 63Mi 93Mi 121Mi 262Mi 181Mi
Swap: 0B 0B 0B
pi@rpi:~ $ df -h
Filesystem Size Used Avail Use% Mounted on
~
overlay 210M 122M 89M 58% /
~
After
対処してRO化 -> 利用可能領域:339MB
pi@rpi:~ $ free -h
total used free shared buff/cache available
Mem: 467Mi 60Mi 108Mi 13Mi 298Mi 339Mi
Swap: 0B 0B 0B
pi@rpi:~ $ df -h
Filesystem Size Used Avail Use% Mounted on
~
overlay 100M 13M 88M 13% /
~
対処
overlay領域削減
まず、overlay分として確保される領域を減らします。デフォルトでは総メモリ量の半分が割り当てられますが、RO化するようなアプリでは書き込み領域はそこまで必要ではないので100MBに減らします。
/usr/bin/raspi-config
- mount -t tmpfs tmpfs /upper
+ mount -t tmpfs -o size=100M tmpfs /upper
swap無効化
swapを無効化しないと、RO化した際のoverlay領域がswap file(/var/swap)に占有されてしまいます。デフォルトでは100MBに設定されているので、貴重なoverlay領域が100MB無駄になってしまいます。
sudo sed -i -e "s/^CONF_SWAPSIZE=.*/CONF_SWAPSIZE=0/g" /etc/dphys-swapfile
gpuメモリ削減
headless運用においてはgpuメモリは必要ないので、限界まで減らします。
sudo raspi-config nonint do_memory_split 16
不要サービス停止
アプリによって変動しますので、適宜停止するサービスを選定してください。
sudo systemctl disable rsyslog.service
sudo systemctl disable polkit.service
sudo systemctl disable ModemManager.service
RO化
sudo raspi-config nonint enable_overlayfs
sudo systemctl reboot
結論
このようにすれば、RPi3A+の利用可能メモリが181MB->339MBに増え、Overlayとしての書き込み可能領域も89M->88Mと同容量を確保出来ます。
参考
Discussion