三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

第三章:GEM分析:3.2 drm_gem_object——GPU 内存对象的核心抽象(静态字段视角)

第三章:GEM分析:3.2 drm_gem_object——GPU 内存对象的核心抽象(静态字段视角)

3.1 节提出了 GEM 的四大设计目标,本节聚焦需求一:统一的 GPU 内存对象抽象,深入分析drm_gem_object如何作为所有 GPU 内存对象的基类,解决驱动间代码碎片化的问题。

drm_gem_object的核心定位是:它不是一个完整的内存管理方案,而是驱动间公共代码的提取物。理解它,需要搞清楚三个问题:它管什么字段、它怎么被初始化、它怎么被驱动扩展。

1. drm_gem_object 解决什么问题

在没有 GEM 之前,每个 DRM 驱动需要自己实现:

  • 对象的引用计数和生命周期管理
  • 用户空间 handle 到内核对象的映射
  • mmap 偏移空间的管理
  • shmem 后端存储的分配
  • 跨进程/跨设备共享(dma-buf)的关联
  • GPU 虚拟地址映射的反向追踪(哪些 GPU VA 映射指向本对象,gpuva字段自 Linux 6.6 引入)

这些代码在每个驱动中大量重复。drm_gem_object把这些公共字段和公共逻辑提取到 DRM core 中,驱动只需要嵌入它并实现自己特有的操作。

2. 核心字段分析

drm_gem_object定义在include/drm

← 返回列表