Device paging queues(MSDN翻译)

Device paging queues

被VMM暴露的各种服务会花掉不少时间来完成。例如要让一个Allocation resident,可能涉及到从页文件中传输获得Allocation中一些长时间不用的内容。保留GPU VA或者映射VA到一个已经resident的allocation来说并不需要太多时间,但是也涉及页表立即的操作,这个操作就需要在分页引擎中排队(queue onto paging engine),这可能需要等一会儿才会被执行完成。

与其强制请求这些服务的线程一直等到这些服务执行完成,VMM使用异步队列实现这些服务。这个异步队列被称作设备分页队列(device paging queue)。

每个图形设备都有一个专用的分页队列。不同的VMM操作请求在VMM线程池中排队等待执行。设备分页Fence对象与设备分页队列相关联,队列中的每个操作请求都会得到一个唯一的Fence值,这个值会在VMM完成服务操作的时候被得到信号。一个能被VMM立即处理的操作会返回的Fence值为0。

设备分页fence是一个常规的被监控fence对象,UMD能够等待VMM CPU或GPU服务。

通常情况下UMD尽可能希望进行同步操作,这个同步操作将使一个GPU等待排队进入一个上下文环境中, 这个上下文依赖于请求对应的VMM操作。例如,给一个tile资源保留VA之后,UMD必须保证在GPU引擎开始访问这个tile资源的VA范围之前,一直等待这个保留操作完成。

为了获得设备Fence对象的引用,一个新的DDI接口GetDevicePagingFenceObjectCb被加入到UMD中。

下面图示了整个设备分页队列工作流程:

Device paging queues(MSDN翻译)