本系列文档旨在帮助新手系统性地学习AMDGPU中的Shared Virtual Memory (SVM)技术。SVM作为异构计算ROCm和CUDA编程的核心支撑技术在人工智能时代有着举足轻重的地位已成为驱动开发者们必备的一项技能。本专栏为2026年02月专栏周一到周五每天发布一篇节假日除外。敬请订阅关注以便及时收到发布通知。2026/02/02: 发布 01-什么是SVM2026/02/03: 发布 02-SVM相关的Linux内核基础2026/02/04: 发布 03-AMDGPU驱动架构概览2026/02/05: 发布 04-核心数据结构详解和附录A2026/02/06: 发布 05-进程与SVM的关系2026/02/09: 发布 06-SVM范围管理2026/02/10: 发布 07-内存迁移机制2026/02/11: 发布 08-页面映射与GPU页表2026/02/12: 发布 09-缺页处理机制2026/02/13: 发布 10-MMU Notifier集成2026/02/24: 发布 11-多GPU和XGMI支持2026/02/27: 发布 12-预取与位置提示2026/02/28: 发布 13 - VRAM驱逐与恢复2026/02/28: 发布 14 - SVM的用户态API接口2026/02/27: 发布 15-Checkpoint Timestamp同步机制2026/04/09: 发布 16- KFD SVM概念与逻辑的高度概括与用例分析该专栏已完结如果有upstream会及时更新如有错误或需要补充的请留言。第一部分基础篇 适合完全新手建立基础概念01-什么是SVM1.1 统一内存访问的需求1.2 传统GPU内存模型的局限1.3 SVM的核心概念和优势1.4 CPU-GPU共享内存的工作原理1.5 实际应用场景02-SVM相关的Linux内核基础2.1 虚拟内存管理基础2.2 页表和地址转换2.3 MMU和页面异常2.4 DMA和IOMMU2.5 HMM框架介绍03-AMDGPU驱动架构概览3.1 AMDGPU驱动整体架构3.2 KFD (Kernel Fusion Driver) 简介3.3 TTM (Translation Table Maps)3.4 GART表的作用3.5 SVM在驱动中的位置第二部分数据结构篇 理解代码组织掌握核心数据结构04-核心数据结构详解4.1svm_range- 内存范围表示起始/结束地址位置标记 (actual_loc, preferred_loc)访问属性和标志4.2svm_range_list- 范围管理interval tree组织链表结构锁机制4.3svm_range_bo- Buffer Object管理引用计数eviction fence多范围共享4.4svm_work_list_item- 异步工作项4.5 数据结构关系图05-进程与SVM的关系5.1kfd_process中的 SVM 管理5.2 进程创建时的SVM初始化5.3 进程销毁时的清理5.4 多GPU场景下的管理第三部分核心功能篇 深入实现细节理解关键流程06-SVM范围管理6.1 范围的创建6.2 范围的查找 (interval tree使用)6.3 范围的分割与合并6.4 范围的删除与清理6.5 代码示例和流程图07-内存迁移机制7.1 为什么需要迁移7.2 RAM到VRAM的迁移流程7.3 VRAM到RAM的迁移流程7.4 SDMA引擎的使用7.5 GART表在迁移中的作用7.6 迁移性能优化08-页面映射与GPU页表8.1 GPU页表结构8.2 页表映射的建立8.3 页表映射的更新8.4 页表映射的撤销8.5 多GPU映射管理8.6 AIP (Access In Place) 支持09-缺页处理机制9.1 GPU页面异常(page fault)的产生9.2 GPU Page Fault的处理9.3 XNACK重试机制9.4 缺页处理流程图9.5 性能考虑9.6 与CPU缺页处理的对比10-MMU Notifier集成10.1 为什么需要MMU Notifier10.2mmu_interval_notifier注册10.3 CPU页表变化的捕获10.4 invalidate回调处理10.5 与HMM的配合第四部分高级特性篇 掌握高级功能和优化技术11-多GPU和XGMI支持11.1 多GPU场景介绍11.2 P2P访问支持11.3 XGMI互连11.4 bitmap_access和bitmap_aip11.5 跨GPU迁移12-预取与位置提示12.1 prefetch操作12.2 preferred_loc的设置和使用12.3 访问策略 (read-only, read-write)12.4 granularity控制12.5 性能调优建议13-VRAM驱逐与恢复13.1 VRAM不足时的驱逐13.2 eviction fence机制13.3 驱逐工作队列13.4 页面的恢复13.5 驱逐策略14-用户态API接口14.1 IOCTL命令详解SET_ATTRIBUTES- 设置SVM范围属性GET_ATTRIBUTES- 获取SVM范围属性其他操作14.2 用户态使用示例14.3 ROCm runtime集成14.4 错误处理15-Checkpoint Timestamp同步机制15.1 为什么需要Checkpoint Timestamp15.2 数据结构15.3 核心操作15.4 时间戳比较15.5 完整工作流程15.6 应用场景15.7 性能与优化15.8 调试与故障排查16- KFD SVM概念与逻辑的高度概括与用例分析附录AAMDGPU SVM 属性类型学习路径建议 初学者路径 (2-3周)第一部分基础篇 (01-03) → 建立概念第二部分数据结构篇 (04-05) → 理解组织第三部分核心功能篇 (06-10) → 逐个模块学习配合代码阅读 有经验者路径 (1周)快速浏览01-03重点看03精读04-05理解数据结构按实际需求选读06-14的具体模块 问题驱动路径性能优化: 重点看 12-13章 (预取、优化技术)多GPU开发: 重点看 11章 (多GPU支持)调试排查: 重点看 14章 (调试与问题排查)同步机制: 重点看 10、15章 (MMU Notifier、Checkpoint Timestamp)快速参考核心数据结构速查结构体文件作用svm_rangekfd_svm.h表示一个SVM内存范围svm_range_listkfd_priv.h管理进程的所有SVM范围svm_range_bokfd_svm.h管理共享的buffer objectsvm_work_list_itemkfd_svm.h异步工作项关键宏定义#defineSVM_RANGE_VRAM_DOMAIN(1UL0)// VRAM域标记#defineMAX_GPU_INSTANCE8// 最大GPU数量#defineKFD_IS_SVM_API_SUPPORTED(adev)// SVM支持检查关键配置# 内核配置项CONFIG_HSA_AMD_SVMy# 启用SVM支持CONFIG_HMM_MIRRORy# HMM支持CONFIG_DEVICE_PRIVATEy# 设备私有内存# 运行时检查cat/sys/module/amdgpu/parameters/noretry# XNACK设置术语速查术语全称说明SVMShared Virtual Memory共享虚拟内存HMMHeterogeneous Memory Management异构内存管理MMUMemory Management Unit内存管理单元IOMMUInput/Output MMUI/O内存管理单元TTMTranslation Table Maps转换表管理器GARTGraphics Address Remapping Table图形地址重映射表SDMASystem DMA系统DMA引擎XNACKException No ACK异常不确认页面重试机制XGMIInfinity FabricAMD GPU互连技术AIPAccess In Place就地访问P2PPeer-to-Peer点对点访问KFDKernel Fusion Driver内核融合驱动PASIDProcess Address Space ID进程地址空间IDVMIDVirtual Memory ID虚拟内存ID