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 ルートポートは最も柔軟な分離設定を提供します。
別のオプションとして、ハードウェアベンダーと連携し、分離が存在するかどうかを判別し、カーネルにこの分離を認識させる方法もあります。これは通常は、機能間の内部のピアツーピアが可能かどうか、またはダウンストリームポートの場合であればリダイレクトが可能かどうかを判別することに関係します。Red Hat Enterprise Linux 7 カーネルには、これらのデバイスに対応する代替方法が数多く含まれます。Red Hat カスタマーサポートはハードウェアと連携して ACS 対応の分離が可能かどうか、および類似のデバイス固有の方法をカーネルに組み込んでこの分離を公開する最善の方法を判別するお手伝いをいたします。ハードウェアベンダーについては、ピアツーピアをサポートしないマルチファンクションエンドポイントが設定領域の単一の静的 ACS テーブルを使用してこれを公開しますが、各種機能は公開しないことに注意してください。この機能をハードウェアに追加すると、カーネルは機能を分離されているものと自動的に検知するので、ハードウェアのすべてのユーザーに関わる問題を排除できます。
上記の提案を実行できない場合には、共通の対応として、カーネルがユーザーが指定する特定デバイスまたは特定タイプのデバイスについての分離チェックを無効にするオプションを提供するはずです。以前のテクノロジーにより分離がこの程度まで実行されず、すべてが「正常に機能」しているかの様な状態で引数が作成されることがよくあります。しかし、これらの分離機能をバイパスすると環境がサポート不可能になります。この分離が存在することを認識しないとは、デバイスが実際に分離されているかどうかを認識していないことを意味するので、障害が発生する前に分離について確認するのが最善の策と言えます。デバイスの分離機能におけるギャップをトリガーすることは極めて困難な場合があり、原因追求のためにデバイスの分離を追跡するのはさらに困難です。VFIO の主要なジョブは、ユーザー所有のデバイスからホストカーネルを保護することであり、IOMMU グループは VFIO が分離を確保するために使用するメカニズムです。
要約すると、IOMMU グループの上部にビルドされる VFIO は、レガシー KVM デバイス割り当てによって実行されたデバイス間のセキュリティー保護と分離のレベルをさらに強化します。この分離は Linux カーネルのレベルで実行されるようになったため、カーネルはそれ自体を保護すると共に、ユーザーにとって危険な設定を防ぐことができます。さらに、ハードウェアベンダーは、マルチファンクションエンドポイントデバイスだけではなく、チップセットおよび相互接続デバイスで PCIe ACS サポートに対応するように奨励されています。このサポートのない既存デバイスの場合、Red Hat はハードウェアベンダーと連携して、分離が可能かどうかを判別し、Linux カーネルサポートを追加してこの分離を公開する場合があります。