Raspberry Pi に搭載されている RAM は、その一部を GPU へ割り当てる必要が有るものの、サーバ用途のような ヘッドレス 運用であれば、それほど多くを割り当てなくとも良さそう。現行モデルと比べ遥かに少ない512MBしか搭載されていない初代 Raspberry Pi を例に、 GPU への メモリ 割り当て量の設定方法と、動作に支障のない最小値を探ってみます。
raspi-configを使ったGPUメモリ値の設定
GPUメモリとして割当てる容量値は、ターミナルから管理者権限でraspi-configを使うことで、シンプルなGUIによる対話形式で設定することが可能です。
$ apt search raspi-config Sorting... Done Full Text Search... Done raspi-config/oldstable,now 20210212 all [installed] Raspberry Pi configuration tool rc-gui/oldstable 1.46 armhf raspi-config GUI $ sudo raspi-config
ツールトップから、「4 Performance Options」に入ります。
オーバークロックの設定なども出来るこのPerformance Optionの中で、「P2 GPU Memory」を選択します。
GPUへ割り当てたいメモリ値をMB単位で入力します。おそらくOSとそのバージョンによって既定値はさまざまとは思いますが、このシステムでは64MBになっていました。
ツールトップまで戻って終了させると再起動を促され、次回再起動後に設定値が反映されます。ターミナルから次の要領で、現在のGPUメモリ割当て値を確認することができます。
$ vcgencmd get_mem gpu gpu=32M
/boot/config.txtを直接編集して設定
実はraspi-configが編集しているのは、Raspberry Piが起動時にまず読み込む/boot/config.txtと言うテキストファイルです。管理者権限でテキストエディタから、変数名や設定値について分かっていれば直接編集した方が早いかもしれません。
$ sudo nano /boot/config.txt gpu_mem=16
編集保存後、再起動することで新しい設定値がシステムに反映されます。
基本的なヘッドレス運用で支障のない最小メモリ値は
ディスプレイに接続しないヘッドレス運用では、GPUメモリを可能な限り小さく抑え、より多くをシステムリソースへ活かしたいものです。そこでまずは、上述のraspi-configで設定値の例に挙がっている中から最小の16MBに設定してみました。
するとシステムは全く問題なく稼働するのですが、
dmesg
コマンドで起動時のログを確認すると、見慣れないエントリが頻繁に挙がっています。
[Mon Dec 5 13:32:47 2021] bcm2835_mmal_vchiq: Failed to open VCHI service connection (status=-1)
調べてみると、Raspberry PiファームウェアのGitHubにおいてこのメッセージのことが挙がっていて、その中のこちらで解説されていました。
曰く、Raspberry Piは32MB以上のGPUメモリで初めて、GPUが
start.elf
をフル仕様で読み、GPUメモリがそれに満たない場合は一部機能をオミットするよう振る舞うとのことで、上記メッセージはそのオミットされた機能によるものでした。
試しにGPUメモリの値を32MBに設定して再起動すると、確かに起動時のログからこのメッセージは消えたので、GPUメモリの最小割当て値は32MBということになると判断しました。
もちろん、MIPI CSI-2を通じてカメラを接続したり、ffmpegを使った画像処理を走らせたいといった用途では、適宜割当てを増やす必要がありそうですが、その辺りの検証はまた別の機会に。
投稿 ヘッドレス運用Raspberry PiのGPUメモリgpu_mem設定値 は Fun Scripting 2.0 に最初に表示されました。