Linux DRM 内存管理子系统的概念关系理解:gem、ttm、drm_buddy

概述

在 Linux 直接渲染管理器子系统中,drm_buddy、GEM 和 TTM 是三个重要的内存管理组件。它们并不是互斥的关系,而是服务于内存管理堆栈的不同层级,协同工作以实现高效的 GPU 内存管理。

核心组件

1. GEM

定位:用户空间 API 和缓冲区句柄管理

主要职责
  • 为用户空间应用程序(如 Mesa/OpenGL)提供标准的缓冲区管理 API
  • 通过 ioctl 接口管理内存句柄(handles)的创建、映射和共享
  • 处理缓冲区对象的引用计数和生命周期管理
设计特点
  • 简洁性:最初为统一内存架构(UMA)系统设计,避免复杂的内存迁移
  • 硬件目标:主要面向集成显卡,GPU 共享系统主内存
  • 用户友好:提供简单直观的用户空间接口
使用范围

几乎所有现代 DRM 驱动程序都使用 GEM 作为用户空间接口标准。


2. TTM (Translation Table Manager)

定位:高层缓冲区放置与迁移管理器

主要职责
  • 管理缓冲区对象的完整生命周期
  • 决定缓冲区应该存放的位置(VRAM、GTT 或系统内存)
  • 处理内存域之间的缓冲区迁移和交换
  • 实现复杂的内存驱逐策略
设计特点
  • 复杂性高:专为具有多种内存类型的独立显卡设计
  • 硬件目标:独立显卡,管理专用 VRAM
  • 功能全面:处理系统 RAM 和 VRAM 之间的所有复杂操作
使用范围
  • AMD 驱动程序(amdgpu)
  • NVIDIA 开源驱动(Nouveau)
  • VMware 虚拟显卡驱动
典型工作流程
用户请求 → TTM 评估 → 选择内存域 → 必要时驱逐旧缓冲区 → 调用底层分配器

3. drm_buddy

定位:底层物理块分配器

主要职责
  • 管理内存池(如 VRAM)的内部物理布局
  • 使用 buddy 算法进行高效的页级别分配
  • 减少内存碎片,提高分配效率
  • 作为 TTM 或其他管理器的后端分配引擎
设计特点
  • 模块化:可以被不同驱动程序插入使用
  • 硬件目标:现代独立显卡的 VRAM 管理
  • 专注性:专注于 buddy 分配算法的实现
使用范围
  • Intel 驱动程序(i915/Xe)
  • AMD 驱动程序(amdgpu)作为 TTM 的底层分配器
Buddy 算法优势
  • 快速分配和释放
  • 自动合并相邻空闲块
  • 减少外部碎片
  • 支持不同大小的内存请求

三者关系详解

drm_buddy 与 TTM 的关系

虽然 TTM 是处理复杂操作的高层管理器,drm_buddy 是其底层分配后端:

方面TTMdrm_buddy
作用域管理缓冲区对象生命周期,决定存放位置管理内存池内部的物理块分配
层级高层策略管理底层分配算法
职责WHERE(在哪里分配)HOW(如何分配物理页)
复杂度高,处理迁移、驱逐等复杂逻辑相对简单,专注分配算法

协作示例

amdgpu 驱动: TTM (决策层) → 决定使用 VRAM ↓ drm_buddy (执行层) → 在 VRAM 中找到具体的物理页

drm_buddy 与 GEM 的关系

GEM 提供用户空间接口,drm_buddy 是内核内部工具:

方面GEMdrm_buddy
接口层用户空间 API(ioctl)内核内部接口
可见性对应用程序可见应用程序不可见
抽象级别高层缓冲区抽象底层物理内存管理
交互方式应用程序直接调用仅被内核驱动使用

协作示例

用户空间应用: 调用 GEM ioctl (创建缓冲区) ↓ 内核驱动接收请求 ↓ 调用 drm_buddy 分配物理内存 ↓ 返回 GEM 句柄给用户空间

完整对比表

