SR-IOV 実装に関するハードウェアに関する考慮事項

Red Hat Virtualization 4.4

Red Hat Virtualization を使用した SR-IOV を実装するためのハードウェアの考慮事項

概要

Physical Function は、SR-IOV 機能が含まれる従来の PCIe 機能であり、データの移動を含む PCIe デバイスの完全な設定および制御を行います。各 PCIe デバイスには、1 つから 8 つの独立した PF を使用できます。


前書き

= SR-IOV 実装におけるハードウェアの考慮事項

第1章 はじめに

これは、{virt-product-fullname} で SR-IOV をセットアップおよび設定する方法を示す一連のトピックの 1 つです。

Physical Function は、SR-IOV 機能が含まれる従来の PCIe 機能であり、データの移動を含む PCIe デバイスの完全な設定および制御を行います。各 PCIe デバイスには、1 つから 8 つの独立した PF を使用できます。

Virtual Function は、データの移動に必要なリソースが含まれ、設定リソースの最小セットが含まれる軽量 PCIe 機能です。複数の VF を PF に作成でき、それぞれの PF は異なる VF をサポート できます。許可される VF の合計数は、PCIe デバイスのベンダーに依存し、デバイス間で異なります。

PCIe 仕様は、代替のルーティング ID Interpretation(ARI)の実装により、より多くの VF をサポートします。これは、PCIe ヘッダーのデバイス番号フィールドを再解釈し、8 つ以上の機能を可能にします。この変換は、ARI をサポートするデバイス(ルートポートまたはスイッチに関係なく)の PCIe デバイスと、ポートをすぐにアップストリームに依存します。

システムファームウェア(BIOS または UEFI)は、PCIe トポロジーのメモリー、I/O ポートアクリピース、PCIe バス番号の範囲などのリソースを割り当てます。そのため、十分なリソースを割り当てるには、SR-IOV がファームウェアによってサポートされ、有効にされる必要があります。

1.1. SR-IOV のハードウェア考慮事項の概要

  • ファームウェア(BIOS または UEFI)が SR-IOV に対応する必要があります。拡張機能がデフォルトで有効になっているかどうかを確認します。そうでない場合は、手動で有効にします。これは、仮想化拡張機能(VT-d または AMD-Vi)を有効にするのと似ています。詳細は、ベンダーのマニュアルを参照してください。
  • (PCIe PCIe スイッチなどの)PCIe デバイスからのルートポートまたはポートを即座にアップストリームにするには、ARI をサポートする必要があります。
  • PCIe デバイスが SR-IOV をサポートしていること。

ハードウェアがこの要件を満たすことを確認するには、ベンダー仕様およびデータシートを参照してください。

lspci -v コマンドを使用すると、システムにインストールされている PCI デバイスの情報を表示できます。

第2章 デバイス割り当ての使用に関する追加のハードウェア考慮事項

デバイスの割り当ては、仮想ゲストを PCIe デバイスに直接割り当てる容量を提供し、ゲストのフルアクセスとネイティブパフォーマンスを提供します。SR-IOV と併用すると、仮想ゲストには VF を直接割り当てられます。このように、複数の仮想ゲストを 1 つの PCIe デバイスの VF に直接割り当てることができます。

SR-IOV は、仮想マシンを PCIe デバイスに直接割り当てるように有効にする必要はありません。また、VF を作成するための唯一のアプリケーションを割り当てる必要はありませんが、これらの 2 つの機能は補完的であり、それらが連携する場合には追加のハードウェアについての考慮事項があります。

デバイスの割り当てには、CPU およびファームウェアでの I/O メモリー管理ユニット(IOMMU)のサポートが必要です。IOMMU は I/O 仮想アドレス(IOVA)と物理メモリーアドレスの間の変換を行います。これにより、仮想ゲストは、ゲストの物理アドレスを持つデバイスをプログラムできます。これは、IOMMU によってホストの物理アドレスに変換されます。

IOMMU グループは、システム内の他のすべてのデバイスから分離できるデバイスセットです。IOMMU グループは、システム内のすべての IOMMU グループからの IOMMU 粒度と分離が両方あるデバイスの最小セットを表します。これにより、IOMMU は IOMMU グループと IOMMU の制御の外部にあるデバイス間でダイレクトメモリーアクセス(DMA)を制限する間に、IOMMU グループとの間で/からトランザクションを区別することができます。

仮想ゲストと PCIe デバイスの仮想機能間のトランザクションの分離は、デバイスの割り当てに不可欠です。PCIe およびサーバー仕様で定義されたアクセス制御サービス(ACS)機能は、IOMMU グループ内の分離を維持するためのハードウェア規格です。ネイティブ ACS がない場合、またはハードウェアベンダーからは確認しないと、IOMMU の保護外部で発生する機能間でピアツーピア DMA を公開する関数や IOMMU グループを拡張して、適切な分離が欠落している関数を含めることができます。

ネイティブ ACS サポートはサーバーのルートポートに推奨されます。そうでないと、これらのポートにインストールされたデバイスはグループ化されます。root ポートには、プロセッサーベース(northbridge)の root ポートとコントローラーハブベース(southbridge)の root ポートには、2 つのいくつかのタイプがあります。上記のように、デバイスの割り当てが SR-IOV と併用され、仮想ゲストが VF に割り当てられている場合、これらのポートは ACS と ARI の両方をサポートする必要があります。

Intel の Xeon プロセッサー E5 ファミリー、Xeon プロセッサー E7 ファミリー、および High End Desktop プロセッサーには、プロセッサーベースのルートポートに対するネイティブ ACS サポートが含まれます。

現在、Intel Platform Controller Hub ベースの PCI Express ルートポートは ACS をサポートしないか、標準以外の ACS 実装を利用しているため、これらのルートポート経由で接続されたデバイスの詳細な分離が困難になります。これらのルートポートの多くは、ACS と同等の機能をサポートします。Red Hat Enterprise Linux 7.3 カーネルには、この ACS と同等の機能を X79、X99、5 シリーズ、9 シリーズ、および 100 シリーズの PCI Express チップセットで有効にするサポートが含まれています。

PCIe デバイスインストール時にプロセッサーベースおよびコントローラーのハブベースのルートポートを決定するためのベンダー仕様を参照して、ルートポートが ACS をサポートしていることを確認してください。

さらに、I/O トポロジー内の PCIe スイッチまたはブリッジでも ACS サポートが必要です。それ以外の場合は、IOMMU グループを拡張する可能性があります。

2.1. デバイス割り当てにおけるハードウェアの考慮事項の概要

  • CPU が IOMMU (例: VT-d または AMD-Vi) をサポートしていること。IBM POWER8 はデフォルトで IOMMU をサポートしています。
  • ファームウェアが IOMMU をサポートしていること。
  • 使用する CPU ルートポートが ACS または ACS と同等の機能をサポートしていること。
  • PCIe デバイスは、ACS または ACS と同等の機能をサポートしている必要があります。
  • PCIe デバイスとルートポート間の PCIe スイッチとブリッジはすべて ACS をサポートすることが推奨されます。たとえば、スイッチが ACS をサポートしていない場合には、そのスイッチの背後にあるデバイスはすべて同じ IOMMU グループを共有し、同じ仮想マシンにしか割り当てることができません。

ハードウェアがこの要件を満たすことを確認するには、ベンダー仕様およびデータシートを参照してください。

lspci -v コマンドを使用すると、システムにインストールされている PCI デバイスの情報を表示できます。