GpuMmu Example Scenarios(MSDN翻译)

GPU内存管理详解
本文详细介绍了GPU内存管理中涉及的多种操作,包括更新页表项映射、内容传输、填充模式、使分配驻留等过程。并通过具体步骤展示了VMM如何通过调用不同命令来实现这些操作。

GpuMmu Example Scenarios

这里列出了更新页表项映射属于一个进程P的Allocation到物理内存的一系列的操作。这里假设页表资源已经resident在GPU的内存段中了。

1.VMM为进程P的根页表资源分配一段在换页进程上下文的虚拟地址。

2.VMM为进程P的页表资源分配一段在换页进程上下文的虚拟地址。

3.VMM调用 DxgkDdiBuildPagingBuffer 以及UpdatePageTable 命令用映射换页进程页表项到进程P的页表和页目录。

4.VMM调用 DxgkDdiBuildPagingBuffer以及FlushTLB(PagingProcessRootPageTable) 命令。

5.VMM调用 DxgkDdiBuildPagingBuffer 以及 UpdatePageTable 命令来使用物理地址信息来填充进程页表项。

6.VMM调用 DxgkDdiBuildPagingBuffer 以及FlushTLB(process P root page table) 命令。

7.换页buffer被提交到换页进程上下文中准备执行。

updating page table entries of a process

Transferring allocation content from one location to another

这里列出了一个Allocation内容从一个位置传输到另一个位置(例如从本地内存到系统内存) 的一系列操作。

1.VMM在换页进程虚拟地址Scratch区域中分配一段虚拟内存给源allocation和目标allocation。

2.VMM调用 DxgkDdiBuildPagingBuffer 以及 UpdatePageTable 命令,这些命令映射用于源虚拟地址范围的换页进程页表项到本地GPU内存中的Allocation的物理地址上。

3.VMM调用DxgkDdiBuildPagingBuffer 以及 UpdatePageTable命令,这些命令映射用于目标的虚拟地址的换页进程页表项到系统内存中。

4.VMM调用 DxgkDdiBuildPagingBuffer以及FlushTLB(paging process root page table)。

5.VMM调用 DxgkDdiBuildPagingBuffer 以及TransferVirtual命令来完成传输操作。

6.换页buffer被提交到了GPU,并在换页进程上下文中执行。

transferring allocation content from one location to another

Filling an allocation with a pattern

下面列出了当Allocation需要被填充pattern时所进行的操作流程。

1.VMM在换页进程虚拟地址Scratch区域中给目标Allocation分配一段虚拟地址范围。

2.VMM调用 DxgkDdiBuildPagingBuffer 以及UpdatePageTable命令。这个命令映射用于目的虚拟地址的换页进程页表项。

3.VMM调用 DxgkDdiBuildPagingBuffer 以及 FlushTLB(paging process root page table)命令。

4.VMM调用 DxgkDdiBuildPagingBuffer 以及FillVirtual命令来完成执行填充操作。

5.换页Buffer被提交到GPU中,并在换页进程上下文中执行。

filling an allocation with a pattern

Making an allocation resident in system memory

D3DKMTMakeResident被调用使Allocation resident时,下面的操作会被执行。假设应用程序进程页表已经resident在内存中了。

在应用程序线程上下文中:

1.分配以及固定(pin)物理系统内存页面给allocation的一段虚拟地址范围(如果这个Allocation时resident在系统内存中).

2.生成用于应用程序设备一个新的换页fence ID。

3.提交 MakeResident 命令到VMM工作线程。

4.返回到应用程序。

在VMM工作线程上下文中:

1.更新应用程序进程页表项。

2.如果Allocation时resident在本地内存段中,就给allocation填充0.

3.提交 SignalSynchronizationObject 命令和换页FenceID一起到调度器。

Initialization of the memory manager control structures

换页进程的初始化

Microsoft DXGK 在图形设备被切换到D0电源设备状态时会初始化换页进程虚拟地址空间。

1.换页进程在 DxgkDdiCreateProcess中被创建。

2.系统设备在 DxgkDdiCreateDevice中创建。在这个方法中KMD能在换页进程地址空间中保留一段的虚拟地址范围。

3.换页进程的页表allocation被创建。

4.页表Allocation被提交到内存段中,这个内存段定义在虚拟地址能力结构中。

5.UpdatePageTable 操作被调用,在其中初始化页表。

客户端进程初始化

当一个新的进程被创建,DXGK将做一下操作:

1.创建最初的一些页表资源

2.当第一个资源从进程中resident时,初始化这些页表资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值