ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

第十章 GPU 虚拟地址空间管理:10.9 本章小结

第十章 GPU 虚拟地址空间管理:10.9 本章小结

1. 本章小结

本章讨论了 GPU 虚拟地址空间的管理。与 CPU 内存管理对照可以看出,GPU 内存管理在结构上沿用了地址空间、后备存储、反向映射与回收的分层,差异来自四项约束:

  • 管理单位是 BO 而不是页;
  • 多数 GPU 不能在作业执行中从缺页恢复,映射必须预先建立;
  • 页表写入与数据迁移由 GPU 引擎异步完成,先后顺序以 fence 表达,fence 信号路径上不能分配内存,也不能等待回收路径可能持有的锁;
  • GPU 虚拟地址由用户态选择,内核只记录与检查映射。撤销与恢复映射因此分为提交式、长时运行与缺页三种模式,提交式把 CPU 上的“访问时缺页”推迟为“提交前统一恢复”。

DRM 的寻址模型经历了三种形态:

  • 提交时定址由内核分配全局地址并在提交时回填重定位;
  • 每进程 VM 使地址交由用户态分配,重定位随之消失,但提交仍携带 BO 列表;
  • VM_BIND 把绑定变为队列上的异步操作,支持部分与稀疏绑定,提交不再携带 BO 列表。

演进的主线是地址分配权下放到用户态,映射生效的时机提前到绑定时,提交路径上按 BO 逐个处理的工作转化为 VM 中长期维护的状态。支持 VM_BIND 的驱动由此承担区间簿记、对象关联、加锁与驻留、页表与 TLB、异步绑定五项职责。drm_gpuvm 是由驱动调用的库,承担其中与硬件无关的部分,页表与绑定队列仍由驱动实现。

drm_gpuvm 以三个对象描述地址空间:drm_gpuvm表示地址空间,drm_gpu

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进