VMware vSphere VMDirectPath I/O:プラットフォームとデバイスの要件
search cancel

VMware vSphere VMDirectPath I/O:プラットフォームとデバイスの要件

book

Article ID: 339969

calendar_today

Updated On:

Products

VMware vSphere ESXi

Issue/Introduction

この記事には、ハードウェア プラットフォームおよび PCI デバイスを vSphere VMDirectPath I/O(PCI パススルー)に適合させるための要件と推奨事項のリストが記載されています。

Symptoms:
免責事項:これは英文の記事「VMware vSphere VMDirectPath I/O: Requirements for Platforms and Devices (2142307)」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事で参照してください。


Environment

VMware vSphere ESXi 5.5
VMware vSphere ESXi 5.1
VMware vSphere ESXi 6.0

Resolution

VMDirectPath I/O について

VMDirectPath I/O を使用すると、ハードウェア PCI 機能を仮想マシンに直接割り当てることができるようになります。これにより、仮想マシンが PCI 機能にアクセスする際は ESXi ホストからの介入が最小になり、パフォーマンスが改善する可能性があります。これは、VMware View vDGA などの仮想デスクトップ向けのグラフィックス アクセラレーションなどのパフォーマンスが最重要視されるワークロードや、エンタープライズ クラスの通信装置に見られるような高速データ ネットワークなどに適しています。デバイス内の各仮想機能は個別の仮想マシンに割り当てることができるため、SR-IOV テクノロジをサポートする PCI デバイスとの組み合わせで最適に機能します。
VMDirectPath I/O は仮想マシンのパフォーマンスを改善できますが、これを有効にすると、サスペンドおよびレジューム、スナップショット、フォルト トレランス、および vMotion などの、vSphere のいくつかの重要な機能が利用できなくなります。詳細については、「VMware Documentation」を参照してください。


このドキュメントの使用方法

  • サーバ プラットフォームの OEM:使用するプラットフォームが「VMDirectPath I/O のプラットフォームの要件と推奨事項」のセクションにリストで記載されている要件を満たしていることを確認します。互換性のあるプラットフォームは、『VMware Compatibility Guide』に記載されています。
  • デバイス I/O のベンダー:使用するデバイスが、「デバイスの要件と推奨事項」のセクションにリストで記載されている条件を満たしていることを確認します。
  • お客様:デバイスを VMDirectPath モードでデプロイしている場合は、デバイスのベンダーが提供するドキュメントでここに記載されている要件のサポート状況を確認し、デバイスが『VMware Compatibility Guide』のリストに記載されていることを確認します。

VMDirectPath I/O 向けのプラットフォームの要件と推奨事項

IOMMU

プラットフォームには、VMDirectPath I/O に割り当てる PCI 機能を DMA 再マッピングするための IOMMU が必要です。IOMMU の DMA 再マッピング機能は、VMDirectPath I/O が機能するために必要です。PCI のパススルー機能によって送信される DMA トランザクションは、IOMMU によってホスト物理アドレスに変換が必要であり、ゲスト OS の物理アドレスを伝送します。

PCI Express アクセス制御サービス (ACS)

PCI のパススルー機能によって送信される DMA 要求は、ホスト OS の物理アドレスではなく、ゲスト OS の物理アドレスを伝送するため、ACS がないとホストの PCI バス階層で正しくルーティングすることができません。ACS を使用すると、アドレス変換のこれらの要求は、無条件にプラットフォームの IOMMU にルーティングされます。

PCI バス階層でパススルー PCI 機能の上に配置されている PCIe ルート ポートおよび PCIe スイッチ ダウンストリーム ポートには、ACS サポートが必要です。また、パススルー PCI 機能がマルチ機能デバイスの一部であり、ピアツーピア転送をサポートしている場合も、ACS が必要です。

デバイスの要件および推奨事項

PCI 機能 BAR

PCI 機能 BAR は、ホスト マシンの物理アドレス空間で、4 KB のアドレス、またはその倍数(例:8 KB、16 KB、など)にする必要があります。PCI 機能の BAR サイズが 4 KB 以上の場合、この要件は黙示的に満たされます。

PCI 機能の BAR サイズが 4 KB 未満の場合、プラットフォームのファームウェアは前述のとおり BAR の開始に合わせる必要があり、BAR がマッピングされている 4 KB ページの範囲内に別のシステム リソースがマッピングされていないことを確認します。

