1. 概念
1.1 什么是 drm_syncobj
DRM Sync Object(同步对象,简称 syncobj)是 Linux DRM子系统中用于 GPU 命令同步的内核抽象。syncobj 的设计初衷是为用户空间提供一种高效、灵活的 GPU 任务同步原语,主要用于显卡驱动和用户空间(如 Vulkan、OpenCL、OpenGL 等)之间的同步需求。
syncobj 的核心机制是包装一个指向 dma_fence 结构体的指针(可能为 NULL),通过 ioctl 接口,用户空间可以创建、销毁、导入、导出、信号、重置、等待等操作 syncobj,从而实现 GPU 命令流的精细同步。
1.2 设计目标
-
跨进程/跨驱动共享:syncobj 可通过 fd 句柄在进程间传递,实现多进程/多驱动同步。
-
支持二元与时间线语义:既可作为简单的“signaled/unsignal”二元同步原语,也可作为时间线(timeline)同步原语,支持多点同步。
-
高效用户空间接口:通过一组 ioctl,用户空间可灵活操作 syncobj,满足 Vulkan 等现代图形 API 的同步需求。
drm_syncobj是为用户空间设计的,因此内核自身不会使用该结构体,只有各家的GPU用户态驱动才会使用。<
订阅专栏 解锁全文
1168





