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に通知されて処理されるのか、などシステム構成によって異なります。
コメント