特性GEMTTMdrm_buddy
主要角色用户空间 API & 句柄管理高层缓冲区放置 & 迁移底层物理块分配
硬件目标UMA 系统(集成显卡)独立显卡(专用 VRAM)独立显卡(VRAM 管理)
复杂度低:简单接口,避免复杂迁移高:处理所有内存类型和迁移中:模块化,专注 buddy 算法
层级用户空间接口层内核策略层内核执行层
使用者几乎所有现代驱动AMD, Nouveau, VMwareIntel (i915/Xe), AMD (amdgpu)
内存类型主要是系统内存VRAM, GTT, 系统内存主要是 VRAM
用户可见性可见(通过 ioctl)不可见不可见

工作流程示例

场景:应用程序请求创建一个 GPU 缓冲区

1. 用户空间应用 └─> 调用 GEM API: "我需要一个 16MB 的缓冲区" │ 2. GEM 层(内核) └─> 创建 GEM 对象,分配句柄 │ 3. TTM 层(如果驱动使用 TTM) └─> 决策:"这个缓冲区应该放入 VRAM" └─> 检查 VRAM 空间 └─> 如果需要,驱逐旧缓冲区 │ 4. drm_buddy 层 └─> 在 VRAM 中执行 buddy 分配 └─> 找到连续的物理页块 └─> 返回物理地址 │ 5. 返回路径 └─> TTM 更新页表 └─> GEM 完成对象初始化 └─> 返回句柄给用户空间

驱动程序实现模式

模式 1:GEM + drm_buddy(简单型)

适用于:现代集成显卡或简单独立显卡

Intel i915/Xe: - GEM 提供用户接口 - drm_buddy 管理 VRAM 分配 - 无需 TTM 的复杂迁移逻辑

模式 2:GEM + TTM + drm_buddy(完整型)

适用于:复杂的独立显卡

AMD amdgpu: - GEM 提供用户接口 - TTM 处理内存放置和迁移 - drm_buddy 作为 TTM 的底层分配器

模式 3:仅 GEM(传统型)

适用于:简单的 UMA 系统

部分集成显卡驱动: - 仅使用 GEM - 直接使用系统内存 - 无需 VRAM 管理

关键概念总结

一句话总结

GEM告诉内核 “我需要一个缓冲区”
TTM决定 “这个缓冲区应该放入 VRAM”
drm_buddy在 VRAM 中找到确切的物理页来存放它

层次关系

┌─────────────────────────────────────┐ │ 用户空间应用(OpenGL/Vulkan) │ └──────────────┬──────────────────────┘ │ ioctl ┌──────────────▼──────────────────────┐ │ GEM (用户空间接口层) │ └──────────────┬──────────────────────┘ ┌──────────────▼──────────────────────┐ │ TTM (策略与迁移层) - 可选 │ └──────────────┬──────────────────────┘ ┌──────────────▼──────────────────────┐ │ drm_buddy (物理分配层) │ └──────────────┬──────────────────────┘ ┌──────────────▼──────────────────────┐ │ 物理 VRAM / 系统内存 │ └─────────────────────────────────────┘

实际应用场景

场景 1:游戏加载大纹理

  1. GEM:应用请求创建纹理缓冲区
  2. TTM:判断纹理应该在 VRAM 中以获得最佳性能
  3. drm_buddy:在 VRAM 中分配连续的物理页
  4. 结果:GPU 可以高速访问纹理数据

场景 2:内存压力下的缓冲区驱逐

  1. TTM:检测到 VRAM 不足
  2. TTM:选择不常用的缓冲区驱逐到系统内存
  3. drm_buddy:释放 VRAM 物理页
  4. drm_buddy:为新请求分配刚释放的空间

场景 3:多进程共享缓冲区

  1. GEM:进程 A 创建缓冲区,获得句柄
  2. GEM:通过 DMA-BUF 导出句柄
  3. GEM:进程 B 导入句柄,共享同一物理内存
  4. 底层:drm_buddy 分配的物理页被两个进程共享

参考资源

  • Linux DRM 官方文档
  • Intel i915 drm_buddy 实现
  • AMD GPU 驱动文档

