JF Linux Kernel 2.6 Documentation: /usr/src/linux/Documentation/nmi_watchdog.txt

nmi_watchdog.txt

NMI ウォッチドッグ [プレインテキスト版]



[NMI ウォッチドッグは x86 および x86-64 アーキテクチャでのみ使用できます]

あなたのシステムは予期せずにロックアップしますか? キーボードからの入力に
応答しない、イライラするような完全なハード・ロックアップですか? このような
ロックアップのデバッグ支援を受けたいですか? 全てが「はい」なら、この文書は
きっと、あなたのためのものです。

多くの x86/x86-64 ハードウェアには、'ウォッチドッグ NMI 割込み' の生成を
有効にする機能があります (NMI: Non Maskable Interrupt. 他の場所でシステムが
ハード・ロックアップしてしまったとしても実行されます)。これは、ハード・カー
ネル・ロックアップをデバッグするのに使用できます。周期的な NMI 割込みの実行
により、カーネルは CPU のいずれかがロックアップしたかどうか監視でき、ロック
アップしたならデバッグメッセージを出力できます。

NMI ウォッチドッグを使うためには、カーネルによる APIC サポートが必要です。
SMP カーネルでは、APIC サポートは自動的に組み込まれます。UP の場合は、
カーネル設定において、CONFIG_X86_UP_APIC (Processor type and features ->
Local APIC support on uniprocessors) もしくは CONFIG_X86_UP_IOAPIC
(Processor type and features -> IO-APIC support on uniprocessors) を有効に
します。CONFIG_X86_UP_APIC は IO-APIC を持たないユニプロセッサ・マシン用で、
CONFIG_X86_UP_IOAPIC は IO-APIC を持つユニプロセッサ・マシン用です。[注意:
あるカーネルデバッグオプション、例えば Kernel Stack Meter や Kernel Tracer
は、暗黙的に NMI ウォッチドッグを無効にします]

x86-64 では、必要な APIC は常に組み込まれ、NMI ウォッチドッグは常に I/O-APIC
モード (nmi_watchdog=1) で有効にされます。現在のところ、x86-64 では、ローカル
APIC モード (nmi_watchdog=2) は動きません。

ローカル APIC (nmi_watchdog=2) を使用する場合、一番目のパフォーマンスレジスタ
が必要となるので、当レジスタを他の目的 (例えば、高精度パフォーマンス・プロ
ファイリングなど) では使用できません。しかしながら、少なくとも oprofile と
perfctr ドライバは、ローカル APIC NMI ウォッチドッグを自動的に無効にします。

実際に NMI ウォッチドッグを有効にするには、'nmi_watchdog=N' ブートオプション
を使用してください。例えば、関連する lilo.conf エントリは次のようになります。

        append="nmi_watchdog=1"

SMP マシンおよび IO-APIC のある UP マシンでは、nmi_watchdog=1 を用います。
IO-APIC のない UP マシンでは、nmi_watchdog=2 を用いますが、いくつかのプロ
セッサ種別でしか動作しません。不明な場合、nmi_watchdog=1 でブートし、
/proc/interrupts 内の NMI カウントを調べてください - カウントが 0 なら、
nmi_watchdog=2 で再起動し、NMI カウントを調べてください。それが 0 のまま
なら、不具合として記録します。たぶん使用しているプロセッサには NMI コード
の追加が必要です。

ロックアップは次のシナリオです - システムの CPU のいずれかが周期的なロー
カルタイマー割込みを 5 秒以上実行しなければ、NMI ハンドラは oops を生成し
プロセスを終了 (kill) します。この‘制御によるクラッシュ’(および結果として
生成されるカーネルメッセージ) はロックアップのデバッグに利用できます。した
がって、ロックアップの発生時は常に、5 秒の待ちと、oops が自動的に発生します。
カーネルがメッセージを出力しない場合、システムが非常に深刻なクラッシュをし
(例えば、ハードウェア障害)、NMI 割込みの受入れさえできなくなったか、クラッ
シュがカーネルのメッセージ出力をできなくしたかのいずれかです。

注記:2.4.2-ac18 から、NMI-oopser はデフォルトでは無効なので、ブート時の
パラメータで有効にしなければなりません。2.4.2-ac18 より前の NMI-oopser は
x86 SMP ボックス上で無条件に有効になります。

[バグ報告、提案、パッチを気軽に Ingo Molnar <mingo@redhat.com> もしくは
 Linux SMP メーリングリスト <linux-smp@vger.kernel.org> に送ってください。]

------------------------------------------------------------
翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ >
最終更新: 2004/05/04
翻訳者:   野本 浩一 <hng(a)ps.ksky.ne.jp>
翻訳更新: 川崎 貴彦 <takahiko(a)hakubi.co.jp>
校正:     IKEDA Katsumi <ikedak(a)rg8.so-net.ne.jp>

Linux カーネル 2.6 付属文書一覧へ戻る