尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
第二章:DRM 框架概述:2.1.3 drm_file — 客户端上下文
2.1 DRM 框架核心对象速览确立了三个对象的关系。三者之中drm_file是BO 主线里出现频率最高的关联对象后续每一章几乎都要触碰它的某个字段。每次用户态open(/dev/dri/renderD128)都会创建一个drm_file实例它封装「某个进程对这块 GPU 的一次打开」的全部 per-client 状态——handle 表、syncobj 表、PRIME 导入缓存、以及驱动私有的 GPU 地址空间。1. 定位一次 open 就是一个隔离的客户端drm_file的粒度是「每次 open 一份」——同一进程 open 两次会得到两个独立的drm_file不同进程之间更是彼此隔离。它承载的所有资源都是per-file的进程 A 的 GEM handle 42 与进程 B 的 handle 42 指向不同对象A 的 GPU 虚拟地址空间与 B 完全独立。这条「per-file 隔离」是理解后续 GEM handle、syncobj、GPUVM 语义的总前提。2. 与 BO 主线直接相关的字段字段含义后续章节使用场景object_idrGEM handle →drm_gem_object *的映射表Ch3drm_gem_handle_create()插入、GEM_CLOSE删除syncobj_idrsyncobj handle →drm_syncobj *的映射表Ch6drm_syncobj_create()/SYNCOBJ_WAITprimePRIME 导入缓存dma-buf → handleCh5避免同一个 dma-buf 重复导入生成多个 handledriver_priv驱动私有指针amdgpu 在此存放amdgpu_fpriv含 ctx_mgr→Ch7、CS→Ch8、VM→Ch9pid/client_id进程标识调试clientsdebugfs、fdinfominor打开的设备节点file-minor-dev反查drm_device区分 primary/render/accel 权限authenticated是否已认证render node 自动认证primary 需要 master 授权object_idr、syncobj_idr、driver_priv是 BO 主线反复出现的三个字段其中driver_priv承载了驱动扩展的全部 per-client 状态下面以 amdgpu 为例展开。3. amdgpu 的 drm_file 扩展amdgpu_fprivDRM 核心把 per-driver 的客户端状态统一交给driver_priv。amdgpu 在 open 时分配一个amdgpu_fpriv挂上去// drivers/gpu/drm/amd/amdgpu/amdgpu.hstructamdgpu_fpriv{structamdgpu_vmvm;// per-client GPU 虚拟地址空间 → Ch9structamdgpu_bo_va*prt_va;// PRT(Partially Resident Textures)structmutexbo_list_lock;structidrbo_list_handles;// CS 提交时的 BO 列表 → Ch8structamdgpu_ctx_mgrctx_mgr;// 上下文管理 → Ch7 scheduler entitystructamdgpu_eviction_fence_mgrevf_mgr;// eviction fence};关键洞察在 amdgpu 中每次open()都会创建独立的amdgpu_vmGPU 页表空间这意味着不同进程有隔离的 GPU 地址空间。这是理解 Ch9 GPUVM 的前提也是「per-file 隔离」在驱动层的直接体现。4. drm_file 的生命周期drm_file的创建与销毁分别挂在open()/close()两端DRM 核心负责通用部分驱动通过drm_driver.open/postclose回调见 2.1.1对称地建立与拆除私有资源open(/dev/dri/renderD128) → drm_open() → drm_file_alloc() // 分配 drm_file初始化 idr 表 → drm_driver.open() // 驱动回调amdgpu_driver_open_kms() → 分配 amdgpu_fpriv → 创建 amdgpu_vmGPU 页表 → 初始化 ctx_mgr ... 用户操作create BO / submit job / ...... close(fd) → drm_release() → drm_file_free() → 遍历 object_idr释放所有 GEM handle减引用 → 遍历 syncobj_idr释放所有 syncobj → drm_driver.postclose() // 驱动回调 → 销毁 amdgpu_vm → 销毁 ctx_mgrflush 所有 entity → kfree(amdgpu_fpriv)close 路径的「对称拆除」保证了进程退出即回收全部 per-client 资源handle 减引用、syncobj 释放、GPU 映射拆除、entity flush无需用户显式清理。5. 与后续章节的关系概览Ch3 GEMhandle 是 per-file 的——进程 A 的 handle 42 和进程 B 的 handle 42 指向不同对象。Ch5 共享PRIME fd 是跨进程的但导入后生成的 handle 仍是 per-file 的prime缓存去重。Ch6 显式同步syncobj 也挂在syncobj_idr与 GEM handle 同为 per-file 句柄。Ch7 Schedulerentity 通常在amdgpu_ctx属于ctx_mgr中创建随 file close 一起销毁。Ch8 命令提交bo_list_handles记录 CS 提交时的 BO 列表。Ch9 GPUVMamdgpu_vm是 per-file 的file close 时所有 GPU 映射被拆除。6. 小结drm_file是「一次 open」的客户端上下文粒度为 per-file所有资源彼此隔离。object_idr/syncobj_idr是 per-file 句柄表driver_priv承载驱动扩展amdgpu 为amdgpu_fpriv。生命周期由open/postclose回调对称管理进程退出即回收全部 per-client 资源。后续每一章几乎都会触碰它的某个字段——这是本专栏最值得优先精读的框架对象。
RELATED

