IoMmu model
在IoMmu模型中,每个进程都有自己的虚拟地址空间,这个虚拟地址空间被CPU和GPU共享并被OS内存管理器管理。
为了访问内存,GPU发送会一个数据请求给附属的IoMmu。这个请求由共享虚拟地址和进程地址空间标识符(PASID)组成。IoMmu单元使用共享页表执行这个地址转换过程。如下图所示:
KMD通过设置DXGK_VIDMMCAPS::IoMmuSupported能力来表示支持IoMmu模型。当这个标志被设置后,VMM会自动注册任何通过IoMmu使用GPU的进程,并获得这个进程地址空间的PASID。PASID会在设备被创建时传给驱动。
Primary资源在被显示之前,会先被VMM映射到aperture段中,这样确保了显示控制器会被真正的访问到这些资源。
在IoMmu模型中,驱动不断使用VMM的Allocate服务为GPU分配视频内存。这就让UMD能够实现residency模型,以及支持MS DX资源共享模型,并且确保了Primary Surface对于内核可见,在显示之前能被映射到aperture上。
在第一级地址翻译(tile资源地址转到CPU/GPU共享地址)完全控制在由UMD在用户模式中控制。