AMD ROCm-SVM技术的实现与应用深度分析目录

本系列文档旨在帮助新手系统学习AMDGPU中的Shared Virtual Memory (SVM)技术。SVM作为异构计算ROCm和CUDA编程的核心支撑技术,在人工智能时代有着举足轻重的地位,已成为驱动开发者们必备的一项技能。

本专栏为2026年02月专栏,二月周一到周五每天发布一篇(节假日除外)。敬请订阅关注,以便及时收到发布通知。


第一部分:基础篇 🟢

适合完全新手,建立基础概念

01-什么是SVM

  • 1.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和IOMMU
  • 2.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.1 svm_range - 内存范围表示
    • 起始/结束地址
    • 位置标记 (actual_loc, preferred_loc)
    • 访问属性和标志
  • 4.2 svm_range_list - 范围管理
    • interval tree组织
    • 链表结构
    • 锁机制
  • 4.3 svm_range_bo - Buffer Object管理
    • 引用计数
    • eviction fence
    • 多范围共享
  • 4.4 svm_work_list_item - 异步工作项
  • 4.5 数据结构关系图

05-进程与SVM的关系

  • 5.1 kfd_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 Notifier
  • 10.2 mmu_interval_notifier 注册
  • 10.3 CPU页表变化的捕获
  • 10.4 invalidate回调处理
  • 10.5 与HMM的配合

第四部分:高级特性篇 🔴

掌握高级功能和优化技术

11-预取与位置提示

  • 11.1 prefetch操作
  • 11.2 preferred_loc的设置和使用
  • 11.3 访问策略 (read-only, read-write)
  • 11.4 granularity控制
  • 11.5 性能调优建议

12-VRAM驱逐与恢复

  • 12.1 VRAM不足时的驱逐
  • 12.2 eviction fence机制
  • 12.3 驱逐工作队列
  • 12.4 页面的恢复
  • 12.5 驱逐策略

13-多GPU和XGMI支持

  • 13.1 多GPU场景介绍
  • 13.2 P2P访问支持
  • 13.3 XGMI互连
  • 13.4 bitmap_access和bitmap_aip
  • 13.5 跨GPU迁移

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 Timestamp
  • 15.2 数据结构
  • 15.3 核心操作
  • 15.4 时间戳比较
  • 15.5 完整工作流程
  • 15.6 应用场景
  • 15.7 性能与优化
  • 15.8 调试与故障排查

学习路径建议

🎯 初学者路径 (2-3周)

  1. 第一部分:基础篇 (01-03) → 建立概念
  2. 第二部分:数据结构篇 (04-05) → 理解组织
  3. 第三部分:核心功能篇 (06-10) → 逐个模块学习,配合代码阅读

🚀 有经验者路径 (1周)

  1. 快速浏览01-03,重点看03
  2. 精读04-05,理解数据结构
  3. 按实际需求选读06-14的具体模块

🔍 问题驱动路径

  • 性能优化: 重点看 12-13章 (预取、优化技术)
  • 多GPU开发: 重点看 11章 (多GPU支持)
  • 调试排查: 重点看 14章 (调试与问题排查)
  • 同步机制: 重点看 10、15章 (MMU Notifier、Checkpoint Timestamp)

快速参考

核心数据结构速查

结构体 文件 作用
svm_range kfd_svm.h 表示一个SVM内存范围
svm_range_list kfd_priv.h 管理进程的所有SVM范围
svm_range_bo kfd_svm.h 管理共享的buffer object
svm_work_list_item kfd_svm.h 异步工作项

关键宏定义

c 复制代码
#define SVM_RANGE_VRAM_DOMAIN (1UL << 0)  // VRAM域标记
#define MAX_GPU_INSTANCE      8           // 最大GPU数量
#define KFD_IS_SVM_API_SUPPORTED(adev)    // SVM支持检查

关键配置

bash 复制代码
# 内核配置项
CONFIG_HSA_AMD_SVM=y              # 启用SVM支持
CONFIG_HMM_MIRROR=y               # HMM支持
CONFIG_DEVICE_PRIVATE=y           # 设备私有内存

# 运行时检查
cat /sys/module/amdgpu/parameters/noretry  # XNACK设置

术语速查

术语 全称 说明
SVM Shared Virtual Memory 共享虚拟内存
HMM Heterogeneous Memory Management 异构内存管理
MMU Memory Management Unit 内存管理单元
IOMMU Input/Output MMU I/O内存管理单元
TTM Translation Table Maps 转换表管理器
GART Graphics Address Remapping Table 图形地址重映射表
SDMA System DMA 系统DMA引擎
XNACK Exception No ACK 异常不确认(页面重试机制)
XGMI Infinity Fabric AMD GPU互连技术
AIP Access In Place 就地访问
P2P Peer-to-Peer 点对点访问
KFD Kernel Fusion Driver 内核融合驱动
PASID Process Address Space ID 进程地址空间ID
VMID Virtual Memory ID 虚拟内存ID
相关推荐
DeeplyMind2 天前
引文:当SVM转角遇上Copy-on-Write (COW)
svm·copy-on-write·cow·mmu notifier
DeeplyMind17 天前
AMD KFD的BO设计分析系列8-7:TLB管理与刷新
amdgpu·tlb·kfd
越努力越幸运~23 天前
AMD AI MAX +395迷你主机 架构1151安装 vllm部署大模型操作记录
ai·vllm·rocm·ai max+395
core5121 个月前
SVM (支持向量机):寻找最完美的“分界线”
算法·机器学习·支持向量机·svm
芥子沫1 个月前
《人工智能基础》[算法篇5]:SVM算法解析
人工智能·算法·机器学习·支持向量机·svm
DeeplyMind1 个月前
AMD KFD的BO设计分析系列7-2:GPU GART 实现深度解析--绑定机制与性能优化
驱动开发·amdgpu·kfd·gart
七宝大爷1 个月前
AMD ROCm生态介绍:开源的GPU计算平台
开源·cuda·amd·rocm·gpu内核3
俊俊谢1 个月前
【机器学习】python使用支持向量机解决兵王问题(基于libsvm库)
python·机器学习·支持向量机·svm·libsvm
DeeplyMind2 个月前
AMD rocr-libhsakmt分析系列3-1: Apertures
linux·amdgpu·rocm·kfd·rocr