Linux NMI Watchdog に関する問題が発生しました。Linux NMI ウォッチドッグを使用して、OS のハングを検出して回復したいと考えています。そこで、grub.cfg に「nmi_watchdog=1」を追加します。そして、/proc/interruptを確認すると、NMI が 1 秒ごとにトリガーされました。しかし、モジュールをデッドロック (二重取得スピンロック) でロードした後、システムは完全にハングアップし、何も起こりません (決してパニックにならないでください!)。NMI ウォッチドッグが機能しなかったようです。
次に、Documentation/nmi_watchdog.txt を読みました。
ローカル APIC を使用する場合、生成される NMI 割り込みの頻度はシステムの負荷に依存することに注意してください。ローカル APIC NMI ウォッチドッグには、より適切なソースがなく、「cycles unhalted」イベントが使用されます。
" cycles unhalted " イベントとは何ですか?
それは追加しました:
ただし、システムが「hlt」プロセッサ命令以外でロックした場合、クロック ティックごとに「cycles unhalted」イベントが発生するため、すぐにウォッチドッグがトリガーされます...「hlt」でロックした場合はアウトです。幸運なことに、イベントはまったく発生せず、ウォッチドッグはトリガーされません。
プロセッサが「hlt」命令を実行すると、ウォッチドッグがトリガーされないように思われるので、「 Intel 64 and IA-32 Architectures Software Developer's Manual, Volumn 2A 」で「hlt」を検索すると、次のように説明されています。
命令の実行を停止し、プロセッサを HALT 状態にします。有効な割り込み (NMI および SMI を含む)、デバッグ例外、BINIT# 信号、INIT# 信号、または RESET# 信号が 実行を再開します。
それから私は迷っています...
私の質問は:
- Linux NMI ウォッチドッグはどのように機能しますか?
- 誰が NMI をトリガーしますか?
私のOSはUbuntu 10.04 LTS、Linux-2.6.32.21、CPU Pentium 4 Dual-core 3.20 GHzです。
NMI ウォッチドッグに関するソース コード全体を読みませんでした (時間がありません)。NMI ウォッチドッグがどのように機能するかを理解できなかった場合は、代わりにパフォーマンス監視カウンター割り込みとプロセッサ間割り込み(APIC によって提供される) を使用して NMI を送信します。 NMIウォッチドッグの。