VMware / Microsoft 製品はこう使う。

好きなことを好きに描く.

例外はありそうだがVMDirectPath I/O はデフォルトで無効になっている(ESXi 5.5 p10, 6.0 p04, 6.0 U3 and 6.5)

こんにちは。

 

VMDirectPath I/O についてです。

最近VMware KB で、既定値が変わった記述があったり、

状況の変化があったので記事したいと思います。

 

みなさまご存知の通り、VMDirectPath I/O とは、

サーバーに搭載しているHBA(PCI)などを 仮想マシンに直接割り当てることができる機能です。

 

細かいアーキテクチャは一切排除したイメージ図です。

f:id:japan-vmware:20170611012655p:plain

 

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 6.0.x、ESXi 5.x、ESXi/ESX 4.1 で vHBA および他の PCI デバイスが応答を停止する場合がある (2079988) | VMware KB

 

あまり詳しくないのですが、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 のご紹介です。

 

ESXi host fails with a diagnostic screen due to an Intel® Virtualization Technology Erratum (2147325) | VMware KB

 

ざっくりとした内容は、VMDirectPath I/O 機能で利用する割り込み再マッピングが原因でPSODになるというVMware KBです。

 

対処を一部抜粋します。

Resolution

VMWare recommends contacting the hardware manufacturer for updated BIOS or possible workarounds.
 
Note: A prior version of this KB article recommended that customers experiencing the problem described above work around it by configuring ESXi to disable the Intel® VT-d interrupt remapper (setting boot option iovDisableIR=FALSE and rebooting). VMware ESXi 5.5 p10, 6.0 p04, 6.0 U3 and 6.5 by default disable the Intel® VT-d interrupt remapper for this purpose.

まずはじめに、各サーバーベンダーに確認することやBIOSをアップデートすることが記載されています。
 
そして注目すべき点はこの部分です。
「VMware ESXi 5.5 p10, 6.0 p04, 6.0 U3 and 6.5 by default disable the Intel® VT-d interrupt remapper for this purpose.」
非常に重要なことが記載されています…。
以下のESXiからは割り込み再マッピングがデフォルトで無効化されていると記載されています...
 
ESXi5.5 patch10
ESXi6.0 patch4
ESXi6.0 Update3
ESXi6.5 GA 
 
 
OSとしてのデフォルト値について、まさかのVMware KB の一部に記載されています。
もし、今後、VMDirectPath I/Oを利用する環境を構築するときは、割り込み再マッピングを有効化しなければ、仮想マシンにデバイスをうまくパススルーできないと思いますので、注意が必要です。
 
 
私は試してはいませんが、既にVMDirectPath I/Oを利用している環境に対して、
ESXiのバージョンアップを行う際にも注意が必要です。
 
 
理由は、既定値が変更されているので、現在使用中の環境に対してパッチを適用すると、 iovDisableIR が false から true に変更されてしまう可能性があり、
もし、trueに変更されてしまうと、VMDirectPath I/Oがうまく動作しないと思います。
 
ということで、既定値をコマンドで見てみました。
 
■ESXi5.5
~ # vmware -v
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 KB のとおりです。
 
■ESXi6.5d 
[root@xxxxx:~] vmware -v
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
 
 
なにやら、コマンド結果の表示が全く異なっています。
 
しかし、「iovDisableIR Bool Disable Interrrupt Remapping in the IOMMU.」と記載されているので、無効ではあるようです。
 
また「Not applicable for platforms pre-configured by firmware to use」と記載があるため、使用するファームウェアによって事前に構成されている場合は適用されないという記載もあるので、VMware KB の記述は正しいということになるかと思います。
 
 
長々と記載しましたが、私自身、時間が経つと確実に忘れそうな
内容だったので、覚えている間に記事にして備忘録代わりにしました。
 
 
オワリ