Input/Output Memory Management Unit![]() 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はCPUがデバイスと(DMAではなく)ポートマップドI/Oで通信する場合には使われない。 欠点IOMMUを使う場合の欠点として、次の事柄が指摘されている[6]。
IOMMUと仮想化の関係OSがXenなどの仮想機械上で動作する場合、各OSはアクセスしている物理アドレスを知らない。そのため、周辺機器にDMAを指示しようとしても、直接的に物理アドレスを指定することができない。実際には、仮想機械がI/O操作に対して変換を施しており、I/O操作に遅延が生じる原因となっている。 IOMMUは、ゲストOSと周辺機器のアクセスするアドレスのマッピングをそろえることで、これを解決できる[7]。 脚注
参考文献
関連項目 |