製品バージョン間におよぶ PCI 機能 BAR サイズの要件:

ESXi 5.1 および 5.5
  • 単一の PCI BAR でサポートされる最大サイズは 1 GB です。
  • PCI 機能のすべての BAR を組み合わせたサイズが 3.75 GB を超えないようにしてください。
  • 仮想マシンのすべての BAR を組み合わせたサイズは 3.75 GB 以下であり、仮想マシン上の別の PCI デバイスによって消費される BAR 領域量により、制限されます。ESXi 5.1 および 5.5 の場合、レガシー BIOS ファームウェアを使用する仮想マシンで 4 GB のアドレス境界を下回る BAR をマッピングする場合、要件は BAR 整合要件および BIOS によるメモリ予約によって生じます。
ESXi 6.0
  • 仮想マシンがレガシー BIOS モードを使用する場合、ESXi 6.0 の制限は ESXi 5.5 のものと同じになります。
  • 仮想マシン内で 3.75 GB を超える合計 BAR 割り当てを使用するには、仮想マシンの vmx ファイルに次の行を追加して、仮想マシンの BIOS で UEFI を使用するように設定します。

    firmware=“efi"

  • 64 ビットの Memory Mapped I/O (MMIO) を有効にするには、次の行を仮想マシンの vmx ファイルに追加します。

    pciPassthru.use64bitMMIO="TRUE"

  • ESXi ホスト BIOS で 4 GB を超える 16 TB 未満の PCI マッピングを使用できるように設定します。
  • UEFI BIOS モードで、仮想マシンの合計 BAR 割り当ては 32 GB に制限されています。

ESXi 6.5
  • 仮想マシンがレガシー BIOS モードを使用する場合、ESXi 6.5 の制限は ESXi 6.0 のものと同じになります。
  • 仮想マシンが UEFI BIOS モードを使用する場合は、ESXi 6.0 の制限と、32 GB の制限はなくなり仮想マシンの合計 BAR 割り当てに対する新しい制限はハードウェアの制限に基づくという例外が適用されます。この制限は一般的に 1 TB 以上です。

    .vmx ファイルで以下のエントリを確認し、仮想マシンが確実に UEFI BIOS を使用するようにしてください。

    firmware=“efi"

  • 64 ビットの Memory Mapped I/O (MMIO) を有効にするには、次の行を仮想マシンの vmx ファイルに追加します。

    pciPassthru.use64bitMMIO="TRUE"

  • 32 GB 以上使用するには、仮想マシンの vmx ファイルで、GB の 2 のべき乗としてMMIO 領域のサイズを指定します。

    例:

    pciPassthru.64bitMMIOSizeGB = “128"

PCI 機能リセット

ESXi は、ESXi ホストおよび仮想マシン間を分離するために、VMDirectPath I/O に割り当てられた PCI 機能をリセットします。これは、ゲスト OS がデバイスを、パワーオンまたは再起動時にクリーンな状態であると認識するために行われます。

ESXi は、PCI 機能の複数のリセット タイプの使用をサポートしています。
  • 機能レベル リセット (FLR)
  • セカンダリ バス リセット
  • リンクの無効化/有効化
  • デバイス電源状態の遷移(D0 > D3hot > D0、非標準リセット方式)
選択した方式は、ESXi ホストの /etc/vmware/passthrough.map にある passthrough.map ファイルで構成できます。

FLR およびデバイス電源状態の遷移のリセット タイプでは、精度が機能レベルになります。つまりリセットは、別の PCI 機能や同じバス上の別のデバイスに影響を与えることなく、単一の PCI 機能に適用することができます。

逆に、セカンダリ バス リセットおよびリンクの無効化/有効化では、精度がバスレベルになります。つまりリセットは、同じバス上のすべての PCI 機能(たとえば、マルチファンクション PCIe デバイスにあるすべての PCI 機能)に影響します。

