当前位置: 首页 > news >正文

深入理解 amdgpu SDMA 引擎专栏目录

本专栏以“SDMA 引擎如何被 amdgpu 抽象、驱动与使用”为主线,从硬件的 ring / 指针 / doorbell 出发,逐层深入到驱动的数据结构、函数指针分层、IP 生命周期与中断,最终落到 TTM 迁移、VM 页表更新、SVM 按需迁移三大上层用例。主线硬件版本为SDMA v4.0(Vega,GFX9)——注释完整、结构经典;其它硬件代(v5/v6/v7、LSDMA)的演进差异在第 5 章横向展开。所有内容均基于本仓库 drivers/gpu/drm/amd/amdgpu/ 下的实际源码。

该专栏是2026年08月月度专栏,每周一、三、四、五各放送两篇。已放送的文章会点亮链接,欢迎订阅关注,不迷路。

第一部分:硬件基础

建立 SDMA 硬件侧的最小心智模型:它是 GPU 里的异步搬运工,只认“命令流”。本部分讲清 ring buffer 的生产者/消费者模型、RPTR/WPTR 双指针分工、doorbell 通知机制、“一实例两队列”与多实例的由来,以及命令(packet)的统一骨架——这些是理解后续所有软件代码的物理基础。

标题内容简介
1[SDMA 是什么:GPU 里的异步搬运工]建立“SDMA 是什么、为什么需要它、到底干哪几件事”的直觉,能用一句话讲清它的定位
2[SDMA 硬件模型:队列、指针与 doorbell]ring buffer 工作原理、RPTR/WPTR 双指针分工、doorbell 敲门通知、“一实例两队列”与多实例/分区的由来
3[SDMA 指令集:Packet 格式速览]header = opcode + sub-opcode + 参数的统一骨架,用真实 emit 函数拆解 WRITE/INDIRECT/FENCE/TRAP/POLL_REGMEM

第二部分:软件抽象层

把硬件概念映射到驱动的 C 数据结构,并揭示 amdgpu 应对“十几代硬件”的核心武器——分层 + 函数指针。本部分厘清amdgpu_sdma/amdgpu_sdma_instance/amdgpu_ring的层次,解释四张函数指针表如何屏蔽代际差异,并把 SDMA 放回通用的 ring / IB / 调度器提交框架里看。

标题内容简介
4[数据结构总览:SDMA 在驱动里的实体]amdgpu_sdma/amdgpu_sdma_instance/amdgpu_ring三者的包含关系,及每个关键字段对应硬件的什么
5[通用层与 per-IP 层:函数指针解耦硬件差异,兼看各代演进对比]分层 + 函数指针的解耦机制,并以此为尺标横向对比 v4→v5→v6→v7、LSDMA 各代的实际差异
6[SDMA 如何融入 ring / IB / 调度器体系]SDMA 与 GFX/Compute 共用 ring/IB/job/scheduler/fence 基础设施,区别只在最终 emit 的 packet

第三部分:驱动实现

以 v4.0 为主线,走进 SDMA 的具体驱动实现。本部分跟踪 SDMA 作为一个 amdgpu IP block 的生命周期(两条 ring 何时被创建与启动)、逐项拆开 ring_funcs 的每个 emit 到底写了哪些 dword,并补齐固件加载与中断这两块让引擎“会干活”“能闭环”的拼图。

标题内容简介
7[IP 生命周期:从 early_init 到 hw_fini]SDMA 作为 amdgpu IP block 的生命周期,重点看两条 ring 在哪一步、如何被创建和启动
8[Ring 操作实现:指针、发包与自检]逐项拆开sdma_v4_0_ring_funcs,看每个emit_*/ 指针操作到底写了哪些 dword
9[固件与中断处理]microcode 让引擎会干活、中断让完成能闭环通知,兼述 RAS/ECC 与引擎复位,为调试打底

第四部分:上层如何使用 SDMA

SDMA 存在的意义在于服务上层。本部分先讲一个承上启下的TTM 搬运服务层(把一次搬运封装成带 GART 窗口的可复用凭证amdgpu_ttm_buffer_entity),再落到 SDMA 的三大本职用途——BO 搬运 / TTM 迁移、VM 页表更新、SVM 按需迁移,其中 SVM 是本系列的核心落点。

标题内容简介
10[TTM 缓冲搬运服务层:amdgpu_ttm_buffer_entity]buffer_funcs裸原语高一层的服务层:把“一次 SDMA 搬运”封装成可复用、可并发、带 GART 窗口的执行凭证
11[SDMA 用于 Buffer 搬运与 TTM 迁移]buffer_funcs如何被 TTM 显存管理调用,完成 system memory ↔ VRAM 之间的迁移
12[SDMA 用于 VM 页表更新]vm_pte_funcs(copy/write/set_pte_pde)与amdgpu_vm_sdma如何把一次页表变更编排成 SDMA job
13[SDMA 与 SVM:按需迁移的执行引擎]“SVM 换页/预取/缺页恢复 → VM 页表更新 → SDMA 执行”完整链路,SDMA 同时充当搬运与页表引擎

