トップQs
タイムライン
チャット
視点
Input/Output Memory Management Unit
ウィキペディアから
Remove ads
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仮想化#チップセットも参照のこと。
Remove ads
利点
物理アドレスを直接使う場合と比較したIOMMUの利点は以下の通りである。
- 大きなバッファを確保する際に、物理的に連続であることを保証する必要がない。IOMMUが連続な仮想アドレスと分断された物理アドレスのマッピングを行う。
- 主記憶メモリ全体を指定できるほどのアドレス幅を持たない周辺機器(バス)の場合、IOMMUを使えばメモリ上どこにバッファがあってもアクセス可能となる。これにより、周辺機器がアクセスできる範囲にあるバッファと実際のバッファの間でメモリコピーをする必要がなくなる。
- 例えば、最近のx86系プロセッサはPAE機能によって 4GiB以上のメモリ空間を扱える。しかし、32ビットのPCIデバイスは4GiBを越えるアドレスにあるメモリには単純にはアクセスできない。IOMMUがない場合、オペレーティングシステム (OS) はdouble buffering(Windows用語)とかbounce buffers(Linux用語)と呼ばれる時間のかかる処理を必要とする。
- メモリ保護機能により、明示的にアクセス権がないとデバイスからメモリにアクセスできない。これによりデバイスの誤動作や悪意あるデバイスからメモリを保護する。IOMMU の設定はCPU上で動作するOSが行うため、デバイス側から設定することはできない。
IOMMUはCPUがデバイスと(DMAではなく)ポートマップドI/Oで通信する場合には使われない。
Remove ads
欠点
IOMMUを使う場合の欠点として、次の事柄が指摘されている[6]。
IOMMUと仮想化の関係
OSがXenなどの仮想機械上で動作する場合、各OSはアクセスしている物理アドレスを知らない。そのため、周辺機器にDMAを指示しようとしても、直接的に物理アドレスを指定することができない。実際には、仮想機械がI/O操作に対して変換を施しており、I/O操作に遅延が生じる原因となっている。
IOMMUは、ゲストOSと周辺機器のアクセスするアドレスのマッピングをそろえることで、これを解決できる[7]。
脚注
参考文献
関連項目
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads