输入输出内存管理单元
此条目翻译自其他语言维基百科,需要相关领域的编者协助校对翻译。 |
在计算机领域,输入输出内存管理单元(英语:input–output memory management unit,缩写IOMMU)是一种内存管理单元(MMU),它将具有直接记忆体存取能力(可以DMA)的I/O总线连接至主内存。如传统的MMU(将CPU可见的虚拟地址转换为物理地址)一样,IOMMU将设备可见的虚拟地址(在此上下文中也称设备地址或I/O地址)映射到物理地址。部分单元还提供内存保护功能,防止故障或恶意的设备。
IOMMU的一个例子是Intel架构和AMD计算机上使用的AGP和PCI Express显卡所使用的图形地址映射表(GART)。
在x86架构将CPU与平台路径控制器(PCH)的北桥和南桥拆分前,I/O虚拟化不是由CPU而是由芯片组执行。[1][2]
优点
与内存的直接物理寻址相比,拥有IOMMU的优势包括[来源请求]:
- 分配大容量内存区域可以不需连续的物理内存——IOMMU可将连续的虚拟地址映射到底层中分段的物理地址。因此,有时可以避免使用向量化I/O(分散-集中列表)。
- 不支持寻址整个物理内存长度的设备仍可通过IOMMU访问整个内存,避免了与外围设备的可寻址内存空间复制缓冲区有关的开销。
- 内存得到保护,尝试进行DMA攻击的恶意设备或尝试传输错误内存的故障设备无权读写非明确分配(映射)的内存。内存保护基于一项事实,CPU上运行的操作系统(见图例)专门控制MMU和IOMMU。设备本身无法绕过或损坏已配置的内存管理表。
- 在某些架构中,IOMMU也执行硬件中断重映射,工作方式类似标准内存地址重映射。
- 外设内存分页可由IOMMU支持。使用PCI-SIG PCIe地址转换服务(ATS)分页请求接口(PRI)扩展的外设可以检测和表示需要内存管理服务。
对于端口I/O的地址空间与内存的内存地址空间不同的系统架构,CPU与设备通过I/O端口通信时不使用。如果端口I/O与内存的地址空间被映射到一个合适的空间,则可以用IOMMU转换I/O访问。
缺点
与内存的直接物理寻址相比,IOMMU的缺点包括:[4]
- 性能因翻译和管理开销(例如页表变动)有所下降。
- 增加的I/O分页表(转换表)消耗一些物理内存。如果该表可与处理器共享,则此问题可以缓解。
虚拟化
当操作系统在虚拟机器内运行时(包括使用半虚拟化的系统,例如Xen),其通常不知道它要访问的内存的主机物理地址。这使其难以直接访问计算机硬件,因为如果客户机系统尝试用客户机的物理地址进行直接记忆体存取(DMA)来吩咐硬件,其可能损坏内存数据,因为硬件不知道给定虚拟机客户机物理地址与主机物理地址之间的映射关系。而由管理程序或主机操作系统介入I/O操作来应用翻译则可以避免损坏,但会增加此I/O操作的延迟。
IOMMU可以依靠将客户机物理地址映射到主机物理地址的相同或兼容转换表重映射硬件访问地址,从而解决延迟问题。[5]
Intel和AMD的IOMMU虚拟化需要晶片组和CPU支援IOMMU虚拟化。Intel的IOMMU虚拟化称为VT-d。
已公布规范
- AMD已出版一份IOMMU技术规范。[6][7]
- 英特尔已出版一份针对虚拟化技术直接I/O的IOMMU技术规范,简称为VT-d。[8]
- 有关昇阳电脑(Sun)IOMMU的信息已在Solaris Developer Connection的设备虚拟内存访问(DVMA)部分发布。[9]
- IBM Translation Control Entry (TCE) 在eServer pSeries 690中标题为“逻辑分区安全”的文档中进行了描述。[10]
- PCI-SIG对I/O虚拟化(IOV)[11]和地址转换服务(ATS)有相关工作。
- ARM将其IOMMU版本定义为系统内存管理单元(SMMU)[12],以补充其虚拟化架构。[13]
参见
- 异构系统架构(HSA)
- IOMMU支持的硬件列表
- 存储器映射输入输出
- 记忆体保护
参考资料
- ^ Intel platform hardware support for I/O virtualization. intel.com. 2006-08-10 [2014-06-07]. (原始内容存档于2007-01-20).
- ^ Desktop Boards: Compatibility with Intel Virtualization Technology (Intel VT). intel.com. 2014-02-14 [2014-06-07]. (原始内容存档于2015-12-22).
- ^ Physical Address Extension — PAE Memory and Windows. Microsoft Windows Hardware Development Central. 2005 [2008-04-07]. (原始内容存档于2008-04-06).
- ^ Muli Ben-Yehuda; Jimi Xenidis; Michal Ostrowski. Price of Safety: Evaluating IOMMU Performance (PDF). Proceedings of the Linux Symposium 2007. Ottawa, Ontario, Canada: IBM Research. 2007-06-27 [2013-02-28]. (原始内容 (PDF)存档于2020-12-18).
- ^ Xen FAQ: In DomU, how can I use 3D graphics. [2006-12-12]. (原始内容存档于2008-10-02).
- ^ AMD I/O Virtualization Technology (IOMMU) Specification Revision 2.0 (PDF). amd.com. 2011-03-24 [2014-01-11]. (原始内容 (PDF)存档于2021-02-25).
- ^ AMD I/O Virtualization Technology (IOMMU) Specification Revision 2.62 (PDF). amd.com. 2015-03-02 [2016-01-05]. (原始内容 (PDF)存档于2018-06-16).
- ^ Intel Virtualization Technology for Directed I/O (VT-d) Architecture Specification (PDF). [2016-02-17]. (原始内容 (PDF)存档于2020-08-24).
- ^ DVMA Resources and IOMMU Translations. [2007-04-30]. (原始内容存档于2012-04-19).
- ^ Logical Partition Security in the IBM eServer pSeries 690. [2007-04-30]. (原始内容存档于2007-03-10).
- ^ I/O Virtualization specifications. [2007-05-01]. (原始内容存档于2021-03-08).
- ^ ARM SMMU. [2013-05-13]. (原始内容存档于2016-09-23).
- ^ ARM Virtualization Extensions. [2013-05-13]. (原始内容存档于2013-05-03).
外部链接
- Bottomley, James. Using DMA. Linux Journal (Specialized Systems Consultants). 2004-05-01. (原始内容存档于2006年7月15日).
- Mastering the DMA and IOMMU APIs (页面存档备份,存于互联网档案馆), Embedded Linux Conference 2014, San Jose, by Laurent Pinchart