30

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ウォッチドッグの。

4

2 に答える 2

9

答えはハードウェアによって異なります。

マスク不能割り込み (NMI) は、次の 2 つの方法でトリガーできます。1) カーネルが別の方法では中断できない停止状態に達したとき、および 2) ハードウェアによって (NMI ボタン​​を使用)。

たとえば、一部の Dell サーバーの前面には、内側にジグザグの線が入った小さな円が表示されます。これは NMI 記号です。近くに穴があります。割り込みをトリガーするピンを挿入します。カーネルがそれをサポートするように構築されている場合、カーネル パニック トレースがコンソールにダンプされ、システムが再起動されます。

これは非常に速く発生する可能性があります。そのため、出力をファイルに保存するためのコンソールが接続されていない場合は、再起動だけのように見えるかもしれません。

于 2013-07-18T23:17:14.203 に答える
3

私が知っているように、nmi_watchdog は中断不可能なハングに対してのみトリガーされます。Google でコード例を見つけました: http://oslearn.blogspot.in/2011/04/use-nmi-watchdog.html

デッドロックが中断できない場合は、sysRq を有効にしてトレース (Alt-printscreen-t) またはクラッシュ (Alt-printscreen-c) をトリガーして、詳細情報を取得できます。

于 2012-04-16T02:19:30.470 に答える