要件および推奨事項
  1. ESXi ホストと仮想マシン間の分離を保証するには、PCI リセットの後に、PCI 機能が以下の条件を満たす必要があります。これらの条件は、PCIe 3.0 仕様、セクション 6.6.2 からのものです。
  • 機能は、ホスト内の初期化済みアダプタまたはその外部インターフェイスのように見えないようにしてください(たとえば、機能は静止しており、トランザクションや中断を発行していない必要があります)。
  • 機能は、後で機能を使用するときに関連する機密情報を含む可能性のある、ソフトウェアで読み取り可能な状態を保持しないようにしてください。
  • 正常に構成すると、機能がそのドライバで使用できるようになります。
  • VMware では、PCI 機能で機能レベルリセット (FLR) をサポートすることを強くお勧めします。
  • バスレベルの精度を持つリセット方式では、同じバス上のすべての PCI 機能が同じ仮想マシンにまとめて割り当てられている場合にのみ、VMDirectPath I/O がサポートされます。
    • ESXi 5.5 および 6.0 は、リセットの依存関係を自動的に検出し、特定の PCI 機能が VMDirectPath I/O 用に仮想マシンに割り当てられた場合に、それらについてユーザーに通知します。
    • ESX 5.1 がリセットの依存関係を自動的に検出することはありません。そのような依存関係は、ユーザーが明示的に passthrough.map ファイルで構成し、PCI 機能の shareable 属性を false に設定する必要があります。
  • PCI ホスト ブリッジ直下の PCI 機能を VMDirectPath I/O で使用するには、FLR または D3Hot リセットをサポートする必要があります。

マルチファンクション PCI デバイス

マルチファンクション PCI デバイスが PCI 機能全体にわたって機能的な依存関係を持たないようにすることを、強くお勧めします。

マルチファンクション デバイスの PCI 機能間に機能的な依存関係がある場合、同じデバイス内にある依存しているすべての PCI 機能は、VMDirectPath I/O 用に同じ仮想マシンにまとめて割り当てる必要があります。そのような依存関係は、ユーザーが明示的に passthrough.map ファイルで構成し、依存する PCI 機能の共有可能属性を [偽] に設定する必要があります。

ピアツーピア DMA トランザクション

現在、ESXi では、仮想マシン内の PCI パススルー デバイスとのピアツーピア DMA トランザクションをサポートしていません。つまり、ESXi は、パススルー PCI デバイスが送信するすべての DMA トランザクションが、仮想マシンのメモリ(RAM など)にアクセスし、仮想マシンの別の PCI デバイスのメモリマップされた BAR には絶対にアクセスしないと想定します(別の PCI デバイスが仮想か、別のパススルー デバイスであるかどうかにかかわらず)。同様に、仮想マシン内の仮想 PCI デバイスが送信する DMA トランザクションが、仮想マシンに割り当てられた PCI パススルー デバイスのメモリマップされた BAR には絶対にアクセスしない必要があります。この要件が満たされない場合、ピアツーピア トランザクションが発生すると、仮想マシンが強制終了する結果となります。

レガシー PCI ブリッジの背後にある PCI 機能

VMware では、VMDirectPath I/O に割り当てられた PCI 機能を PCI Express のルート ポートまたはスイッチ ダウンストリーム ポートの背後に配置することを強くお勧めします。

PCI 機能の VMDirectPath I/O 割り当てを、従来の PCI ブリッジまたは PCIe-to-PCI/PCI-X ブリッジの背後に配置することは、お勧めしていません。PCIe-to-PCI/PCI-X ブリッジまたは従来の PCI ブリッジの背後にある PCI 機能は、VMDirectPath I/O 用に同じ仮想マシンにまとめて割り当てる必要があります。

これらのブリッジは、ブリッジの PCI リクエスタ ID をトランザクションに配置することにより、それらの背後にある PCI 機能によって送信される PCI トランザクションの所有権を取得します。これにより、ESXi ホストは強制的に PCI ブリッジのリクエスタ ID を使用し IOMMU 変換をプログラムします。これは、ブリッジの背後にあるすべての PCI 機能を同じ IOMMU ドメインに配置し、同じ仮想マシンにまとめて割り当てる必要があることを意味しています。

PCI ルート複合統合エンドポイント

このドキュメントに記載された PCI プラットフォームおよびデバイスの要件が満たされる限り、PCI パススルーは、PCI ルート複合に組み込まれている PCI 機能でサポートされます。

ホストの予約メモリに DMA を行う PCI 機能

VMware では、VMDirectPath I/O に割り当てられている PCI 機能が、プラットフォームのメモリ マップで予約済みとマークされている ESXi ホストのメモリ(たとえば、BIOS E820 または UEFI GetMemoryMap())に DMA 読み取り/書き込みを行わないことを強くお勧めしています。

