「COMPUTER-HARDWARE」- IOMMU

IOMMU 作用

IOMMU 允许系统设备在虚拟内存中进行寻址,也就是将虚拟内存地址映射为物理内存地址,让实体设备可以在虚拟的内存环境中工作,这样可以帮助系统扩充内存容量,提升性能;

什么是 IOMMU?在计算机领域,IOMMU(Input/Output Memory Management Unit)是一个内存管理单元(Memory Management Unit),它的作用是连接 DMA-capable I/O 总线(Direct Memory Access-capable I/O Bus)和主存(main memory)。传统的内存管理单元会把 CPU 访问的虚拟地址转化成实际的物理地址。而 IOMMU 则是把设备(device)访问的虚拟地址转化成物理地址。为了防止设备错误地访问内存,有些 IOMMU 还提供了访问内存保护机制。参考下图:

IOMMU 的一个重要用途是在虚拟化技术(virtualization):虚拟机上运行的操作系统(guest OS)通常不知道它所访问的 host-physical 内存地址。如果要进行 DMA 操作,就有可能破坏内存,因为实际的硬件(hardware)不知道 guest-physical 和 host-physical 内存地址之间的映射关系。IOMMU 根据 guest-physical 和 host-physical 内存地址之间的转换表(translation table),re-mapping 硬件访问的地址,就可以解决这个问题;

另外,在 AMD 的 VIRTUALIZING IO THROUGH THE IO MEMORY MANAGEMENT UNIT (IOMMU)文档中,也有一个更全面的总结图:

参考文献

知乎——什么是 IOMMU?