4.1 后备存储概述:两类轻量后备与 TTM 取舍

发布时间:2026/10/18 13:17:47

4.1 后备存储概述:两类轻量后备与 TTM 取舍 到这里我们已经走完 GEM 的用户态抽象第三章。一个很自然的问题浮现出来drm_gem_object只是一个「壳」它下面真正的物理页到底从哪来、由谁管第三章 3.1 已经埋下伏笔——GEM 把「对象身份」与「后备存储」分离后者是一个可插拔的选择同一个drm_gem_object换一种后备存储即可适配不同设备形态。落到实现上后备存储分成两大类、共三种方案本章讲其中的「轻量」一类第五章讲「重型」的 TTM轻量后备本章面向无专用显存VRAM的设备页直接来自系统内存。按「是否要求物理连续」又分两种——drm_gem_dma_object基于 CMA 的物理连续内存最简与drm_gem_shmem_object基于 shmem 的可换出匿名页更通用重型后备第五章面向有 VRAM 的独显由TTM管理 system RAM ↔ VRAM 的放置、迁移与驱逐。本节作为全章概述回答三个问题为什么轻量后备不走 TTM两类轻量后备各自解决什么本章按什么顺序展开具体实现留给后续各节。1、问题的根源不是所有 GPU 都有 VRAMDRM 的显存管理长期是围绕「独显 VRAM」建模的。但现实里一大类设备根本没有板载显存它们的缓冲区只能落在普通 system RAM 上集成显卡iGPU与 CPU 共享同一份内存各类 SoC GPUMali、Adreno、树莓派 VC4/V3D 等统一内存架构UMA虚拟 GPU比如virtio-gpu——guest 侧压根不存在物理显存BO 就是一批 guest 系统内存页。这类设备的共同特征叫UMAUnified Memory Architecture统一内存架构CPU 与 GPU 共用系统内存没有「显存 ↔ 系统内存」这道搬迁墙。对 UMA 设备来说「BO 的页从哪来」这个问题的答案极其朴素就是从系统内存里分配一批页pin 住给设备用用完释放。没有 VRAM、没有放置策略、没有驱逐迁移。2、为什么不直接用 TTM既然 DRM 已经有了 TTM为什么不让 UMA 设备也走 TTM因为TTM 的核心价值恰恰是 UMA 设备用不上的那部分。TTM 存在的理由是解决三件事Placement放置一个 BO 可以放在 VRAM、GTT 或 system 多个「内存域」需要选择与描述Migration迁移在这些域之间搬数据比如把 BO 从 system 搬进 VRAM 再搬回来Eviction驱逐显存不够时按 LRU 把别的 BO 踢出 VRAM 腾地方。这三件事都围绕「有一块稀缺的 VRAM 要精打细算」而设计。可 UMA 设备只有一种内存域——system RAMBO 永远待在那儿不需要 placement只有一个候选不需要 migration没有第二个域可搬不需要 VRAM eviction没有 VRAM。于是如果强行套 TTMUMA 驱动要为一整套用不上的机制买单复杂的ttm_resource/ttm_resource_manager/ placement 数组 / move 回调……成本全付收益为零。一句话TTM 是为「稀缺 VRAM 的精细调度」而生的重型框架UMA 场景没有 VRAM这套调度纯属负担。3、它在专栏主线中的位置回到本专栏「BO 生命周期」的主线drm_gem_shmem_helper与 TTM 是同一问题的两条并列路径drm_gem_dma_object4.2drm_gem_shmem_object4.3~TTM第五章面向场景无 VRAM、需物理连续UMA / 无专用显存有 VRAM 的独显内存域只有 system RAM只有 system RAMVRAM GTT system 多域页来源CMA 物理连续内存dma_allocshmem 可换出匿名页page pool / VRAM可否换出否钉死是可换出/回收由放置策略决定有无放置/迁移/驱逐无无有placement / move / eviction复杂度最轻轻量 helper重型 framework典型用户display controller、无 IOMMU 的 SoC、v4l2virtio-gpu、iGPU、SoC GPUamdgpu、nouveau、radeon读者读到这里应建立的核心认知是「GEM 抽象之下并非必然是 TTM」。有 VRAM 走 TTM 的重型调度无 VRAM 则走轻量后备——需要物理连续用 DMA-CMA否则用 shmem——它们与 TTM 平级各司其职。4、两类轻量后备各解决什么两类轻量后备都从系统内存取页区别在于设备能不能处理分散的页设备只能访问一段连续地址不少 display controller、没有 IOMMU 的 SoC 外设BO 必须物理连续用drm_gem_dma_object。创建时从 CMA 一次分配、钉死到底。实现最简单但连续内存稀缺也不能换出设备能处理分散的页有 IOMMU 或支持 scatter-gatherBO 不需要连续用drm_gem_shmem_object。按需取页闲置时可以换出。更通用代价是要管理页的借还、pin 与回收。选择规则只有一句需要物理连续选 DMA-CMA否则选 shmem。至于为什么偏偏是 shmem 文件而不是别的内存来源4.3 专门讨论。5、本章路线4.2 DMA-CMA最简后备用它走通「对象 后备页 用户态/内核态访问」的最小闭环4.3 为什么是 shmem从 BO 的使用需求到 GEM 框架层对后备的要求再逐层检验 shmem 文件4.3.14.3.8 shmem helper结构、建立、资源模型、核心流程、CPU 访问、回收、共享与 driver 集成4.4 应用实战用 virtio-gpu GUEST blob 把整章串起来。shmem helper 与 TTMttm_tt的对比辨析放在第五章 5.6.6那时两边都已讲过。6、本节小结GEM 把「对象身份」与「后备存储」分离后备存储是可插拔的选择存在一大类无专用显存的设备iGPU / SoC GPU / virtio-gpu / display controller它们的 BO 页只能来自系统内存用轻量后备即可轻量后备分两种drm_gem_dma_objectCMA 物理连续、钉死、最简与drm_gem_shmem_objectshmem 可换出、更通用、天然支持 dma-buf 共享TTM 的价值placement / migration / eviction都围绕「稀缺 VRAM」展开对无 VRAM 设备是用不上的负担——所以轻量后备与 TTM 是「BO 的页从哪来」的并列路径而非上下级。下一节我们先从更简单的drm_gem_dma_object入手——看 CMA 如何一次性分配物理连续内存、如何 mmap/vmap、回调表长什么样用它把「对象 后备页 用户态访问」这条最小闭环走通随后从 4.3 起再进入更复杂、更通用的drm_gem_shmem_object。
延伸阅读