ホストの予約済みメモリに DMA 読み取り/書き込みを生成する PCI 機能は、ESXi ホストに、予約済みメモリ範囲の IOMMU ID マップを強制的に作成させます(そのような DMA はゲスト物理アドレスではなく、ホスト物理アドレスを伝送するため)。これにより ESXi ホストおよび仮想マシンで、次のようなアドレスの制約が生じます。

PCI 機能が ESXi ホストの予約メモリに DMA を行う場合、PCI 機能および DMA 対象の予約範囲は、ACPI 予約メモリ領域レポート構造 (RMRR) に表示される必要があります。
ホストの予約メモリに DMA を行う PCI 機能の VMDirectPath I/O を ESX がサポートするかどうかは、製品のバージョンに応じて異なります。

ESX 5.1
ホストの予約メモリに DMA を行う PCI 機能の VMDirectPath I/O は、PCI 機能をリセットするとそのようなメモリへの DMA が停止する場合を除き、サポートされていません。

ESX 5.5(ESX 5.5U3 よりも前のバージョン)

ホストの予約メモリに DMA を行う PCI 機能の VMDirectPath I/O は、以下を条件としてサポートされます。
  1. PCI 機能に関連付ける RMRR 範囲は、以下の順に次の範囲のいずれかに配置する必要があります。
    1. 仮想マシンの物理メモリの範囲外(たとえば、仮想マシンの RAM として構成した最上位のアドレスよりもさらに上)。
    2. 4 GB アドレス境界の下で、仮想マシンの PCI メモリ ホール内。
      仮想マシンの .vmx ファイルを構成し、仮想マシンの PCI メモリ ホールが RMRR 範囲とオーバーラップするように、(構成オプション「pciHole.start」および「pciHole.size」を設定することにより)これをマッピングする必要があります。

      PCI メモリ ホールは、256 MB ~ 4 GB のアドレス範囲にする必要があります。

      説明:(前述の場合を除いて)RMRR 範囲は仮想マシンの物理メモリ範囲と絶対にオーバーラップしないようにしてください。オーバーラップしてしまうと、ESX が IOMMU アドレス変換を正しくプログラムできません。
  2. ESX が VMDirectPath I/O に割り当てられた PCI 機能をリセットします。正しく運用するために、RMRR 範囲に DMA を行う PCI 機能にプラットフォームが依存する場合、プラットフォーム独自のメカニズムを使用して、リセット後も PCI 機能がこれを引き続き行うことを確認する必要があります。これが可能でない場合は、PCI 機能を VMDirectPath I/O に割り当てないでください。

ESX 5.5(5.5U3 以降)、ESX 6.0

ESX 5.5 U3 以降、ESX は、仮想マシンの物理メモリ マッピングを自動的に調整し、ホストの RMRR 範囲と仮想マシンの RAM 間でのオーバーラップを回避します。ただし、自動調整は、以下の条件を満たす場合にのみ機能します。

  1. PCI 機能に関連付ける RMRR 範囲は、次の範囲のいずれかに配置する必要があります。
    1. 仮想マシンの物理メモリの範囲外(たとえば、仮想マシンの RAM として構成した最上位のアドレスよりもさらに上)。
    2. 4 GB アドレス境界の下で、256 MB ~ 4 GB の範囲。
    3. 仮想マシンの BIOS 予約メモリ(たとえば、640 K ~ 1 MB)。
  2. ESX が VMDirectPath I/O に割り当てられた PCI 機能をリセットします。正しく運用するために、RMRR 範囲に DMA を行う PCI 機能にプラットフォームが依存する場合、プラットフォーム独自のメカニズムを使用して、リセット後も PCI 機能がこれを引き続き行うことを確認する必要があります。これが可能でない場合は、PCI 機能を VMDirectPath I/O に割り当てないでください。

VI.PCI 割り込み

VMDirectPath I/O は、MSI-X、MSI、またはレガシーの(INTx など)PCI 割り込みを使用する PCI 機能をサポートします。VMware では、VMDirectPath I/O に使用する PCI 機能が MSI または MSI-X 割り込みをサポートすることをお勧めしています。

説明:INTx を使用する PCI 機能は、システム内の別の PCI 機能と割り込みラインを共有する場合があります。これは、割り込みを共有する各 PCI 機能の割り込みのサービスを遅延することができます。INTx を共有する PCI 機能のいずれかが VMDirectPath I/O に割り当てられていると、遅延は悪化します。

