E.4. IOMMU ストラテジーおよびユースケース
必要以上のデバイスが含まれる IOMMU グループを処理する方法は多数あります。プラグインカードの場合、最初にカードを異なるスロットにインストールして必要なグループが生成されるかどうかを判別します。通常の Intel チップセットでは、PCIe ルートポートはプロセッサーと PCH (Platform Controller Hub) の両方で提供されます。これらのルートポートの各種機能はそれぞれ非常に異なる場合があります。PCH ルートポートの多くにネイティブの PCIe ACS サポートがなくても、Red Hat Enterprise Linux 7 は数多くの PCH ルートポート分離の公開をサポートします。そのため、これらのルートポートは小規模な IOMMU グループを作成する上での適切なターゲットになります。Intel® Xeon® class プロセッサー (E5 シリーズ以上) およびハイエンドのデスクトッププロセッサーの場合、通常プロセッサーベースの PCIe ルートポートは PCIe ACS のネイティブサポートを提供しますが、Core™ i3、i5、i7 および Xeon E3 プロセッサーなどのローエンドのクライアントプロセッサーはこれを提供しません。このようなシステムでは、通常、PCH の root ポートを使用すると、最も柔軟な分離設定が可能になります。
もう 1 つのオプションは、ハードウェアベンダーと連携して分離が存在するかどうかを確認し、この分離を認識するためにカーネルを問い合わせることです。一般的には、関数間の内部ピアツーピアが可能かどうかを判断することや、ダウンストリームポートの場合は、リダイレクトが可能かどうかを判断することが必要になります。Red Hat Enterprise Linux 7 カーネルには、このようなデバイスに関する多くの特異な動作が含まれており、Red Hat カスタマーサポートは、ハードウェアベンダーと協力して、ACS に相当する分離が利用可能であるかどうかについて、そして同様の特異な動作をカーネルに組み込んでこの分離を公開する最適な方法について判断するサポートをします。ハードウェアベンダーの場合、ピアツーピアに対応していないマルチファンクションのエンドポイントは、設定空間で 1 つの静的 ACS テーブルを使用してこれを公開でき、機能は公開しないことに注意してください。このような機能をハードウェアに追加すると、カーネルが分離された機能を自動的に検出し、ハードウェアのすべてのユーザーに対してこの問題を排除できます。
ユーザーが指定した特定のデバイスまたは特定のタイプのデバイスに対して、これらの分離チェックを無効にするオプションをカーネルが提供する必要があるというのが、上記の提案を利用できない場合の一般的な反応になります。多くの場合、以前の技術ではこの範囲内で分離が強制されず、すべてが正常に機能していると主張されます。残念ながら、このような分離機能を回避すると、移植できない環境が発生します。分離が存在するかどうかわからないということは、デバイスが実際に分離されているかどうかを知らないことを意味し、障害が発生する前に検出することが最善策となります。デバイスの分離機能のギャップは、トリガーするのが極めて難しく、その原因としてのデバイスの分離までさかのぼって追跡することは、さらに難しくなります。VFIO の仕事は、何よりもまず、ユーザーが所有するデバイスからホストカーネルを保護することであり、IOMMU グループは、VFIO が確実に分離するために使用するメカニズムです。
つまり、IOMMU グループの上に構築されることにより、VFIO は、従来の KVM デバイス割り当てを使用して可能だった場合よりも、デバイス間のセキュリティーと分離のレベルを強化して提供することができます。この分離は Linux カーネルレベルで適用され、カーネルが自身を保護し、ユーザーに危険な設定を防ぐことができます。さらに、ハードウェアベンダーには、マルチファンクションエンドポイントデバイスだけでなく、チップセットや相互接続デバイスにおいても、PCIe ACS をサポートすることが推奨されます。このサポートのない既存のデバイスについては、ハードウェアベンダーと協力して分離が利用可能かどうかを確認し、Linux カーネルサポートを追加してこの分離を公開することができます。