结论

DRM 内存管理子系统通过三个层次的组件实现了灵活高效的 GPU 内存管理:

  • GEM提供统一的用户空间接口
  • TTM处理复杂的内存策略和迁移
  • drm_buddy提供高效的物理内存分配

这种分层设计使得驱动程序可以根据硬件特性选择合适的组件组合,既保证了接口的统一性,又提供了实现的灵活性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1183407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qwen3-VL视频动态理解实战:数小时内容秒级索引系统搭建教程

Qwen3-VL视频动态理解实战:数小时内容秒级索引系统搭建教程 1. 引言:为什么需要视频秒级索引系统? 随着多模态大模型的快速发展,传统视频分析方式已难以满足高效检索与深度语义理解的需求。尤其在教育、安防、媒体归档等场景中&…

2026高容量聚合物锂电池厂家哪家好?实力品牌推荐 - 品牌排行榜

高容量聚合物锂电池作为现代电子设备的核心能源组件,凭借能量密度高、循环寿命长、安全性好等特点,广泛应用于智能穿戴、便携式医疗设备、无人机等领域。选择可靠的生产厂家,对于保障产品性能与稳定性至关重要。一、…

本科生毕业论文选题Top10平台测评,附详细使用技巧解析

10大论文选题工具核心对比 排名 工具名称 核心功能 效率评分 适用场景 1 aicheck 智能选题大纲生成 ★★★★★ 完全无头绪时的选题生成 2 aibiye 选题优化可行性分析 ★★★★☆ 已有初步方向的优化调整 3 知网 学术资源库选题参考 ★★★★☆ 专业领域深度…

MyBatis-Plus 默认不更新 null?这 4 种方法帮你搞定

在 MyBatis-Plus 里,更新 null 字段是一个非常常见、也非常容易踩坑的问题。 很多人会遇到这种情况:我明明 setXxx(null) 了,为什么数据库里还是原来的值?下面我按 原因 → 解决方案 → 使用建议 来整理一下。一、为什么 MyBatis-…

高效AI摘要与润色工具:九款产品的性能测试与用户体验研究

核心工具对比速览 工具名称 主要功能 生成速度 适用场景 独特优势 AIBiye 论文全流程辅助 3-5分钟/万字 开题到定稿 实证研究自动生成 AICheck 文献综述专家 2分钟/篇 文献梳理阶段 知网文献智能解析 AskPaper 学术问答助手 实时响应 研究过程答疑 支持中英…

Python反爬机制应对从基础到实战,破解网站反爬策略

在数据采集领域,反爬机制是爬虫开发绕不开的核心问题。不同网站的反爬策略从简单的UA验证到复杂的验证码、动态渲染、行为检测层层递进,单纯的requests请求早已无法满足需求。本文基于实战经验,系统讲解Python应对各…

Z-Image-Turbo批量生成避雷指南,别再OOM了

Z-Image-Turbo批量生成避雷指南,别再OOM了 在AI图像生成的实际应用中,显存溢出(Out of Memory, OOM) 是最常见、最令人头疼的问题之一。尤其是在使用高性能但资源消耗大的模型如Z-Image-Turbo进行批量图像生成时,稍有…

深度解析 2026 托福雅思培训班课程辅导推荐:优质机构口碑排名与提分效果实测 - 老周说教育

在全国核心区域,雅思培训市场犹如一片迷雾重重的丛林,“乱象与机遇并存” 的格局让无数考生深陷困境。首当其冲的是基础差异带来的适配难题:英语基础薄弱的考生,面对动辄上万词汇量要求的高阶课程,如同盲人摸象,…

2026年影视后期机构怎么选?一家靠谱机构的权威解析 - 华Sir1

随着短视频和数字内容行业的持续爆发,影视后期人才的需求量在2025年达到了新高。无论是企业宣传、影视制作,还是个人内容创作,掌握专业的影视后期技能已成为职场加分项甚至是转型利器。面对市场上众多的培训机构,如…

