AMD KFD SVM原理与实现剖析
文章平均质量分 93
本专栏从amdgpu kdf bo 专栏里单独抽出来,供只需要深入理解SVM实现的读者。专栏深入解析 AMD KFD 的共享虚拟内存体系,从 CPU-GPU 统一地址空间设计、MMU Notifier 与页表迁移机制,结合 amdgpu kfd内核源码与实战案例,打通从原理到工程落地的全链路。
余额抵扣
助学金抵扣
还需支付
¥29.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
DeeplyMind
图形领域、AI领域技术开发者,专注于OpenGL/Vulkan图形渲染和AI计算的GPU驱动、GPU硬件开发技术栈和实践。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
AMD ROCm-SVM技术的实现与应用深度分析目录
本文档系统介绍AMDGPU中的共享虚拟内存(SVM)技术,内容分为四部分:基础篇讲解SVM概念、Linux内核基础和AMDGPU架构;数据结构篇分析核心数据结构如svm_range、svm_range_list等;核心功能篇深入范围管理、内存迁移、页表映射等实现;高级特性篇涵盖预取、VRAM驱逐、多GPU支持等。文档提供代码路径(drivers/gpu/drm/amd/amdkfd/)、学习路径建议和核心数据结构速查表,适合不同基础的开发者系统学习AMD SVM技术实现。原创 2026-01-28 08:24:17 · 3390 阅读 · 2 评论 -
01 - 什么是SVM
摘要:SVM(共享虚拟内存)技术使CPU和GPU能共享同一虚拟地址空间,简化异构计算编程。传统模型需手动管理CPU/GPU内存和拷贝数据,而SVM允许直接传递指针,自动处理页面迁移和一致性维护。其核心包括统一地址空间、按需迁移、页面故障处理和一致性管理,显著降低编程复杂度并提升性能。通过HMM框架、MMU通知和GPU页面异常等机制实现高效内存共享,支持复杂数据结构,为异构计算带来便利。原创 2026-02-02 05:45:00 · 2898 阅读 · 0 评论 -
02 - SVM相关的Linux内核基础[1-页表]
本文介绍了AMDGPU SVM实现所需的Linux内核核心概念,包括虚拟内存管理、页表机制和MMU工作原理。主要内容包括:虚拟地址空间的作用和布局(每个进程独立4GB空间),页表的多级结构(x86-64四级页表)和地址转换过程,页表项(PTE)的关键标志位,以及MMU和TLB的地址转换机制。特别强调了SVM中CPU和GPU两套页表的一致性挑战,为理解共享虚拟内存技术奠定了基础。通过图示和代码示例,用通俗方式解释了这些复杂概念。原创 2026-02-03 05:00:00 · 2823 阅读 · 0 评论 -
02 - SVM相关的Linux内核基础[2-mm子系统中的ZONE_DEVICE 设计]
本文分析了Linux内核中设备内存管理面临的核心问题及ZONE_DEVICE解决方案。传统内核内存管理完全依赖struct page,而GPU VRAM、PMEM等设备内存缺乏对应的struct page,导致地址空间分裂、迁移框架不可用等问题。ZONE_DEVICE通过为设备内存创建struct page,将其纳入统一内存管理体系,细分为PRIVATE(如独立GPU)和COHERENT(如CXL)等类型,分别处理不同访问特性。原创 2026-03-18 05:00:00 · 1399 阅读 · 0 评论 -
02 - SVM相关的Linux内核基础[3- Device Memory Migration 机制]
本文分析了Linux内核的设备内存迁移机制,重点介绍了migrate_vma_*和migrate_device_*API族,这是GPU SVM实现的核心基础设施。内核将内存分为三种类型:System RAM(CPU可直接访问)、MEMORY_DEVICE_PRIVATE(设备私有内存,如GPU VRAM)和MEMORY_DEVICE_COHERENT(设备一致性内存)。关键数据结构包括dev_pagemap用于设备内存注册和migrate_vma用于迁移操作。原创 2026-03-18 05:00:00 · 1633 阅读 · 0 评论 -
03 - AMDGPU驱动架构概览
本文介绍了AMDGPU驱动的整体架构,重点分析其图形驱动(AMDGPU)和计算驱动(KFD)的双重结构。KFD驱动作为HSA架构的核心组件,包含进程管理、设备管理等模块,其中SVM功能在kfd_svm.c实现。文章详细解析了KFD的核心组件、初始化流程及字符设备接口,并阐述了TTM框架在GPU内存管理中的作用。通过架构图和代码片段展示了AMDGPU与KFD的协作机制,为后续深入理解SVM实现奠定基础。原创 2026-02-04 05:00:00 · 3203 阅读 · 4 评论 -
04 - SVM核心数据结构详解
摘要 本文深入解析了AMDGPU SVM实现中的核心数据结构svm_range,该结构用于管理共享虚拟内存范围。关键设计包括: 地址管理:使用页号而非字节地址存储内存范围(start/last/npages),优化存储并与MMU对齐。 位置标记:通过preferred_loc/prefetch_loc/actual_loc三个字段分别记录用户偏好、预取位置和实际物理位置(0=CPU,非零=GPU ID)。 物理映射:维护DMA地址数组(每个GPU独立映射)和TTM资源(VRAM管理),支持多GPU访问场景。原创 2026-02-05 05:00:00 · 2332 阅读 · 0 评论 -
05 - 进程与SVM的关系
摘要:AMDGPU驱动中,每个使用GPU计算的进程通过kfd_process结构管理SVM(共享虚拟内存)。SVM功能以进程为单位组织,包含独立的SVM范围列表(svm_range_list)。进程创建时通过svm_range_list_init()初始化SVM管理结构,包括区间树、互斥锁、状态计数器和GPU支持检查。SVM范围通过红黑树和链表管理,支持高效的查找和遍历。进程与SVM是一对一关系,每个进程拥有完整的SVM管理权限。原创 2026-02-06 05:00:00 · 2526 阅读 · 0 评论 -
06 - SVM范围管理
SVM范围管理是虚拟内存系统的核心功能,负责处理范围创建、分割、合并等复杂操作。文章详细解析了svm_range_add函数的实现机制,该函数通过区间树高效处理四种重叠场景:无重叠直接创建、完全包含更新属性、部分重叠分割处理、有间隙填充创建。关键流程包括克隆现有范围、分割处理、事务性提交保证一致性,并配合代码示例展示了不同场景下的处理逻辑。此外介绍了区间树的高效查找原理,为SVM范围管理提供底层支持。这些操作共同确保了虚拟内存范围管理的正确性和高性能。原创 2026-02-09 05:30:00 · 2394 阅读 · 0 评论 -
07 - SVM内存迁移机制
摘要:本章深入探讨SVM内存迁移机制,实现在系统RAM和GPU VRAM间的双向数据移动。通过SDMA引擎执行物理拷贝,利用GART表进行地址翻译。核心流程包括:1) 迁移准备(锁定页面、验证范围);2) VRAM分配;3) SDMA拷贝执行;4) 页表更新。关键API如migrate_vma_setup()收集可迁移页面,migrate_vma_pages()完成页表映射更新。迁移方向由访问模式触发(上行:GPU频繁访问;下行:CPU需要访问或内存回收)。原创 2026-02-10 05:30:00 · 3297 阅读 · 0 评论 -
08 - 页面映射与GPU页表
本文摘要介绍了GPU页表管理的关键机制。GPU通过4级页表结构(PML4/PDP/PD/PT)实现48位虚拟地址到物理地址的转换,支持256TB地址空间。重点分析了PTE(页表项)的结构和标志位设置,包括VALID、SYSTEM、SNOOPED等访问控制位。通过代码示例展示了如何根据内存域(VRAM或系统RAM)和设备类型(APU/dGPU)配置PTE标志。最后概述了映射到GPU的流程,包括参数准备、连续段分组和页表更新机制。原创 2026-02-11 05:30:00 · 2026 阅读 · 0 评论 -
09 - SVM缺页处理机制
摘要:本章深入讲解SVM中的缺页处理机制,重点分析XNACK机制和GPU页面异常处理流程。当GPU访问未映射页面时,XNACK机制会暂停执行并通知CPU驱动修复映射,随后GPU重试访问。处理流程包括查找进程、检查XNACK支持、验证故障有效性、迁移数据并更新页表。关键函数svm_range_restore_pages负责协调整个恢复过程,确保GPU能继续执行。该机制需要GFX9及以上架构支持,是SVM实现高效内存共享的核心功能。原创 2026-02-12 05:30:00 · 1558 阅读 · 0 评论 -
10 - SVM中的MMU Notifier集成
MMU Notifier是Linux内核的关键机制,用于在CPU页表变更时通知外部子系统(如GPU驱动),确保CPU与GPU内存视图一致。本章深入解析其实现: 基础机制 通过回调函数(如invalidate)响应页表变更(UNMAP、迁移等) 使用mmu_interval_notifier结构监控地址范围,防止GPU访问无效内存;注册流程 调用mmu_interval_notifier_insert_locked将监控范围插入进程的interval_tree 需持有mmap_lock。原创 2026-02-13 05:15:00 · 2122 阅读 · 0 评论 -
11 - SVM的高级特性:多GPU支持
深入探讨多GPU环境下的共享虚拟内存(SVM)实现技术。主要内容包括:1) 多GPU架构的两种互联方式(PCIe和XGMI)及其性能特点;2) SVM中的GPU管理机制,包括访问权限位图(bitmap_access/bitmap_aip/bitmap_supported)的三种类型及其应用场景;3) 最佳位置选择算法svm_range_best_restore_location的优先级决策流程;4) 多GPU访问模式(数据并行、模型并行和流水线)的具体实现方法。特别强调了XGMI高速互联技术在实现低延迟。原创 2026-02-24 11:41:58 · 1708 阅读 · 0 评论 -
12 - 内存预取prefetch与位置偏好preferred
摘要:本章介绍了内存预取(Prefetch)和提示(Hints)技术,用于优化SVM性能。预取允许提前将数据迁移到目标设备(如GPU),避免首次访问延迟。位置提示(preferred_loc)指导数据迁移策略,而访问提示(如READ_MOSTLY、GPU_EXEC)优化特定访问模式。粒度控制(granularity)影响迁移的最小单位大小,从4KB到1GB不等。这些技术通过主动数据布局优化,显著提升异构计算的性能。原创 2026-02-27 11:46:03 · 1384 阅读 · 0 评论 -
13 - VRAM驱逐与恢复
摘要:本文深入分析GPU SVM中的VRAM驱逐机制,包含两条触发路径:TTM内存压力驱逐和CPU页表失效驱逐。核心数据结构包括svm_range_bo封装VRAM Buffer Object,以及驱逐计数器evicted_ranges和无效标记invalid。详细阐述了svm_range_bo创建流程,重点说明eviction_fence如何控制TTM驱逐时机。最后解析TTM内存压力触发的驱逐链,包括LRU扫描、fence信号处理和驱逐工作调度等关键环节。该机制通过精细的异步协作确保内存迁移的正确性。原创 2026-02-28 05:30:00 · 1870 阅读 · 0 评论 -
14 - SVM的用户态API接口
本文介绍了ROCm平台中SVM(Shared Virtual Memory)的用户态接口实现,重点分析了其四层软件栈架构和核心IOCTL机制。主要内容包括: SVM通过单一IOCTL命令AMDKFD_IOC_SVM实现内存管理,配合AMDKFD_IOC_SET_XNACK_MODE控制GPU页面重试模式。 软件栈分为四层:内核驱动层提供基础IOCTL接口,thunk层进行参数转换,运行时层封装高级API,最终用户框架提供应用接口。 详细解析了AMDKFD_IOC_SVM的参数结构、操作类型(SET/GET_原创 2026-02-28 05:45:00 · 1332 阅读 · 0 评论 -
15 - SVM Checkpoint Timestamp 同步机制
AMD KFD SVM中的checkpoint_ts机制摘要: checkpoint_ts是AMD KFD SVM内存管理中的关键同步机制,用于协调GPU页面错误处理与内存操作。该机制为每个GPU实例维护独立的时间戳,在关键操作(如取消映射)前设置检查点,通过比较页面错误时间戳实现: 过滤新错误:丢弃检查点后产生的页面错误(返回-EAGAIN) 处理旧错误:允许检查点前的错误完成处理 防止竞争:确保内存操作期间系统状态一致 实现包含三个核心部分: 数据结构:每个GPU实例的64位时间戳数组 设置检查点。原创 2026-02-27 06:00:00 · 1473 阅读 · 0 评论 -
16- KFD SVM概念与逻辑的高度概括与用例分析
本文深入分析了AMD GPU KFD SVM子系统的实现机制,主要包含以下内容: 核心架构:介绍了KFD SVM实现CPU-GPU统一虚拟地址空间的核心机制,包括关键数据结构svm_range和三大执行路径。 执行路径: 用户态ioctl路径:处理属性设置、范围管理及迁移触发 MMU Notifier路径:响应CPU页表变更事件 GPU Retry Fault路径:处理GPU访问缺页中断 异步机制:详细说明了延迟工作队列和恢复工作的处理流程。 迁移机制:分析了RAM-VRAM双向迁移的具体实现和回调处理。原创 2026-04-09 10:21:15 · 816 阅读 · 0 评论 -
附录A:AMDGPU SVM 属性类型
介绍了kfd_ioctl_svm_attr_type枚举类型,该枚举定义了SVM(共享虚拟内存)的各种属性类型,用于控制GPU对共享内存的访问行为。主要属性包括:设置内存首选位置(PREFERRED_LOC)、预取位置并立即迁移数据(PREFETCH_LOC)、授予GPU访问权限(ACCESS)、授予访问权限但不迁移数据(ACCESS_IN_PLACE)、移除GPU访问权限(NO_ACCESS)、设置/清除标志位(SET_FLAGS/CLR_FLAGS)等。这些属性通过位图控制GPU访问权限和数据迁移策略。原创 2026-02-05 14:23:52 · 1659 阅读 · 0 评论 -
附录B:SVM 中的迁移策略:核心机制与性能优化
摘要:SVM(共享虚拟内存)通过迁移策略动态管理CPU和GPU间的数据位置,解决物理分离与逻辑统一的矛盾。策略需在RAM和VRAM间智能调度数据,处理缺页异常并维护一致性,避免频繁拷贝导致的性能下降。其核心在于动态感知访问模式,通过预取、粒度控制和位置提示优化性能。迁移策略直接影响SVM效率,是发挥其潜力的关键,使程序员无需手动管理内存即可获得高性能。高级策略能最大化硬件利用率,而简单策略易导致总线拥堵和GPU等待。原创 2026-04-23 11:47:58 · 899 阅读 · 0 评论
分享