AMD IOMMU规格 (二)

关键字 :IOMMU

IOMMU的七种使用模式

1. 取代 GART

GART是AMD64系统的一个功能,主要用于协助图形协处理器对复杂的图形对象进行记忆体地址转换。即使这些对象在实际内存中是分散的,GART使得图形协处理器能够正确访问它们。这种转换包括所有对图形孔的访问,包括主处理器执行的和I/O设备执行的内存读写。要使I/O设备实现类似的转换,主机操作系统需要建立特定的I/O页表,指定所需的转换,然后通知IOMMU进行更新。这样,主处理器和图形设备的所有访问都被映射到和GART一样的内存页。

如果主机操作系统更改页面保护或转换,它需要同时更新处理器页表和I/O页表,然后向处理器和IOMMU发送相应的页失效命令。不同的是,IOMMU在改变I/O页表后需要页失效命令,而处理器在改变叶页表条目时不需要这样的操作。总的来说,IOMMU和GART在这方面相似,但IOMMU提供了更多的保护和转译功能。

2. 取代设备排除向量机制

设备排除向量(DEV)是一种基本的安全机制,引入于AMD64安全虚拟机器(SVM)架构中。DEV类似于IOMMU,它允许将I/O设备归类到不同的区域(domain)。

每个区域都有一个位向量,由物理页面地址索引,用于指示该区域中的I/O设备是否被允许访问相应的物理页面。IOMMU提供保护和转译功能。如果只需要进行保护,软体可以建立身份映射(identity-mapped)的I/O页表,以指定所需的保护措施。

3. 32位到64位传统I/O设备映射

随著大容量内存的普及,传统32位元设备无法随意访问系统内存,导致操作系统需区分低内存和高内存,并进行繁复管理。为了解决问题,某些系统使用GART,但这引入了复杂性和性能成本。相比之下,IOMMU提供更优越的解决方案,全面转译I/O设备地址,并允许各设备独立管理,避免性能问题。

4. 用户模式设备访问

IOMMU在保护和管理I/O设备存取方面扮演关键角色,确保只有透过I/O页表明确映射的页面可以被访问。启用使用者层级的I/O设备存取需要考虑设计,包括DMA的保护和重新映射,以及IOMMU在中断管理上的协助。系统软体需评估是否需要锁定可能被使用者层级进程控制的I/O设备访问的所有页面,而可选的外设页请求(PPR)机制可帮助避免锁定所有页面的需求。



5. 在虚拟机中由访客端存取设备端

IOMMU可用于让未经修改的虚拟机器客户操作系统直接访问I/O设备。这种情况是允许使用者层级访问I/O设备的一种特殊情况。要实现这一点,需要考虑客户端无法通知虚拟机管理程式 (Hypervisor) 哪些页面I/O设备可能访问。客户端的I/O页表映射客户端物理地址到系统物理地址。若虚拟机运行在嵌套分页下,使用与IOMMU兼容的嵌套分页表,则IOMMU可直接与主机CPU页表共享。多个I/O设备可共享相同的DomainID,以提高效能。最后,使用大页分配客户端内存可增加I/O吞吐量,并降低IOMMU翻译快取的抖动风险。

6. 虚拟化IOMMU

IOMMU在虚拟机管理程式(HV)中的软体模拟。HV需要模拟IOMMU配置寄存器和MMIO映射命令寄存器,以及维护实际和虚拟的Device Table。由于性能原因,HV推荐客户端在启动IOMMU命令处理前将批量命令排队到IOMMU的命令缓冲区。此外,HV需建立影子I/O页表以供实际IOMMU使用,同时报告IOMMU可选功能的子集。

7. 虚拟化用户模式设备访问

一个具有双层转译的IOMMU在执行系统保护策略的同时,允许在虚拟化系统中由用户层级进程正确控制任意I/O设备。它确保了系统保护策略的执行,同时允许用户层级进程正确控制I/O设备。IOMMU转译I/O设备的内存访问,只允许访问已由相应I/O页表映射的页面。这样一来,用户进程只能访问其有权限访问的页面,而无需Hypervisor或操作系统的介入。另外,除了地址转译外,启用用户层级I/O设备还需要考虑其他设计方面,例如中断的重新映射。系统软体需要评估是否需要锁定所有可能被用户层级进程控制的I/O设备访问的内存页,并且一些外设装置可能支持ATS协议,可以利用外设页面请求机制而无需锁定所有页面。

★博文内容参考自 网站,与平台无关,如有违法或侵权,请与网站管理员联系。

★博文作者未开放评论功能

参考来源

false: https://www.amd.com/content/dam/amd/en/documents/processor-tech-docs/specifications/48882_IOMMU.pdf