ウォッチドッグタイマーの設定方法

ドライバーを含むアプリケーションが暴走していないか確認する為、ウォッチドッグタイマーでそのチェックをします。既定では無効化されてるので、有効化する方法を案内します。

ウォッチドッグタイマーの概要

ウォッチドッグタイマーの概要は

いつも、実行優先度の一番低いアイドルループが、一定間隔でウォッチドッグタイマーをリセットしています。

しかし、実行優先度の高いアプリケーションがずーーーーーっとループし続けると、実行優先度の低いアイドルループが動かず、ウォッチドッグタイマーがリセットされません。

ついにウォッチドッグタイマーがタイムアウトしてCPUがリセットされます。

CPUがリセットされることで、サーバが再起動し、正常に稼働し始めます。

ウォッチドッグタイマー(WDT)の有効化

ハードウェアのWDTを有効に

$ sudo vi /boot/firmware/config.txt
ももぶろ
ももぶろ

viの超簡単な使い方は、ここを見てね

ファイルに下記行を追加します。

dtparam=watchdog=on

既に定義されていれば、上記内容に変更してください。

bcm2835-wdt(Broadcom)の設定

$ sudo vi /etc/modprobe.d/bcm2835-wdt.conf
ももぶろ
ももぶろ

viの超簡単な使い方は、ここを見てね

ファイルに、「5秒間WDTのリセットが無ければCPUをリセット」

options bcm2835_wdt heartbeat=5 nowayout=0

を追加します。

既に定義されていれば、上記内容に変更してください。

Heartbeat間隔をsystemdに設定

$ sudo vi /etc/systemd/system.conf
ももぶろ
ももぶろ

viの超簡単な使い方は、ここを見てね

ファイルに「2秒に間隔でWDTをリセット」

RuntimeWatchdogSec=2

を追加します。

既に定義されていれば、上記内容に変更してください。

ここでreboot

変更を反映する為ここで再起動します。

$ sudo reboot

WDTの有効化確認

$ dmesg | grep  bcm2835-wdt
[    1.897839] bcm2835-wdt bcm2835-wdt: Broadcom BCM2835 watchdog timer

Heartbeat間隔の設定を確認

$ dmesg | grep systemd | grep watchdog
[    9.050942] systemd[1]: Using hardware watchdog 'Broadcom BCM2835 Watchdog timer', version 0, device /dev/watchdog0

再起動を確認

この操作で、Kernelがパニックになります。

$ sudo su
# echo c > /proc/sysrq-trigger
ももぶろ
ももぶろ

この後Raspberry Pi4が再起動すれば大丈夫です。お疲れ様です。

タイトルとURLをコピーしました