IOMMU
表示
![](http://upload.wikimedia.org/wikipedia/commons/thumb/d/d6/MMU_and_IOMMU.svg/282px-MMU_and_IOMMU.svg.png)
IOMMU (Input/Output Memory Management Unit、IOMMU) とはDMA可能なI/Oバスと主記憶装置を接続するメモリ管理ユニット (MMU) である。MMU がCPUに見える仮想アドレスを物理アドレスに変換するように、IOMMU は周辺機器から見える仮想アドレス︵デバイスアドレスとかI/Oアドレスと呼ぶ︶を物理アドレスに変換する。周辺機器の誤動作からメモリを守るため、メモリ保護機能も提供する。
実例と呼称[編集]
IOMMU の例として、AGPやPCI 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]。脚注[編集]
(一)^ “AMD I/O Virtualization Technology (IOMMU) Specification Revision 1.0” (PDF) (英語). 2006年2月1日閲覧。
(二)^ “Mainstreaming Server Virtualization: The Intel Approach” (PDF) (英語). 2006年3月1日閲覧。
(三)^ “DVMA Resources and IOMMU Translations” (英語). 2007年4月30日閲覧。
(四)^ “Logical Partition Security in the IBM eServer pSeries 690” (英語). 2007年4月30日閲覧。
(五)^ “I/O Virtualization specifications” (英語). 2007年5月1日閲覧。
(六)^ 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日閲覧。
(七)^ “Xen FAQ: In DomU, how can I use 3D graphics” (英語). 2006年12月12日閲覧。
参考文献[編集]
- Bottomley, James (2004年5月1日). “Using DMA”. Linux Journal (Specialized Systems Consultants) .