IOMMU地址转换原理

一、MMU VS IOMMU

Fig1. MMU地址转换框图

Fig2. 同一虚拟机下IOMMU地址转换框图

Fig3. 不同虚拟机下IOMMU地址转换框图

二、某个IO DEVICE如何找到其对应的IOPT并完成地址转换?

设备发起DMA请求时,会将自己的Source Identifier(包含Bus/Device/Func)和当前进程的PASID包含在请求中,IO MMU根据该标识完成映射。过程如下:

Fig4. IOMMU页表查询过程

查询详细过程过程如下:

(1) 用device id号查询DTE表,找到一个DTE表项,内容如下:

(2)通过DTE表项中的GCR3 Table Root Pointer找到GCR3 L1表(最高支持L3级)基地址。

(3) 用PSAID查询(最高L3级查询)GCR3表,找到对应PASID和device ID的GCR3表项。

(4) GCR3表项保存了IOMMU对应于PASID和device ID的页表的基地址,IOMMU用该页表对IOVA进行转换,即可得到IOPA。

三、多进程访问IOMMU

现在大部分IOMMU,都支持多进程访问。比如我有两个进程同时从用户态访问设备,他们自己管理iova,这样,他们给iommu提供的iova就可能是冲突的。所以,IOMMU硬件同时支持多张iopt,用进程的id作为下标(对于PCIE设备来说,就是pasid了),Fig.4展示pasid在GPU和CPU地址空间share的一个应用:

Fig.5 CPU和GPU地址空间共享


版权声明:本文为denglin12315原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。