VMkernel とは
VMkernel は、ESX のオペレーティング システム コアです。カーネルはリソースのスケジュールとデバイスの I/O を処理します。デバイスの I/O は、VMware ネットワークおよびストレージ スタックによって処理されます。これらのスタックは、仮想ファイル システム、ネットワーク デバイス、および物理デバイスを制御するデバイス ドライバ間のレイヤーとして機能します。
パープルスクリーンの解析
VMkernel でエラーが発生している場合、エラーがパープル スクリーンに表示されます。パープル スクリーンは次のように表示されます。
VMware ESX Server [Releasebuild-98103
PCPU 1 locked up. Failed to ack TLB invalidate.
frame=0x3a37d98 ip=0x625e94 cr2=0x0 cr3=0x40c66000 cr4=0x16c
es=0xffffffff ds=0xffffffff fs=0xffffffff gs=0xffffffff
eax=0xffffffff ebx=0xffffffff ecx=0xffffffff edx=0xffffffff
ebp=0x3a37ef4 esi=0xffffffff edi=0xffffffff err=-1 eflags=0xffffffff
*0:1037/helper1-4 1:1107/vmm0:Fagi 2:1121/vmware-vm 3:1122/mks:Franc
0x3a37ef4:[0x625e94]Panic+0x17 stack: 0x833ab4, 0x3a37f10, 0x3a37f48
0x3a37f04:[0x625e94]Panic+0x17 stack: 0x833ab4, 0x1, 0x14a03a0
0x3a37f48:[0x64bfa4]TLBDoInvalidate+0x38f stack: 0x3a37f54, 0x40, 0x2
0x3a37f70:[0x66da4d]XMapForceFlush+0x64 stack: 0x0, 0x4d3a, 0x0
0x3a37fac:[0x652b8b]helpFunc+0x2d2 stack: 0x1, 0x14a4580, 0x0
0x3a37ffc:[0x750902]CpuSched_StartWorld+0x109 stack: 0x0, 0x0, 0x0
0x3a38000:[0x0]blk_dev+0xfd76461f stack: 0x0, 0x0, 0x0
VMK uptime: 7:05:43:45.014 TSC: 1751259712918392
Starting coredump to disk Starting coredump to disk Dumping using slot 1 of 1...using slot 1 of 1... log
次に、前述のパープル スクリーンの各セクションをそれぞれ詳しく説明します。
- 製品とビルド:
VMware ESX Server [Releasebuild-98103]
パープル スクリーンにあるこのセクションには、エラーが発生している製品およびビルドが表示されます。この例では、製品は VMware ESX サーバ ビルド 98103 です。
- エラー メッセージ:
PCPU 1 locked up. Failed to ack TLB invalidate
パープル スクリーンにあるこのセクションには、報告されたエラー メッセージが表示されます。報告されるエラー メッセージの数には制限があります。これらのエラー メッセージについては、あとで説明します。
- CPU レジスタ:
frame=0x3a37d98 ip=0x625e94 cr2=0x0 cr3=0x40c66000 cr4=0x16c
es=0xffffffff ds=0xffffffff fs=0xffffffff gs=0xffffffff
eax=0xffffffff ebx=0xffffffff ecx=0xffffffff edx=0xffffffff
ebp=0x3a37ef4 esi=0xffffffff edi=0xffffffff err=-1 eflags=0xffffffff
これらは、エラー時の物理 CPU レジスタ内の値です。これらのレジスタの情報は、VMkernel エラーによって大きく異なることがあります。これらのレジスタは、VMkernel エラーのコア ダンプをデバッグするときに、内部でのみ使用できます。これらのレジスタの詳細については、Intel 社の場合は http://www.intel.com/products/processor/manuals/、AMD 社の場合は http://support.amd.com/us/psearch/Pages/psearch.aspx を参照してください。AMD 社のサイトで、使用しているプロセッサ タイプに該当するアーキテクチャ プログラマ用マニュアルを検索してください。
注:前述のリンクは 2011 年 6 月 13 日時点で有効なリンクです。リンクが切れている場合は、記事に関するフィードバックをお寄せください。VMware の担当者が必要に応じて記事を更新します。
- 物理 CPU:
*0:1037/helper1-4 1:1107/vmm0:Fagi 2:1121/vmware-vm 3:1122/mks:Franc
パープル スクリーンにあるこのセクションには、VMkernel エラー時に命令を実行していた物理 CPU が表示されます。この例の 0 の横にある * は、障害時に物理 CPU 0 が処理を実行していたことを示しています。ESX の新しいバージョンでは、* の代わりに文字 CPU が前に付加されます。たとえば、新しいバージョンの VMware ESX で前述と同じエラーが発生した場合、この行は次のように表示されます。
CPU0:1037/helper1-4 cpu1:1107/vmm0:Fagi cpu2:1121/vmware-vm cpu3:1122/mks:Franc.
パープル スクリーンにあるこのセクションには、エラー時に CPU で実行中であったワールド (プロセス) についても表示されます。前述の例では、実行中であったユーザーのワールドは 「helper1-4」 です。
注:プロセスの名前は表示されないことがあります。
- スタック トレース:
0x3a37ef4:[0x625e94]Panic+0x17 stack: 0x833ab4, 0x3a37f10, 0x3a37f48
0x3a37f04:[0x625e94]Panic+0x17 stack: 0x833ab4, 0x1, 0x14a03a0
0x3a37f48:[0x64bfa4]TLBDoInvalidate+0x38f stack: 0x3a37f54, 0x40, 0x2
0x3a37f70:[0x66da4d]XMapForceFlush+0x64 stack: 0x0, 0x4d3a, 0x0
0x3a37fac:[0x652b8b]helpFunc+0x2d2 stack: 0x1, 0x14a4580, 0x0
0x3a37ffc:[0x750902]CpuSched_StartWorld+0x109 stack: 0x0, 0x0, 0x0
0x3a38000:[0x0]blk_dev+0xfd76461f stack: 0x0, 0x0, 0x0
このスタックは、エラー時に VMkernel が処理していた内容を示します。この例では、メモリのページ テーブル (TLB) をクリアしようとしていました。この情報は、エラー時のカーネルの動作を評価するといった、パープル スクリーンの診断には不可欠です。
- アップタイム:
VMK uptime: 7:05:43:45.014 TSC: 1751259712918392
このセクションには、サーバが最後に起動されてから経過した、サーバの稼働時間が表示されます。この例では、ESX ホストは 7 日間と 5 時間 43 分 45.014 秒稼働していました。TSC 値は、サーバが起動してから経過した CPU のクロック サイクル数です。
- コア ダンプ:
Starting coredump to disk Starting coredump to disk Dumping using slot 1 of 1...using slot 1 of 1... log
パープル スクリーンにあるこのセクションでは、VMkernel メモリの中身が vmkcore パーティションにコピーされていたことを示しています。
パープル スクリーンのエラー メッセージを使用した VMkernel エラーのトラブルシューティング
パープル スクリーンに生成された VMkernel エラー メッセージを使用して、問題の原因を特定できます。作成されるエラー メッセージの数には制限があります。既知の VMkernel エラー メッセージを次のリストに示します。
- タイプ:コンソールの Oops
エラー例: COS Error: Oops
概要:サービス コンソールの Oops が発生した場合、ESX ホストで障害が発生し、パープル スクリーンになることがあります。多くのパープル スクリーンとは異なり、これは VMkernel が原因ではありません。このエラーはサービス コンソールが原因で、Linux レベルで発生したものです。これらのパープル スクリーンには、Linux カーネルからの追加情報が含まれています。コンソールの Oops の詳細については、「Oops が発生したパープルス クリーンについて (1006802)」 を参照してください。
- タイプ:ハートビートの喪失
エラー例: Lost Heartbeat
概要:ESX の VMkernel とサービス コンソールの Linux カーネルは ESX 上で同時に稼働します。サービス コンソールの Linux カーネルは、vmnixhbd と呼ばれるプロセスを実行します。このプロセスは、メモリのページ割り当ておよび解放が実行できる間、VMkernel にハートビートを送信します。VMkernel は 30 分のタイムアウトになる前にハートビートを受信しなかった場合、COS パニック をトリガし、Lost Heartbeat と記されたパープル スクリーンを表示します。ハートビートの喪失の詳細については、「「ハートビート消失」による紫色の診断画面について (2101635)」 を参照してください。
- タイプ:アサート
エラー例: ASSERT bora/vmkernel/main/pframe_int.h:527
概要:アサート エラーはソフトウェア エラーです。これは、プログラムが基準としている仮定条件に関連しています。このタイプのパープル スクリーンは、主にソフトウェアの問題が原因です。アサート エラー メッセージの詳細については、「ASSERT および NOT_IMPLEMENTED が発生したパープル スクリーンについて (1019956)」 を参照してください。
- タイプ:未実装
エラー例: NOT_IMPLEMENTED /build/mts/release/bora-84374/bora/vmkernel/main/util.c:83
概要:コードで処理を行うよう設計されていない場合、未実装エラー メッセージが発生します。詳細については、「ASSERT および NOT_IMPLEMENTED が発生したパープルスクリーンについて (1019956)」 を参照してください。
- タイプ:スピン カウントの超過 / デッドロックの可能性
エラー例: Spin count exceeded (iplLock) - possible deadlock
概要:VMware ESX ホストは、スレッドがコードのクリティカル セクションを実行しようとするとき、パープル スクリーンでスピンカウントの超過とデッドロックの可能性を報告することがあります。スレッドはクリティカル セクションに入ろうとしていたため、コードを実行する前に、スピンロック処理を実施することによってロックに使用するミューテックスを取得する必要がありました。スレッドは、スピンロック処理中は継続してミューテックスを取得しようとしますが、ミューテックスの取得回数には制限があります。スピンカウンタの超過エラーの詳細については、「Spin count exceeded が発生したパープル スクリーンについて (1020105)」 を参照してください。
- タイプ:ack TLB の無効化の失敗
エラー例: PCPU 1 locked up. Failed to ack TLB invalidate.
概要:物理 CPU がメモリ ページ テーブルをクリアしようとするときに、物理 CPU に障害が発生します。詳細については、「Failed to ack TLB invalidate が発生したパープル スクリーンについて (1020214)」 を参照してください。
パープル スクリーンは例外処理でも表示されることがあります。例外ハンドラは、通常実行時のフローを変更するような状況 (ゼロ除算、ページ違反など) を処理するように設計されたコンピュータ ハードウェア メカニズムです。ハンドラによる追跡情報はないため、ユーザーはログを記録するか、シングル ステップ実行によるデバッグを行うことによって、ハンドラに障害が発生したかを特定する必要があります。一般的な例外を次のリストに示します。
- タイプ:例外 13 (一般保護違反)
エラー例: #GP Exception(13) in world 4130:helper13-0 @ 0x41803399e303
概要:一般保護違反 (例外 13) が発生するのは、要求されたページがそのページを要求したプログラムに属していないため、プログラム メモリにマッピングされていない場合、またはそのページでの読み取りまたは書き込み処理を実行する権限がプログラムにない場合のいずれかです。例外 13 (ページ違反) の詳細については、「例外 13 および例外 14 が発生したパープル スクリーンについて (1020181)」 を参照してください。
- タイプ:例外 14 (ページ違反)
エラー例: #PF Exception type 14 in world 136:helper0-0 @ 0x4a8e6e
概要:要求されたページがメモリに正常にロードされなかった場合にページ違反 (例外 14) が発生します。例外 14 (ページ違反) の詳細については、「例外 13 および例外 14 が発生したパープル スクリーンについて (1020181)」 を参照してください。
-
タイプ:例外 18 (マシン チェック例外)
エラー例:
Machine Check Exception: Unable to continue
エラー例:
Hardware (Machine) Error
概要:マシン チェック例外 (MCE) は、ハードウェアによって生成され、ホストから報告されます。MCE が発生した場合は、ハードウェア ベンダーに問い合わせてください。提示された情報を評価することにより、エラーを報告した特定のコンポーネントを見つけることができます。マシン チェック例外の詳細については、「
パープル スクリーン発生後のマシン チェック例外 (MCE) の出力の解読 (1005184)」 を参照してください。
VMware ESX または ESXi ホストで発生しているエラーが前述と同様であっても、エラー概要が一致しない場合は、
ナレッジ ベースでエラー メッセージおよびスタック トレース情報を検索してください。ナレッジ ベースに目的のエラーが掲載されていない場合は、VMware ESX ホストから診断情報を収集して、サポート リクエストを送信してください。詳細については、「
VMware 製品の診断情報の収集 (2038891)」 および 「
サポート リクエストの発行方法」 を参照してください。
詳細については、次を参照してください。
同一 ESX ホストで発生した複数の VMkernel エラーのパターン分析によるトラブルシューティング
同一の VMware ESX ホストでパープル スクリーンが複数表示された場合、複数のパープル スクリーンの一部を使用して、問題がハードウェアまたはソフトウェアに関連しているかを特定できます。これは、パープル スクリーンにある次のセクションのパターンを特定することにより行うことができます。
- エラー メッセージおよびスタック トレース:
- エラー メッセージとスタックが VMkernel エラーによって大きく異なる場合は、ソフトウェアで常に同じエラーが発生しているわけではないことを意味します。これは、ハードウェアの問題である可能性があります。ただし、これに限定されるわけではありません。
- エラー メッセージとスタックが複数の VMkernel エラーで常に同一の場合は、ソフトウェアで常に同じエラーが発生していることを意味します。これは、ソフトウェアの問題である可能性があります。ただし、これに限定されるわけではありません。
- 発生したエラー メッセージの詳細については、個々のエラー メッセージについて記載されている前述のセクションを参照してください。
- 物理 CPU:
- ワールド:
- ワールドの値が複数の VMkernel エラーで同一の場合は、同じワールドから命令を受信したときに VMkernel に障害が発生していることを意味します。これは、VMkernel エラーが発生する可能性のある命令をワールドが送信していることを示している可能性があります。ただし、これに限定されるわけではありません。