CPU関連のハードウェア関連の設定をします。気休め程度かもしれませんが、ちょっとだけ役立つかもです。
目次
CPUの設定に関して
CPUでは以下の設定を行います。
・CPUの温度制限
・ハードウェアWatchdog
CPUの温度制限
Raspberry pi のCPUには動作限界温度が設定されています。
規定値では85度となっており、5度手前の80度からスロットリング(クロックダウン)が始まり、85度でCPUが止まることされています。
ただ、CPUのセンサーで85度ということは全体では相当に厚くなっているということなので、もう少し低い温度となるように動作限界温度を設定したいと思います。
CPUの動作限界温度の設定
ここでは、動作限界温度を65度に設定します。
設定ファイルは /boot/config.txt で、ここに temp_limit=65 を追記します。
# #/boot/config.txt # [all] #dtoverlay=vc4-fkms-v3d #for CPU tempalature temp_limit=65
この場合、60度からスロットリングが始まりCPUクロックが標準の1.2GHzから段階的に600MHzまで低速化します。
CPU情報の確認
CPU情報の確認方法は以下になります。
・現在のCPUクロック
vcgencmd measure_clock arm
・現在の温度
vcgencmd measure_temp
ハードウェアWatchdog
Raspberry Pi(SoCであるBCM2835/BCM2836/BCM2837)とOSのRaspbian には、Watchdog Timer(ウォッチドッグタイマーと呼ばれる機構が入っています。
*Raspberry Pi 3B+ 以前のものでは動作すると考えられますが、Raspberry Pi 4 Model B は、BCM2711 を使っているので確認が必要です。
Watchdog(ウォッチドッグタイマー)とは
Watchdog(ウォッチドッグタイマー)とは、簡単に言うと”システムハングを検出して自動で再起動する” ものとなります。
動作のおおまかなの流れとしては、以下になります。
①正常動作中はsystemdに設定された間隔でハートビート信号を送信する
②SoCは設定した間隔でハートビート信号が来ることを期待している
③SoCはハートビート信号を受信すれば正常動作と判断する
④システムがハングアップするとsystemdからのハートビート信号が途絶える
⑤SoCは設定した間隔でハートビート信号が来ないためハングアップと判断してシステムを再起動する
Watchdog(ウォッチドッグタイマー)の設定
①Watchdogの有効化
設定ファイルは /boot/config.txt で、ここにWatchdogを有効にする設定 dtparam=watchdog=on を追加します。
# #/boot/config.txt # [all] #dtoverlay=vc4-fkms-v3d #for watshdog dtparam=watchdog=on
②カーネルモジュールの設定
新規に /etc/modprobe.d/bcm2835-wdt.conf ファイルを作成し、以下の内容を追記します。
# # /etc/modprobe.d/bcm2835-wdt.conf # #30秒のハートビートをWatchdogが期待する options bcm2835_wdt heartbeat=30 nowayout=0
この場合、SoCは30秒間隔のハートビートを期待するというものとなります。もし、前回のハートビートから30秒以内に次のハートビートが来ない場合はシステムハングと判断します。
③ハートビートを送信の設定
ハートビートの送信機能は systemd が持っています。初期設定では無効になっていますのでこれを有効にします。
設定ファイルは /boot/config.txt で、ここにハートビートの送信間隔を設定します。
コメントアウトされている #RuntimeWatchdogSec=0 を探して。その下に RuntimeWatchdogSec=15 を追加します。
# # /boot/config.txt # [Manager] #LogLevel=info #LogTarget=journal-or-kmsg #LogColor=yes #LogLocation=no #DumpCore=yes #ShowStatus=yes #CrashChangeVT=no #CrashShell=no #CrashReboot=no #CtrlAltDelBurstAction=reboot-force #CPUAffinity=1 2 #RuntimeWatchdogSec=0 RuntimeWatchdogSec=15
この場合、 systemd は15秒間隔でハートビートを送信します。SoCのシステムハングの条件(前回のハートビートから30秒以内に次のハートビートが来ない)を考えて、ハートビートの周期は15秒としています。
④再起動
設定を有効にするために再起動します。
④動作確認
以下で設定の確認をします。
・Watchdogが有効
$ dmesg | grep bcm2835-wdt [ 0.820833] bcm2835-wdt bcm2835-wdt: Broadcom BCM2835 watchdog timer
・再起動のテスト
実際に再起動ができるかどうかのテストをします。
フォークボムコマンド(フォーク爆弾)を使いシステムの内部で新しいプロセスをどんどん増殖させ、その結果としてシステムハングをおコアします。
:(){ :|:& };:
このコマンドを入力すると、システムの動作は徐々に遅くなっていき、最終的にコマンド入力に反応しなくなります。環境によりますが、2分程度で経システムは再起動されます。