开启 GPU 存储探索系列终于要开启我此前一直不敢触碰的 GPU 存储系列了。先放一张图,把核心关系直观呈现出来,以此作为这个系列的起点,并以此纪念。AMD的图形显卡和计算卡驱动中的buffer object(BO)实现,是学习 gem 和 ttm 技术应用的完美教程。欢迎想理解和学习这些技术的驱动开发人员一起探讨(请点击文末社区链接,入群探讨与学习)。注:图中 “kfdm_mm” 为笔误,正确应为 “kgd_mem”,此处不做修改,还望大家理解。对这个图做个简单解释:一个BO有两部分组成:虚拟地址部分和物理地址部分。对于普通用户态应用程序,其访问的变量地址均为进程独立的虚拟地址。该虚拟地址通过内存管理单元(MMU)的映射机制,关联到实际的物理内存地址 —— 即 CPU 可直接寻址的物理地址。在涉及 GPU 的应用场景中,BO 需支持 CPU 访问、GPU 访问及 DMA 访问等多设备访问需求。不同访问者(CPU、GPU、DMA)基于自身的地址映射体系,形成了对同一 BO 的不同地址视角,即对应不同的地址空间。本系列围绕多地址空间访问相关机制展开深度分析。这里我们按照虚拟地址和物理地址来进行区分。实际上虚拟地址是有多个的,只要是访问者发出的需要经过对应 MMU 转换的地址,都可以理解为虚拟地址。