国产防脱洗发水前十名榜单最新出炉,控油防脱怎么选?宁山堂获医生认可,控油防脱顶流 - 博客万

随着脱发问题呈现年轻化、普遍化趋势,控油防脱已成为全民关注的头皮护理核心需求,国产防脱洗发水凭借针对性研发优势逐渐占据市场主流。本次最新出炉的国产防脱洗发水前十名榜单,聚焦控油与防脱双重功效,精准匹配国…

YOLOv8数据接口异常?API调用问题排查部署案例

YOLOv8数据接口异常?API调用问题排查部署案例 1. 引言:工业级目标检测的现实挑战 在智能制造、安防监控、零售分析等场景中,实时目标检测已成为不可或缺的技术能力。基于 Ultralytics YOLOv8 的“鹰眼目标检测”系统,凭借其高精…

九款智能摘要生成平台的性能对比及用户使用体验分析

核心工具对比速览 工具名称 主要功能 生成速度 适用场景 独特优势 AIBiye 论文全流程辅助 3-5分钟/万字 开题到定稿 实证研究自动生成 AICheck 文献综述专家 2分钟/篇 文献梳理阶段 知网文献智能解析 AskPaper 学术问答助手 实时响应 研究过程答疑 支持中英…

Python 数据分析入门|02:Pandas 数据清洗:缺失值/重复值/异常值处理

上一篇我们用 Pandas 读取了数据,还摸清了数据的“家底”——但实际工作中,你拿到的往往是“脏数据”:比如电商订单表里“销售额”列空了几行、同一订单重复录了3次、销量突然出现10000件(明显是多输了个0)…… 这…

白城市洮北通榆镇赉洮南大安英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

在全球化留学趋势持续升温的2026年,雅思成绩已成为白城市洮北、通榆、镇赉、洮南、大安等区县学子开启国际求学之路的核心凭证,更是职场国际化发展的重要加分项。然而,本地雅思考生普遍面临诸多备考困境:优质雅思培…

x64dbg处理异常机制深入解析

x64dbg 异常处理机制深度剖析:从断点拦截到反调试绕过在逆向工程的世界里,程序的“异常”往往不是错误,而是通往真相的入口。当你面对一个层层加壳、布满陷阱的二进制文件时,真正决定你能否突破防线的,往往不是你是否懂…

如何快速判断一个域名有没有投资空间

很多人做域名投资,最头疼的不是怎么买,而是买之前根本判断不出这个域名值不值得下手。等真正拿到手,才发现要么没人问,要么只能低价出。其实,判断一个域名有没有投资空间,并不需要复杂模型,关键…

2026小程序开发制作公司盘点:优选国内5家靠谱小程序开发公司 - 品牌2025

随着数字化转型的深入推进,小程序已成为企业连接线上线下用户、优化经营链路的核心载体,行业规模持续扩容。据QuestMobile数据显示,2025年中国小程序生态市场规模已突破3.2万亿元,其中开发服务市场规模达920亿元,…

YOLO26 epochs设置建议:200轮训练收敛性实测报告

YOLO26 epochs设置建议:200轮训练收敛性实测报告 1. 实验背景与目标 在深度学习目标检测任务中,训练轮数(epochs)是影响模型性能的关键超参数之一。过少的训练轮次可能导致模型欠拟合,而过多则可能引发过拟合或资源浪…

2026小程序开发制作公司盘点:优选5家小程序开发公司测评 - 品牌2025

一、行业背景:小程序成企业数字化转型核心载体数字化转型已成为企业发展的必然趋势,据《制造业数字化转型能力水平(2025)》数据显示,截至2025年6月底,我国64.2%的企业基本实现全业务流程数字化,77.4%的工业企业…

万能场馆预订系统源码,轻松实现数字化转型,拥抱智能化运营新时代

温馨提示:文末有资源获取方式还在为场馆预订电话响不停、手工登记易出错、场地空置率高等问题烦恼吗?在全民健身热潮下,传统管理方式已成为场馆增长的绊脚石。今天,我们为您介绍一款功能强大的万能场馆预订系统源码,它…