相关推荐

第二章:DRM 框架概述:2.1.2 drm_device — GPU 硬件的内核抽象

第二章:DRM 框架概述:2.1.2 drm_device — GPU 硬件的内核抽象

2.1 DRM 框架核心对象速览确立了三个对象的关系:drm_driver 是静态能力表,drm_device 是每卡一份的运行时实例,drm_file 是每次 open 的客户端上下文。本节把 drm_device 作为一等对象讲清:它的关键字段、driver_features 与 BO 主…

📅 2026/10/11 1:05:24
0-60V6A数控可调电源DIY:半桥开关电源与STM32恒压恒流方案详解

0-60V6A数控可调电源DIY:半桥开关电源与STM32恒压恒流方案详解

简介:本资源为一款基于明纬电气技术路线设计的0-60V/6A大功率可调开关电源完整硬件工程包,面向电子工程师、高校电类专业学生及资深电子爱好者,解决高精度可调电源电路设计、PCB实现与模块化调试等实际开发需求。压缩包共16个文件&#xff0c…

📅 2026/9/30 4:42:21
GB300 NVL72 真比 H200 快 7 倍?性能验证与落地指南

GB300 NVL72 真比 H200 快 7 倍?性能验证与落地指南

GB300 NVL72 性能超 H200 七倍,这类标题在 AI 基础设施群和算力选型讨论里传播得很快。做大模型训练的人看到后,第一反应通常是“换掉现有 H200 集群,训练时间是不是能缩短到七分之一”;做推理服务的人会想“token 成本能不能降到…

📅 2026/10/1 6:16:46
MORE NEWS

更多资讯

📰

Text to SQL系统第三层实现:复杂查询意图识别与优化

1. 项目概述Text to SQL系统作为自然语言处理与数据库技术交叉领域的重要应用,正在深刻改变着非技术人员与数据库交互的方式。这个看似简单的"输入问题,输出SQL"功能背后,隐藏着复杂的实现逻辑和技术挑战。今天我们就来拆解这个系统…

📰

Text-to-SQL系统架构解析与性能优化实践

1. 文本到SQL转换系统的核心价值 在数据驱动的时代,SQL作为与数据库交互的标准语言,其重要性不言而喻。但编写SQL查询需要专业技能,这成为了许多非技术用户获取数据的障碍。Text-to-SQL系统正是为解决这一痛点而生,它允许用户用自…

📰

钉钉办公自动化:OpenClaw Skill原理与应用

1. 项目概述 OpenClaw Skill是一个基于自动化原理设计的办公效率工具,专门针对钉钉平台的操作优化。它能模拟人工操作流程,实现消息自动收发、审批流程处理、考勤数据管理等高频办公场景的自动化。我在实际使用中发现,这个工具特别适合需要频…

📰

AI编程辅助工具:5个提升代码可用性的Prompt模板

1. 项目背景与核心价值 去年团队引入AI编程辅助工具时,我们经历了从"玩具demo"到"生产级应用"的艰难跨越。最深的体会是:需求沟通的质量直接决定了AI产出的可用性。那些模糊的"做个用户管理系统"之类的需求,AI…

📰

云原生智能体协同架构在城市轨道交通中的应用

1. 新一代城市轨道交通云原生智能体协同架构概述城市轨道交通作为现代都市的"大动脉",其运营效率和服务质量直接影响着千万市民的日常生活。近年来,随着云计算、人工智能等技术的快速发展,传统的轨道交通智能化系统架构正面临着前所…

📰

纯前端离散数据分析沙盒:分离度与趋势检验交互式实现

简介:本资源是一份面向统计学与数据科学专业本科生的离散数据分析学期项目实践包,聚焦逻辑回归中‘完美分离’这一典型建模难题,帮助学习者理解其成因、识别方法与多种稳健解决方案。资源共569个文件,含276个CSV格式模拟与实验数据…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