[Linux] user watchdog を使う

Linux には user watchdog が備わっていて、ドライバが有効であれば利用することができます。watchdog とは、システムが何らかの障害で応答できなくなってしまったときに、強制的に止めたりリセットを掛けて復帰させるための仕組みです。

デバイスファイルに空("V"でない任意文字) を書き込むと watchdog timer が起動し、カウントし始めます。

# echo "" > /dev/watchdog

デバイスファイルに "V" を書き込むと watchdog timer は停止します。

# echo "V" > /dev/watchdog

watchdog timer はダウンカウンタで、timeout 値と現在のカウンタ値を見ることができます。

# cat /sys/class/watchdog/max_timeout
0
# cat /sys/class/watchdog/current_count
0

kernel では内部で watchdog daemon が動いていて、ある一定間隔で watchdog がリセットしないように監視し、"ping" 動作により watchdog タイマを初期値に戻しています。つまり、この "ping" が何らかの問題で送られなくなったときに、watchdog が作動してリセットを実施します。

watchdog へのパラメータは以下のファイルで設定します。timeout 値はこのファイルで指定します。

/etc/watchdog.conf

watchdog を使うためのユーザプログラムがいくつか用意されています。

"wd_identify" はこのシステムで使用する watchdog 名(ドライバ名)を表示します。

"wd_keepalive" は一定間隔で watchdog に "ping" を投げます。これによりダウンカウンタは定期的にリセットされ、timeout は発生しません。この動作は kernel timer で行われるため、kernel が何らかの原因で動かなくなったときに ping が投げられなくなり、watchdog の timeout でリセットします。

watchdog デバイスはリセットを発生しますが、実際にリセットが掛かるのか、他のsub-CPUに通知されて処理されるのか、などシステム構成によって異なります。


コメント

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