更多相关文章

2026/10/18 13:17:47

WinDbg实战:Windows内核调试与蓝屏转储分析全链路指南

简介:本资源是面向Windows系统开发者、驱动工程师及高级运维人员的Windbg调试工具实战资料包,聚焦内核与用户态程序的深度分析、蓝屏崩溃排查及性能瓶颈定位等核心场景。压缩包共307个文件,涵盖82个DLL(调试扩展与接口模块&#x…

2026/10/18 13:12:47

计算机一级考试复习资料.doc高效使用指南:从“存了”到“用起来”

简介:计算机一级复习文档是一份面向全国计算机等级考试一级考生的知识点速记与选择题练习文档,适合考前冲刺、基础薄弱者系统回顾以及课堂教学辅助使用。文档以选择题为主线,浓缩了计算机发展历程与四代划分、冯诺依曼原理、二进制及常用存储…

2026/10/18 14:32:54

Python+yt-dlp+ffmpeg:B站视频批量下载与弹幕获取完整指南

简介:面向B站视频批量下载与处理的Python自动化工具,依托yt-dlp与ffmpeg实现高清画质解析、弹幕提取及多格式转换,支持AV号、BV号和完整链接三种输入方式,可满足视频学习、研究分析、素材整理及弹幕趋势观察等场景需求。压缩包共7…

2026/10/18 14:32:54

sophus非模板类库改造:提升编译速度与接口稳定性

简介:Sophus非模板类库是一份面向C开发者、机器人学与计算机视觉方向学习者的三维几何运算资源,聚焦SO(3)旋转群与SE(3)特殊欧几里得群的高效处理。其非模板设计降低了编译复杂度与代码体积,同时保持接口简洁易读,适合需要处理刚体…

2026/10/18 14:32:54

模型预测控制在无人艇控制中的实战经验:从轨迹跟踪到避障

做无人艇控制这几年,我有个很深的感触:很多团队把硬件折腾得漂漂亮亮,电机、电池、通讯一套下来花了不少钱,结果一下水就露馅——航迹走不直、抗不了风、避障躲不过去。问题基本不在船体,而在控制器。早些年大家最常用…

2026/10/18 14:32:54

【C++STL】unordered_map和unordered_set的使用

为什么我们需要“无序”? 在学习 C 的过程中,我们首先接触的关联式容器通常是 set 和 map。它们底层由红黑树实现,能够自动将元素按照 key 的大小排序,遍历时得到一个有序序列,增删查改的时间复杂度稳定在 O(log N)。…

2026/10/18 14:32:54

ProFindBound:二维点云边界提取与B样条轮廓拟合工具链

简介:本资源是一套基于C与PCL库实现的二维轮廓重建系统,面向点云处理初学者及计算机视觉方向开发者,解决从原始三维点云中自动提取并拟合光滑闭合边界曲线的核心问题。系统完整覆盖投影降维、凹包边界提取、K近邻逆时针排序、Blossom算法驱动…

2026/10/18 14:27:53

冒险岛085服务端源码进游戏实战:登录链路打通与避坑指南

简介:这份冒险岛085服务端源码面向游戏开发学习者与私服研究者,提供了一套可实际进入游戏的Java服务端实现,适合想深入理解2D横版网游后台运作机制、进行二次开发或功能修复的开发者。压缩包内共456个文件,全部为java源码&#xf…

2026/10/18 0:01:50

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/18 0:01:50

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