VII.PCI エラー

ESX は、VMDirectPath I/O の PCI エラーの仮想化をサポートしません(たとえば、VMDirectPath I/O に割り当てられた PCI 機能によって報告される PCI エラーは常に ESX によって処理され、ゲスト OS に認識されることはありません)。
現在の世代サーバ上のプラットフォーム制約が原因で、PCI 修正不可能なエラーにより通常は、ESX が現在回復できないプロセッサに NMI が送信されます。その結果 VMware は、VMDirectPath I/O に割り当てられる可能性のある PCI 機能を、正常な運用条件のもとで PCI 修正不可能なエラーが発生しないように設計する必要があります。

VIII.拡張 ROM を使用する PCI 機能

ESX は、拡張 ROM を使用する PCI 機能の VMDirectPath I/O をサポートします(たとえば、拡張 ROM コードにデバイス固有の初期化や、仮想マシンがパススルー PCI 機能から起動できるコードが含まれる場合があります)。

仮想マシンがパワーオンまたは再起動されると常に、拡張 ROM が仮想マシンのファームウェアによって実行されます。デバイスをホットリセットすると、デバイスは、拡張 ROM を再実行できる状態になります。
仮想マシンのファームウェアによる拡張 ROM コードの実行はデフォルトで無効になっていますが、次のように有効にすることができます。
  1. ESX 起動オプション「pcipSaveOPROM=TRUE」を設定します。
  2. 仮想マシンの .vmx ファイルを、パラメータ「%s.opromEnabled=TRUE」(pciPassthru0.opromEnabled=TRUE など)を使用して構成します

    今後の実装の注意:現時点ではサポートされていませんが、ESX の今後のバージョンでは VMDirectPath I/O PCI 機能の再割り当てが実行時に ESX VMkernel でサポートされる可能性があります(ESX ホストの電源を切る必要がなくなる、など)。拡張 ROM を使用する PCI 機能の場合、PCI 機能はこの再割り当て中にリセットされるため、この操作はサポートされません。また、拡張 ROM が ESX で実行されることはありません(たとえば、そのようなコードはホスト マシンの BIOS/UEFI ファームウェアによって起動時にのみ実行されます)。

IX.PCI 電源管理

ESX は、VMDirectPath I/O の PCI 電源管理イベント (PME) の仮想化をサポートしません(たとえば、VMDirectPath I/O PCI 機能によって生成される PME メッセージは現在のところ ESX によって無視され、ゲスト OS への通知は行われません)。
ただし、仮想マシンの BIOS は、PCIe ネイティブ電源管理イベントのデフォルトの許可制御によって、要求元のゲスト OS に APCI _OSC 経由で通知を行います。これにより、ゲスト OS がパススルー PCI 機能で PME を有効にし、正しい運用のために PME の生成に依存する PCI 機能の不具合が発生する場合があります(たとえば、トラフィックが少ない期間はドライバが低電力状態におさえ、正常な電源状態に戻すにはドライバが PME を生成する NIC に依存する PCI NIC など)。
この状況は、ゲスト OS に対する PCIe ネイティブ電源管理の制御の許可から仮想マシンの BIOS を構成することで回避できる場合があります。これは、.vmx 構成オプション「acpi.osc.pcie」経由で行うことができます。これは _OSC Control Field, Return Value をオーバーライドします。_OSC Control Field, Return value のフォーマットについては、ACPI の仕様を参照してください。

X. テストの全般的な推奨事項

VMDirectPath I/O 実装の成功の確率と、システム全体の安定性を高めるために、VMware では、OEM パートナーが VMDirectPath I/O とともに使用することを意図した特定のプラットフォームで厳しいテストを行い、このドキュメントに記載された要件が満たされていることを確認することを、強くお勧めしています。
このテストは、一般的なパワーオン、再起動、および仮想マシン内での機能テスト使用ケースで構成されますが、プラットフォームを十分に検証するためにさらに例外的なケースも考慮する必要があります。そのような例外的なケースには、仮想マシンの強制シャットダウン(またはクラッシュ)や、仮想マシン実行中の ESX ホスト自体の強制シャットダウンが含まれます。




Additional Information

プラットフォームの要件については、『VMware compatibility guide』を参照し、[機能] で [VM Direct Path IO] を選択してください。


VMware vSphere VMDirectPath I/O: Requirements for Platforms and Devices