在理解了 amdgpu_bo 的物理地址和虚拟地址后,最后就差怎么把这两者关联起来了,这就是 GPU 页表。
本文从构建和更新 GPU 页表的视角,分析虚拟地址和物理地址分配到页表项写入页表的全流程中的关键概念和操作。这是对 amdgpu_bo 的管理和使用的另一个视角理解,不要错过。
1. 页表管理架构
AMDGPU 的页表管理采用分层架构,从用户空间的 ioctl 调用到硬件 MMU 的页表遍历,整个流程涉及多个软件层次。
1.1 流程总览
先看个全貌,不一定要理解这里面的每一个过程,后面会详解每个过程,然后再回来看。白话的流程就是:
- 生成虚拟地址;
- 申请物理页;
- 物理页与虚拟地址做映射关联;
- 把这种关联写入PT/PD;
- 把PD基地址交给硬件;
- 硬件MMU做转换。
每一步是怎么实现的,涉及哪些数据结构,结构间的关系是什么样的,都是理解页表机制