コンテンツにスキップ
Wikipedia

Input/Output Memory Management Unit

出典: フリー百科事典『ウィキペディア(Wikipedia)』
I/Oメモリ管理ユニット (IOMMU) とメモリ管理ユニット (MMU)

Input/Output Memory Management Unit (IOMMU) とはDMA可能なI/Oバス主記憶装置を接続するメモリ管理ユニット (MMU) である。MMUがCPUに見える仮想アドレス物理アドレスに変換するように、IOMMUは周辺機器から見える仮想アドレス(デバイスアドレスとかI/Oアドレスと呼ぶ)を物理アドレスに変換する。周辺機器の誤動作からメモリを守るため、メモリ保護機能も提供する。

実例と呼称

[編集 ]

IOMMUの例として、AGPPCI Expressのグラフィックスカードで使われるGraphics Address Remapping Table (GART) がある。

AMDは、HyperTransportアーキテクチャでのIOMMU技術の仕様を公表している[1] インテルはIOMMUの仕様をVirtualization Technology for Directed I/O (VT-d) として公表している[2] サン・マイクロシステムズのIOMMUはSolaris Developer Connection の Device Virtual Memory Access (DVMA) として公表されている[3] IBMのIOMMUはTranslation Control Entry (TCE) と称している文書がある[4] 。PCI-SIGでは関連する部分をI/O Virtualization (IOV) [5] とAddress Translation Services (ATS) と呼んでいる。

x86のIOMMUについては、x86仮想化#チップセットも参照のこと。

利点

[編集 ]

物理アドレスを直接使う場合と比較したIOMMUの利点は以下の通りである。

  • 大きなバッファを確保する際に、物理的に連続であることを保証する必要がない。IOMMUが連続な仮想アドレスと分断された物理アドレスのマッピングを行う。
  • 主記憶メモリ全体を指定できるほどのアドレス幅を持たない周辺機器(バス)の場合、IOMMUを使えばメモリ上どこにバッファがあってもアクセス可能となる。これにより、周辺機器がアクセスできる範囲にあるバッファと実際のバッファの間でメモリコピーをする必要がなくなる。
    • 例えば、最近のx86系プロセッサはPAE機能によって 4GiB以上のメモリ空間を扱える。しかし、32ビットのPCIデバイスは4GiBを越えるアドレスにあるメモリには単純にはアクセスできない。IOMMUがない場合、オペレーティングシステム (OS) はdouble buffering(Windows用語)とかbounce buffers(Linux用語)と呼ばれる時間のかかる処理を必要とする。
  • メモリ保護機能により、明示的にアクセス権がないとデバイスからメモリにアクセスできない。これによりデバイスの誤動作や悪意あるデバイスからメモリを保護する。IOMMU の設定はCPU上で動作するOSが行うため、デバイス側から設定することはできない。
    • 仮想化では、ゲストOSがIOMMUを直接制御すべきではない。
    • アークテクチャによっては、IOMMUが割り込みの再マッピングも行う。

IOMMUはCPUがデバイスと(DMAではなく)ポートマップドI/Oで通信する場合には使われない。

欠点

[編集 ]

IOMMUを使う場合の欠点として、次の事柄が指摘されている[6]

  • IOMMU による変換と管理による性能低下が見られる。
  • I/O用のページテーブルを作成する必要があるため、物理メモリがそれだけ消費される。マルチプロセッサ機でプロセッサ間でI/O用ページテーブルを共有できれば、問題は若干緩和される。

IOMMUと仮想化の関係

[編集 ]

OSがXenなどの仮想機械上で動作する場合、各OSはアクセスしている物理アドレスを知らない。そのため、周辺機器にDMAを指示しようとしても、直接的に物理アドレスを指定することができない。実際には、仮想機械がI/O操作に対して変換を施しており、I/O操作に遅延が生じる原因となっている。

IOMMUは、ゲストOSと周辺機器のアクセスするアドレスのマッピングをそろえることで、これを解決できる[7]

脚注

[編集 ]
  1. ^ "AMD I/O Virtualization Technology (IOMMU) Specification Revision 1.0" (PDF) (英語). 2006年2月1日閲覧。
  2. ^ "Mainstreaming Server Virtualization: The Intel Approach" (PDF) (英語). 2006年3月1日閲覧。
  3. ^ "DVMA Resources and IOMMU Translations" (英語). 2007年4月30日閲覧。
  4. ^ "Logical Partition Security in the IBM eServer pSeries 690" (英語). 2007年4月30日閲覧。
  5. ^ "I/O Virtualization specifications" (英語). 2007年5月1日閲覧。
  6. ^ Muli Ben-Yehuda, Jimi Xenidis, Michal Ostrowski (27 June 2007). "Price of Safety: Evaluating IOMMU Performance" (PDF). Proceedings of the Linux Symposium 2007. Ottawa, Ontario, Canada: IBM Research. 2007年7月2日閲覧.{{cite conference}}: CS1メンテナンス: 複数の名前/author (カテゴリ)
  7. ^ "Xen FAQ: In DomU, how can I use 3D graphics" (英語). 2006年12月12日閲覧。

参考文献

[編集 ]

関連項目

[編集 ]

AltStyle によって変換されたページ (->オリジナル) /