[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 もしくは Linux SMP メーリングリスト に送ってください。] ------------------------------------------------------------ 翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ > 最終更新: 2004/05/04 翻訳者: 野本 浩一 翻訳更新: 川崎 貴彦 校正: IKEDA Katsumi