Show Table of Contents
D.2. IOMMU グループの詳細
IOMMU グループは、IOMMU の観点から分離されているとみなされる最も小さなデバイスセットとして定義されます。分離を実行するために必要な最初の手順は、詳細度 (granularity) の使用です。IOMMU がデバイスを別個の IOVA 空間に区分できない場合、それらは分離されません。たとえば、複数のデバイスが同一 IOVA 空間のエイリアスになる場合、IOMMU はそれらを区別することができません。これは、通常の x86 PC がすべての従来型の PCI デバイスに同一リクエスター ID に対するエイリアスを設定してそれらを 1 つにまとめる方法になります (PCIe-to-PCI ブリッジ)。レガシー KVM デバイスの割り当てでは、ユーザーはこれらの従来型 PCI デバイスを別々に割り当てるため、IOMMU はデバイス間を区別できずに設定は失敗します。VFIO は IOMMU グループで管理されるため、VFIO は IOMMU の詳細度の使用というこの最も基本的な要件を満たさない設定を許可しません。
次の手順として、デバイスからのトランザクションが IOMMU に実際に到達するかどうかを判別する必要があります。PCIe 仕様では、トランザクションを相互接続ファブリック内に再度ルート指定できます。PCIe ダウンストリームポートは、あるダウンストリームデバイスから別のデバイスへのトランザクションを再度ルート指定できます。PCIe スイッチのダウンストリームポートは相互に接続し、1 つのポートから別のポートへの再ルート指定を可能にします。マルチファンクションエンドポイントデバイス内でも、1 つの機能からのトランザクションは別のファンクションに直接送信できます。これらの 1 つのデバイスから別のデバイスへのトランザクションはピアツーピアトランザクションと呼ばれ、別々の IOV 空間で稼働しているデバイスの分離を破棄する可能性があります。たとえば、ゲスト仮想マシンに割り当てられているネットワークインターフェースカードが DMA の書き込み操作を独自の IOV 空間内の仮想アドレスに試行するとします。ただし、物理空間ではその同じアドレスはホストによって所有されているピアディスクコントローラーに属します。この場合、デバイスについての物理変換に対する IOVA は IOMMU のみで実行されるため、トランザクションのデータパスの最適化を試行する相互接続により、ディスクへの DMA 書き込み操作が、変換用に IOMMU に到達する前に間違ってリダイレクトされる可能性があります。
この問題を解決するために、PCI Express 仕様には、これらのリダイレクトの可視性とコントロールを提供する PCIe Access Control Services (ACS) のサポートが含まれます。これは相互接続やマルチファンクションエンドポイントに欠落していることの多い、デバイスを相互に分離するために必要なコンポーネントです。デバイスから IOMMU へのすべてのレベルで ACS サポートがない場合も、リダイレクトが生じることを想定する必要があります。このため、ACS サポートがない場合、PCI トポロジーのすべてのデバイスの分離に影響があります。PCI 環境の IOMMU グループはこの分離を考慮に入れて、変換されないピアツーピア DMA が可能な複数のデバイスを 1 つにグループ化します。
要約すると、IOMMU グループは、IOMMU が可視性を持ち、他のグループから分離される最小単位のデバイスセットを表します。VFIO はこの情報を使用してユーザー空間についてデバイスの安全な所有権を確保します。ブリッジ、root ポートおよびスイッチ (相互接続ファブリックの例すべて) の例外を除き、IOMMU グループ内のすべてのデバイスは VFIO デバイスドライバーにバインドされるか、または安全なスタブドライバーとして認識されます。PCI の場合、これらのドライバーは vfio-pci と pci-stub です。pci-stub は、ホストがこのドライバー経由でデバイスと対話しないと認識されているので許可されます[2] 。VFIO の実行時にグループが実行不能であることを示すエラーが出される場合、このグループ内のすべてのデバイスが適切なホストドライバーにバインドする必要があることを意味します。
virsh nodedev-dumpxml を使用して、IOMMU グループの構成を公開し、virsh nodedev-detach を使用してデバイスを VFIO と互換性のあるドライバーにバインドすることにより、このような問題を解決できます。
[2]
例外となるのは、レガシー KVM デバイス割り当てであり、pci-stub ドライバーにバインドされている場合にデバイスとの対話が行われることがよくあります。Red Hat Enterprise Linux 7 にはレガシー KVM デバイス割り当てが含まれないため、この相互対話と潜在的な衝突は回避されます。そのため、同一 IOMMU グループ内で VFIO とレガシー KVM デバイス割り当てを同時に使用することは推奨されていません。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.