こんにちは。
VMDirectPath I/O についてです。
最近VMware KB で、既定値が変わった記述があったり、
状況の変化があったので記事したいと思います。
みなさまご存知の通り、VMDirectPath I/O とは、
サーバーに搭載しているHBA(PCI)などを 仮想マシンに直接割り当てることができる機能です。
細かいアーキテクチャは一切排除したイメージ図です。
VMDirectPath I/Oは、仮想マシンに物理的なハードウェアを連携させる機能なので、
実際に動作保証するのか、それとも保証しないのか、については、
ハードウェアベンダーに依存してしまいます。
要件についてはVMware KB に記載がありますので、ご覧頂ければと思います。
VMware vSphere VMDirectPath I/O:プラットフォームとデバイスの要件 (2144754) | VMware KB
要件に該当しないものをESXiから仮想マシン VMDirectPath I/Oを使ってみせた場合、
案外使えることが多いですが、動作保証しない(いわゆるNot Supported)な構成になります。
動作保証しないものを VMDirectPath I/Oを使って仮想マシンに接続した際に、
何が起こりうるかというと、仮想マシンの停止やESXiのPSOD(Parple Screen of Death)が起こることがあります。
様々なWeb上の情報では、VMDirectPath I/Oは直接仮想マシンに接続されるような言い回しになっていますが、
実際にはESXiが少なからず仲介して、仮想マシンにPCIデバイスを接続させています。
多くのハードウェア割り込み処理を行いながら、仮想マシンに対してデバイスを提供しているので、予期せぬハードウェア割り込みが行われたりするとPSODになってしまったりします。
そこでまずご紹介したいのが、VMware KB 2079988 です。
あまり詳しくないのですが、ESXi/ESX 4.1 以降のバージョンでは、割り込み再マッピング コード(Interrupt Remapping)というものが導入されたらしく、
この機能によって、VMDirectPath I/O が動作するようです。
この割り込み再マッピングの動作がイマイチらしく、VMware KB では以下の症状が出ることを紹介しています。
- ESXi ホストが応答しない
- 仮想マシンが応答しない
- HBA が応答を停止する
- 他の PCI デバイスが応答を停止する
- vCenter Server で「不明デバイスの不正なパス (Degraded path for an Unknown Device)」というアラートが発生する場合がある
- HBA がドライバへの応答を停止する少し前に、
VMkernel
またはmessages
ログに無効なベクトルのエラーが表示される場合がある。エラーは次のようになります。
対処は、割り込み再マッピングの無効化だそうです。
# esxcli system settings kernel set --setting=iovDisableIR -v TRUE
※ioDisableIR というのをTureにすることで割り込み再マッピングを無効化できます。
無効化を有効化するというなんともややこしいパラメータ名......
ここまででお気づきの方もいらっしゃるかもしれませんが、
割り込み再マッピングによって VMDirectPath I/O が実装されているので、
もし、上記の事象が発生したときに、対処である割り込み再マッピングの無効化すると、
VMDirectPath I/O を利用中の環境だと動作しなくなってしまいます。
何ヶ月か前のVMware KB 2079988にはこんな記載があったのですが、現在では削除されていました。
================
注: 割り込み再マッピングを無効にすると、VMDirectPath I/O パススルー機能も無効になります。
================
続いて、VMware KB 2147325 のご紹介です。
ざっくりとした内容は、VMDirectPath I/O 機能で利用する割り込み再マッピングが原因でPSODになるというVMware KBです。
対処を一部抜粋します。
Resolution
まずはじめに、各サーバーベンダーに確認することやBIOSをアップデートすることが記載されています。
VMware ESXi 5.5.0 build-2068190
~ # esxcli system settings kernel list -o iovDisableIR
Name Type Description Configured Runtime Default
------------ ---- --------------------------------------- ---------- ------- -------
iovDisableIR Bool Disable Interrrupt Routing in the IOMMU FALSE FALSE FALSE
VMware ESXi 6.5.0 build-5310538
[root@xxxxx:~] esxcli system settings kernel list -o iovDisableIR
Name Type Description Configured Runtime Default
------------ ---- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------- ------- -------
iovDisableIR Bool Disable Interrrupt Remapping in the IOMMU. Not applicable for platforms pre-configured by firmware to use x2APIC (e.g., platforms with > 256 logical processors); for these interrupt remapping is always enabled. FALSE FALSE FALSE