第五部分:进阶与实战

从“看得懂机制”走向“排得了故障”,并为整个系列收官。本部分给出 SDMA 排障的实战手段,再用一张全景图把全栈串成整体,提炼三大设计哲学与“读懂任意 SDMA 版本”的通用方法论。

标题内容简介
14[调试与观测]ip_dump 寄存器快照、RPTR/WPTR 判读、fence 超时与 guilty 队列、SDMA 中断、固件核对、trace 观测
15[总结与全景图]一张全景图串起全栈、贯穿始终的三大设计哲学、以及读懂任意一代 SDMA 代码的通用方法论

附录

一份速查手册,把三张随手要查的表放在一处:源码文件索引、opcode 速查、IP 版本与芯片对照。

编号标题内容简介
附录[SDMA 速查手册:源码文件 · opcode · 版本对照]A. SDMA 相关源码文件及职责索引;B. 常见 opcode/sub-opcode 速查(GFX9/v4.0 命名);C. SDMA IP 版本、GFX 世代/代表芯片、PAGE 队列特征对照

说明

  1. 目录以“SDMA 从硬件到上层用例”为主线组织,主线硬件为 SDMA v4.0(Vega,GFX9),各代硬件差异集中在第 5 章横向对比。
  2. 阅读建议:硬件三章(1–3)建立直觉即可;软件三章(4–6)是理解一切的骨架,务必读懂“双 ring + 函数指针”;实现三章(7–9)以 v4.0 为主线精读;上层四章(10–13)是落地用例。
  3. 三份附录为速查性内容,可随用随查,无需按顺序通读。
http://www.jsqmd.com/news/1397773/

相关文章:

  • 石家庄买金条去哪?合扬门店金条规格与选购指南 - 拾闻观天地
  • RA-FinBERT:融合领域规则的低资源金融文本情感分类方案
  • C语言位移运算:从基础概念到嵌入式实战应用
  • 多智能体系统一致性控制与Matlab仿真实践
  • 适用于 React 的最佳代码编辑器组件
  • 比亚迪 HyWorldVLA 深度解析:像素级、隐空间、混合三类世界模型原理、架构与落地实战
  • 无货源电商如何实现自动履约?抖音全域适配一键下单工具原理拆解 - 抖掌柜一键下单
  • 从上下文管理到Runtime操作系统:构建高效LLM应用的新范式
  • 标书编制如何借助 AI Agent 落地?哪些云上智能投标工具适配企业规模化应用?:优先评估亚马逊云科技的全流程智能投标方案
  • 从CTF实战看密钥安全:Diffie-Hellman弱随机数漏洞分析与防御
  • K3s 双节点集群部署
  • 空调维修平台哪家收费合理?2026 年上门服务避坑指南与深度体验评测 - 新闻快传
  • 抖音无水印下载工具怎么选?开源神器 douyin-downloader 实测全攻略
  • 2026内蒙古旅游预约攻略|认准正规持证导游,开启满分草原度假 - 纯玩旅游分享
  • ArcGIS Pro擦除工具:空间差集运算原理、应用与自动化实践
  • PS切片工具全解析:从精准切图到高效交付的完整工作流
  • Bun 深度解析:从 Node.js 痛点出发,看现代 JavaScript 工具链的演进与实战
  • exgcd
  • 《天道》5
  • 从「加速」到「加崩」:Cython手写布尔数组扩展差点把我整破防
  • OpenCore Legacy Patcher 新手完整指南:旧 Mac 免费升级 macOS 的每一步
  • 2026福州黄金回收攻略:正规门店?维权凭证?五大避坑要点 - 朝夕热点速报
  • 厂内多智能体系统流程和框架
  • 3步把重复操作交给电脑:Pulover‘s Macro Creator 录制式自动化入门
  • 个人 AI 助手对比企业级 AI CRM 有哪些不同?销售管理不能单用个人 AI 的原因:五大关键差异
  • OpenCore Legacy Patcher完整指南:让旧Mac免费重获新生的终极升级方案
  • TurboEx邮件系统|150+项安全管理组合拳为客户打造安全邮箱 - 拓波TurboEx邮件系统
  • 最优子结构里藏着的秘密,远比我想象的要多
  • Steam创意工坊下载器WorkshopDL实测手记:把创意工坊模组免费搬进非Steam游戏
  • Kimi LeetCode 3910. 统计节点和为偶数的连通子图 Python3实现