利点 IOMMUを使用することの利点は、メモリへの直接的な物理アドレス指定(DMA)と比較して、以下のとおりです。
物理メモリ上で連続している必要はなく、大きなメモリ領域を割り当てることができます。IOMMUは、連続した仮想アドレスを、基盤となる断片化された物理アドレスにマッピングします。そのため、場合によっては ベクタI/O(スキャッターギャザー リスト)の使用を回避できます。 物理メモリ全体をアドレス指定するのに十分な長さのメモリ アドレスをサポートしていないデバイスでも、IOMMU を介してメモリ全体をアドレス指定できるため、周辺機器のアドレス指定可能なメモリ空間との間でバッファをコピーする際に伴うオーバーヘッドを回避できます。 メモリは、 DMA攻撃を 試みる悪意のあるデバイスや、誤ったメモリ転送を試みる欠陥のあるデバイスから保護されています。これは、デバイスが明示的に割り当て(マッピング)されていないメモリに対して読み書きできないためです。このメモリ保護は、CPU上で動作するOS(図参照)がMMUとIOMMUの両方を排他的に制御するという事実に基づいています。デバイスは、構成済みのメモリ管理テーブルを物理的に回避したり、破損させたりすることはできません。 仮想化環境 では、ゲスト オペレーティングシステムは、仮想化専用に設計されていないハードウェアを使用できます。グラフィックカードなどの高性能ハードウェアは、DMAを使用してメモリに直接アクセスしますが、仮想環境ではすべてのメモリアドレスが仮想マシンソフトウェアによって再マッピングされるため、DMAデバイスが動作しなくなります。IOMMUはこの再マッピングを処理し、ゲストオペレーティングシステムでネイティブデバイスドライバを使用できるようにします。一部のアーキテクチャでは、IOMMUは標準的なメモリアドレスの再マッピングと同様の方法で、ハードウェア割り込みの 再マッピングも実行します。 周辺機器のメモリページングは、IOMMUによってサポートされます。PCI-SIG PCIeアドレス変換サービス(ATS)ページ要求インターフェース(PRI)拡張機能を使用する周辺機器は、メモリマネージャサービスの必要性を検出し、その旨を通知できます。 ポートI/Oがメモリのアドレス空間とは別のアドレス空間であるシステムアーキテクチャでは、CPUがI/Oポートを介してデバイスと通信する際にIOMMUは使用されません。ポートI/Oとメモリが適切なアドレス空間にマッピングされるシステムアーキテクチャでは、IOMMUはポートI/Oアクセスを変換できます。
デメリット IOMMU を持つことの、メモリへの直接的な物理的アドレッシングと比較した場合の欠点には、次のものがあります。[ 4 ]
翻訳や管理オーバーヘッド(例:ページテーブル走査)によるパフォーマンスの低下が若干発生する。 追加されたI/Oページ(変換)テーブル のための物理メモリの消費。これらのテーブルをプロセッサと共有できれば、この問題は軽減できます。ページテーブルのサイズを小さくするために、多くのIOMMUの粒度はメモリページング(多くの場合4096バイト)と同じになっています。そのため、DMA攻撃から保護する必要のある小さなバッファは、デバイスに表示する前にページアラインメントしてゼロクリアする必要があります。OSのメモリ割り当ての複雑さから、デバイスドライバは機密性の高いデータ構造にバウンスバッファを使用する必要があり、結果として全体的なパフォーマンスが低下します。
仮想化 Xen やKVM などの準仮想化 システムを含む仮想マシン 内でオペレーティングシステムが動作している場合、通常、アクセスするメモリのホスト物理アドレスは認識されません。そのため、ゲストOSがハードウェアに対してゲスト物理アドレスを使用して直接メモリアクセス (DMA)を実行するように指示しようとすると、ハードウェアは特定の仮想マシンにおけるゲスト物理アドレスとホスト物理アドレスのマッピングを認識していないため、メモリが破損する可能性が高く、コンピュータハードウェアへの直接アクセスが困難になります。ハイパーバイザまたはホストOSがI/O操作に介入して変換を適用すれば、破損は回避できます。ただし、この方法ではI/O操作に遅延が発生します。
IOMMUは、ゲスト物理アドレスをホスト物理アドレスにマッピングするために使用されるものと同じ(または互換性のある)変換テーブルに従って、ハードウェアによってアクセスされるアドレスを再マッピングすることでこの問題を解決します。[ 5 ]
公開された仕様 AMDは、 AMD-Vi と呼ばれるIOMMUテクノロジーの仕様を公開しました。[ 6 ] [ 7 ] IBMは 43xx シリーズで拡張制御プログラムサポート:仮想ストレージ拡張(ECPS:VSE)モード[ 8 ] を提供し、チャネルプログラムは仮想アドレスを使用しました。Intelは IOMMUテクノロジーの仕様を、VT-d と略されるVirtualization Technology for Directed I/Oとして公開している。[ 9 ] Sun IOMMUに関する情報は、Solaris Developer ConnectionのDevice Virtual Memory Access (DVMA)セクションに掲載されています。[ 10 ] IBM翻訳制御エントリ(TCE)については、「IBM eServer pSeries 690における論理パーティションセキュリティ」というタイトルの文書で説明されています。 [ 11 ] PCI -SIG は、 シングル ルート I/O 仮想化(SR-IOV) およびアドレス変換サービス (ATS)という用語で関連する作業を行っています。これらは以前は別々の仕様でカバーされていましたが、PCI Express 5.0 以降は PCI Express 基本仕様に移行されました。[ 12 ] ARMは 、仮想化アーキテクチャを補完するために、 IOMMUの独自のバージョンをシステムメモリ管理ユニット(SMMU)[ 13 ] と定義しています。[ 14 ]
参考文献 ↑ 「IntelプラットフォームのI/O仮想化ハードウェアサポート」 . intel.com. 2006年8月10日。2007年1月20日のオリジナルからアーカイブ。 2014年6月7日 取得 。 ↑ 「デスクトップボード:Intel仮想化テクノロジー(Intel VT)との互換性」 。intel.com。2014年2月14日。 2014年6月7日 取得 。 ↑ 「物理アドレス拡張 - PAE メモリと Windows」 。Microsoft Windows ハードウェア開発センター。2005 年。2008 年 4 月 7 日 に取得 。 ↑ Muli Ben-Yehuda; Jimi Xenidis; Michal Ostrowski (2007-06-27). "Price of Safety: Evaluating IOMMU Performance" (PDF) . Proceedings of the Linux Symposium 2007 . Ottawa, Ontario, Canada: IBM Research . Retrieved 2013-02-28 . ↑ 「Xen FAQ: DomUで3Dグラフィックスを使用するにはどうすればいいですか」 。 2005年4月23日に オリジナルからアーカイブされました 。 2006年12月12日 に取得。 ↑ 「AMD I/O仮想化技術(IOMMU)仕様改訂版2.0」 (PDF) 。amd.com。2011年3月24日。 2014年1月11日 取得 。 ↑ 「AMD I/O仮想化技術(IOMMU)仕様」 (PDF) 。amd.com 。 2020年7月9日 取得 。 ↑ IBM 4300 プロセッサー ECPS:VSE モードの動作原理 (PDF) (初版 )。IBM。1979 年 1 月。SA22-7070-0。2012 年 3 月 14 日に オリジナル (PDF)からアーカイブ済み。2021 年 6 月 30 日に取得 。 ↑ 「Intel Virtualization Technology for Directed I/O (VT-d) Architecture Specification」 (PDF) 。 2020年7月9日 取得 。 ↑ 「DVMAリソースとIOMMU翻訳」 。 2007年4月30日 取得 。 ↑ 「IBM eServer pSeries 690 の論理パーティション セキュリティ」 。2007年 3 月 10 日に オリジナル からアーカイブされました。2007 年 4 月 30 日 に取得 。 ↑ 「PCI Express 基本仕様」 。 2023年1月18日 取得 。 ↑ 「ARM SMMU」 。 2013年5月13日 取得 。 ↑ 「ARM仮想化拡張機能」 。 2013年5月3日に オリジナル からアーカイブ済み 。 2013年5月13日 に取得。