AMD KFD BO实现分析
文章平均质量分 90
深度解析 AMD KFD/KGD Linux 内核驱动中 BO的完整实现,聚焦显存资源分配、硬件交互流程与驱动层核心机制。内容包含内核态显存管理策略、驱动调试实战技巧,助力开发者掌握 GPU 虚拟化与高性能计算场景下的性能调优方法。内容垂直硬核,填补CSDN该领域系统化内容空白,打造专业背书。
余额抵扣
助学金抵扣
还需支付
¥89.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
DeeplyMind
图形领域、AI领域技术开发者,专注于OpenGL/Vulkan图形渲染和AI计算的GPU驱动、GPU硬件开发技术栈和实践。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
AMD KFD BO设计深度剖析专栏目录: BO 多地址空间映射与转换视角
本专栏深入剖析AMD KFD BO的多地址空间映射与转换机制,以"一个BO、多个地址空间、多个翻译器"为主线,系统分析CPU VA、GPU VA、DMA Address和Physical Address之间的映射关系。内容涵盖BO设计概览与分类体系、物理地址空间管理(drm_mm机制)、GPU虚拟地址空间(VM体系)、物理存储空间分类(VRAM/GTT等)以及GART页表转换机制。原创 2026-05-18 05:00:00 · 1503 阅读 · 3 评论 -
0-1 专栏介绍:AMD KFD BO设计深度剖析——解锁GPU存储核心技术
本专栏深入解析AMD KFD驱动中BufferObject(BO)的核心架构与实现原理,涵盖虚拟/物理地址管理、TTM/DRM框架协作、GPU页表机制等关键技术。通过体系化的内容编排,从基础概念到SVM高级应用,结合代码分析与实践案例,帮助开发者掌握GPU内存管理底层机制。专栏特色包括可视化讲解、工程实践导向和社区互动支持,适合GPU驱动、图形渲染及异构计算领域的开发者进阶学习。原创 2025-11-14 16:36:02 · 2701 阅读 · 2 评论 -
1.1 AMD KFD的BO设计分析系列 :开篇
本文宣布开启GPU存储技术系列研究,重点分析AMD显卡驱动中的Buffer Object(BO)实现。文章指出BO由虚拟地址管理(GPUVm)和物理地址管理(TTM)两部分组成,是理解GEM和TTM技术的理想案例。作者提供了架构示意图,并预告后续将分系列深入探讨AMD KFD的BO设计、DRM GEM显存管理原理及TTM与GEM的关系。欢迎驱动开发人员共同探讨这一技术领域。原创 2025-08-13 20:59:23 · 1812 阅读 · 0 评论 -
1.2 amdgpu_bo的设计分析 — gem层和ttm层
本文分析了AMD KFD的BO设计架构,重点介绍了DRM子系统中缓冲对象的多层继承关系。文章首先展示了核心继承层次图,包括DRM通用层(drm_gem_object)、TTM内存管理层(ttm_buffer_object)、AMD驱动层(amdgpu_bo)和KFD计算层(kgd_mem)。随后详细解析了drm_gem_object结构体的关键功能,包括用户空间接口管理、内存映射支持、引用计数机制以及DMA-BUF导入/导出功能。原创 2025-12-03 06:30:00 · 2338 阅读 · 0 评论 -
1.3 amdgpu_bo的设计 — amd扩展和kfd扩展
本文分析了AMD GPU驱动中的内存管理机制,重点探讨了amdgpu_bo和kgd_mem两个核心数据结构。amdgpu_bo作为驱动层扩展,在TTM基础上实现了GPU内存域管理、pin/unpin机制、分块模式优化等特性,支持虚拟内存映射和恢复机制。kgd_mem则封装了KFD计算层功能,提供多GPU映射、进程隔离和共享内存支持。两者协同工作,通过指针关联而非嵌入的方式实现灵活的内存管理,满足图形渲染和高性能计算的不同需求。文章还通过典型场景说明了这些结构在实际应用中的使用方法。原创 2025-12-08 06:30:00 · 1950 阅读 · 0 评论 -
1.4 amdgpu KFD BO 分析专栏术语查阅表
本文系统梳理了计算机系统中地址管理与虚拟化相关的核心术语。地址管理部分详细解释了虚拟内存机制中的关键概念,包括多级页表结构(PDE0→PDE1→PDE2)、共享虚拟内存(SVM)技术以及地址转换服务(ATS)等组件,阐述了现代操作系统如何通过这些技术优化内存管理。虚拟化部分对比了Intel VT-x和AMD SVM技术,介绍了SR-IOV、EPT/NPT等虚拟化扩展功能,并解析了GPU虚拟化架构中的用户态/内核态驱动协作机制。原创 2025-06-18 20:44:12 · 1913 阅读 · 0 评论 -
2.1 amdgpu BO的类型和用途
AMDGPU驱动中,amdgpu_bo_create_user和amdgpu_bo_create_kernel分别用于创建用户空间和内核空间的buffer对象(BO)。用户空间BO支持元数据、tiling flags等属性,由GEM handle管理生命周期;内核BO则用于驱动内部资源如ringbuffer,自动pin并可选CPU映射。二者在返回类型、生命周期管理和使用场景上存在根本差异,前者面向图形渲染/AI等应用,后者服务于驱动内部任务。原创 2025-09-29 11:24:39 · 1987 阅读 · 0 评论 -
2.2 ROCm体系下的BO--kgd_mem
摘要: kgd_mem结构体是AMD ROCm平台KFD驱动与AMDGPU驱动间管理GPU内存的核心桥梁,支持显存、GTT等多种内存类型,提供统一的生命周期管理、多进程共享及同步功能。其成员包括底层BO对象、DMA-BUF共享句柄、HMM区间等,通过lock确保并发安全,attachments管理多进程映射,sync实现Fence同步,并支持SVM页迁移与MMU通知。关键操作涵盖分配、映射、校验、回收及跨进程DMA-BUF传输,结合KFD进程级资源管理,显著提升异构计算的健壮性与效率。原创 2025-09-28 20:16:15 · 1788 阅读 · 0 评论 -
3.1 用户态访问 BO 的 CPU VA的 fake offset 机制全流程解析
本文探讨了用户态进程如何通过mmap接口获取可读写BO(Buffer Object)的CPU虚拟地址(VA)。关键点包括: Handle的作用:用户态创建BO后获得handle,用于安全引用内核GEM对象,但handle不能直接用于mmap。 fake offset机制: 通过ioctl查询/创建fake offset作为mmap的路由键 fake offset是DRM设备文件中的伪偏移,用于将mmap请求路由到对应GEM对象 与物理地址无关,仅用于对象查找阶段 完整映射流程。原创 2026-06-05 05:00:00 · 386 阅读 · 1 评论 -
3.2 fake offset 的创建:BO 创建路径中的 vma_node
本文摘要主要探讨了用户态中BO(Buffer Object)的fake offset存储位置、管理方式及生成流程。关键点包括: fake offset存储在drm_gem_object基类的vma_node字段中,用于支持mmap操作而非描述真实物理位置。原创 2026-06-08 05:00:00 · 1015 阅读 · 0 评论 -
3.3 drm_mm:fake offset 空间背后的区间分配器
本节深入探讨了drm_vma_offset_manager如何通过内部的drm_mm分配器管理fake offset空间。主要内容包括: fake offset空间的作用:DRM设备文件为每个可mmap的BO分配唯一、不重叠的fake offset区间,以便内核识别mmap请求对应的BO。 空间管理需求:需要满足不重叠、大小覆盖对象范围、支持释放复用和快速查找等要求。原创 2026-06-09 05:00:00 · 1431 阅读 · 0 评论 -
3.4 从 fake offset 到 CPU VA:drm_gem_mmap() 路径
本文分析了DRM子系统中用户态mmap调用如何通过fake offset映射显存对象的核心流程。当用户态调用mmap(fd, fake_offset)后,DRM核心通过以下步骤处理: 内核将字节偏移fake_offset转换为页偏移vma->vm_pgoff drm_gem_mmap()使用drm_vma_offset_manager精确查找匹配的vma_node 通过container_of从vma_node找回对应的drm_gem_object 检查当前进程是否有权限访问该对象。原创 2026-06-17 05:00:00 · 2019 阅读 · 1 评论 -
3.5 page fault:CPU VA 最终映射到 BO backing storage
本文摘要了AMDGPU驱动中CPU访问mmap内存的缺页处理流程。当用户首次访问mmap返回的虚拟地址时,会触发缺页中断,进入amdgpu_gem_fault()处理函数。流程分为四步:1)从VMA获取BO对象;2)加锁保护BO;3)检查BO是否CPU可见,必要时迁移;4)根据BO当前backing类型(GTT/VRAM)插入页表项,建立CPU虚拟地址到物理页的映射。核心是通过vmf_insert_pfn_prot()将用户态VA映射到BO的物理页帧(PFN)。原创 2026-07-08 03:30:00 · 214 阅读 · 0 评论 -
3.7 VMA 通用设计:进程虚拟地址空间中的区间对象
本文摘要: 文章深入探讨了Linux内存管理中的vm_area_struct(VMA)核心机制。VMA用于描述用户进程虚拟地址空间的区间规则,包括权限、backing来源和动态行为处理方式。通过vm_start/vm_end定义地址范围,vm_file和vm_pgoff关联文件或设备,vm_ops提供fault等回调接口。VMA与页表解耦——前者定义区间规则,后者延迟建立页级映射。文中以GPU BO映射为例,说明mmap()仅创建VMA,实际PTE在首次访问时通过page fault处理。最后解析了do_m原创 2026-07-04 10:41:09 · 461 阅读 · 0 评论 -
3.8 VMA 应用场景:从匿名内存到 GPU BO mmap
文章摘要: Linux内核中的vm_area_struct(VMA)通过灵活配置可服务多种内存映射场景,其核心在于VMA仅定义虚拟地址空间的规则,而不限定具体后端存储。匿名内存通过vm_file=NULL标识,由内存管理子系统处理页分配;文件映射通过vm_file和vm_pgoff关联page cache;共享内存(shmem)兼具文件与内存特性;设备MMIO使用remap_pfn_range直接映射物理地址,标记为VM_IO;而GPU缓冲对象(BO)则通过动态fault机制。原创 2026-07-06 14:42:44 · 319 阅读 · 0 评论 -
4.1 amdgpu BO的GPU虚拟地址的设计和核心数据结构关系
本文解析amdgpu_bo虚拟地址管理的核心设计,聚焦三个关键数据结构:amdgpu_vm作为GPU虚拟地址空间的顶层管理器,通过区间树统一管理所有BO映射;amdgpu_bo_va作为BO与VM的关联中介,管理单个BO在多段地址的映射;amdgpu_bo_va_mapping则描述具体映射细节。三者形成"1个VM:N个BO_va:每个BO_va对应N个映射"的层级关系,共同实现GPU虚拟地址的灵活管理。该设计支持地址分配、权限控制和区间查询等核心功能,为后续深入分析建立框架基础。原创 2025-09-29 17:00:21 · 2140 阅读 · 0 评论 -
4.2 VM- 虚拟地址空间 amdgpu_vm
本文深入分析了AMDGPU驱动中的核心数据结构amdgpu_vm,该结构体负责GPU虚拟内存管理,支持多进程隔离、资源调度和故障处理。文章详细介绍了amdgpu_vm的功能模块划分,包括虚拟地址空间管理、页表维护、锁机制、资源统计、TLB刷新等九大功能,并阐述了其生命周期管理流程。该结构体通过与KFD集成,实现了GPU计算任务的多进程虚拟地址空间隔离,为现代GPU驱动架构提供了重要基础。后续将有专文对各功能模块进行更深入的技术分析。原创 2025-09-28 18:48:42 · 2294 阅读 · 0 评论 -
4.3 VM-[vm, bo]的桥梁 amdgpu_vm_bo_va
摘要: amdgpu_vm_bo_base是AMDGPU驱动中管理GPU虚拟内存(VM)与物理显存对象(BO)关联的核心结构体。它通过vm和bo指针建立VM与BO的多对多关系,利用next链表和vm_status节点实现多BO管理及状态迁移(如驱逐、同步)。关键成员shared标记共享BO以支持显存统计与隔离,moved标识迁移状态以维护页表一致性。该结构体为VM的页表更新、资源回收及多进程隔离提供基础支持,是AMDGPU虚拟内存系统高效运作的关键组件。原创 2025-09-29 14:37:33 · 2448 阅读 · 0 评论 -
4.4 VM-amdgpu bo 的记录器 amdgpu_bo_va_mapping
amdgpu_bo_va_mapping是AMDGPU驱动中管理BO(BufferObject)在VM(虚拟地址空间)映射关系的关键数据结构。它包含映射区间、偏移量、标志等属性,通过红黑树组织实现高效查找。该结构主要用于BO映射(如OpenCL/Vulkan显存分配)、页表更新、地址冲突检测等场景,核心操作包括创建映射(amdgpu_vm_bo_map)、解除映射(amdgpu_vm_bo_unmap)和页表更新。作为GPU虚拟内存管理的基础组件,它贯穿地址空间管理全流程,是驱动虚拟化功能的重要实现机制。原创 2025-09-29 16:43:36 · 1636 阅读 · 0 评论 -
4.5 VM-amdgpu_vm_bo_map的实现过程详解
本文介绍了AMDGPU驱动中amdgpu_vm_bo_map接口的核心功能与实现机制。该接口负责将显存对象(BO)映射到GPU虚拟地址空间(VM),是GPU显存虚拟化和资源管理的基础。文章详细分析了相关数据结构(amdgpu_vm、amdgpu_bo_va等)和实现流程,包括参数校验、地址转换、冲突检测、映射结构初始化等关键步骤。该接口通过interval tree管理映射关系,确保地址空间隔离安全,并采用状态链表机制与页表更新系统协作。该设计实现了高效的GPU虚拟内存管理。原创 2025-09-29 16:13:36 · 2372 阅读 · 0 评论 -
4.6 VM-amdgpu_vm_bo_update
本文分析了AMDGPU驱动中BO物理地址与虚拟地址页表填充的实现过程。通过amdgpu_vm_bo_update和amdgpu_vm_update_range函数,区分GTT(系统内存)和VRAM(显存)两种情况:GTT场景下逐页映射DMA地址,支持非连续页;VRAM场景下批量映射显存物理地址,通常连续。两种方式都通过页表机制实现GPU虚拟地址到物理地址的转换,但填充方式和属性设置存在差异。原创 2025-10-11 08:13:37 · 1408 阅读 · 0 评论 -
5.1 BO的物理地址部分-PM
本文分析了AMDGPU显存对象(amdgpu_bo)物理地址部分的实现机制。通过ttm_resource框架管理物理内存资源,支持VRAM/GTT等多种物理域,采用分块(node)方式组织物理地址空间。BO与ttm_resource一一对应,而ttm_resource可包含多个物理分块。文章详细阐述了物理地址分配流程、查询映射机制、迁移释放过程,以及各层结构体的功能关系。该设计实现了高效灵活的物理内存管理,为GPU虚拟地址映射奠定基础,建议结合相关源码深入研究具体实现细节。原创 2025-10-10 08:16:00 · 1805 阅读 · 0 评论 -
5.2 bo内存分配位置flags概述
本文解析了KFD内存分配接口中的flags字段,重点介绍不同类型内存分配的用途和实现机制。VRAM用于高带宽GPU计算任务,GTT适用于CPU/GPU共享访问,USERPTR实现零拷贝数据传输,DOORBELL用于GPU队列通知,MMIO_REMAP支持寄存器访问。文章详细说明了用户空间分配流程、内核驱动处理方式及典型应用场景,为GPU资源管理和异构计算提供了关键指导。理解这些flags有助于开发者根据具体需求选择最优内存分配策略。原创 2025-09-28 13:07:53 · 7429 阅读 · 3 评论 -
5.3 bo内存分配位置flags详解
本文解析了KFD内存分配接口中的关键flags参数,包括VRAM、GTT、USERPTR、DOORBELL和MMIO_REMAP五种类型。VRAM用于GPU专用显存,GTT实现CPU/GPU共享访问,USERPTR支持零拷贝数据传输,DOORBELL用于队列通知,MMIO_REMAP允许寄存器访问。通过对比分析物理位置、访问方式和应用场景,为优化GPU内存管理提供了技术基础。正确选择flags类型对提升异构计算性能至关重要。原创 2025-12-08 05:45:00 · 2290 阅读 · 0 评论 -
5.3 VRAM BO的显存分配分析
本文分析了AMD GPU驱动中VRAM物理地址分配的代码实现,重点研究了TTM框架下ttm_resource的分配机制。核心流程包括:通过amdgpu_vram_mgr_new函数初始化资源结构体,使用drm_buddy_alloc_blocks分配物理地址块(支持连续/TOPDOWN等多种策略),并将物理地址信息绑定到ttm_resource结构体。drm_buddy分配器采用伙伴算法实现高效内存管理,支持地址范围约束和多种分配策略,是现代显卡驱动显存管理的核心基础设施。原创 2025-10-09 18:31:05 · 2229 阅读 · 0 评论 -
5.4 GTT BO的内存分配分析
本文分析了AMD GPU驱动中的GTT技术实现。GTT作为GPU页表,负责管理主机内存与GPU虚拟地址的映射,支持大容量内存访问和统一寻址。文章详细介绍了GTT的核心数据结构amdgpu_gtt_mgr、初始化流程,以及BO(Buffer Object)创建时GTT区间的分配与释放机制。GTT管理通过TTM框架实现分层设计,提供内存统计、兼容性检查等接口,并支持动态迁移、多进程隔离等高级特性。该机制为AMD GPU提供了高效灵活的内存管理基础。原创 2025-09-13 11:01:37 · 3472 阅读 · 0 评论 -
5.5 userptr BO(system ram里的bo)的内存分配分析
本文分析了AMD GPU驱动中KFD子系统对用户态指针(userptr)内存的处理机制。当应用程序通过KFD_IOC_ALLOC_MEM_FLAGS_USERPTR标志分配内存时,驱动将用户空间内存映射到GPU地址空间。核心流程包括:IOCTL入口处理中检查地址对齐和设备内存;GPU内存对象分配时设置GTT和CPU双域;BO创建与初始化;以及通过init_user_pages()完成用户页面映射,包括保存用户地址、注册MMU通知器、获取用户页面和验证BO等步骤。该机制实现了GPU对用户态内存的安全高效访问。原创 2025-12-05 06:30:00 · 2495 阅读 · 0 评论 -
5.5.1:Userptr BO 与 DMA-BUF 导出机制分析
本文分析了AMD GPU驱动中Userptr BO无法通过DMA-BUF机制导出的技术限制。核心原因包括:内存所有权冲突、MMU Notifier无法跨进程、生命周期管理复杂以及潜在安全风险。相比而言,GTT BO由于完全由驱动管理内存分配和引用计数,能够安全实现跨进程共享。文章详细对比了两种BO类型的技术差异,并提供了替代方案建议,其中推荐使用GTT BO配合显式拷贝的方式实现跨进程数据共享。这种方案既保证了安全性,又能满足中等数据量的传输需求,避免了直接导出Userptr BO可能导致的内存访问冲突。原创 2025-12-26 05:30:00 · 2166 阅读 · 0 评论 -
5.6 doorbell bo的相关内核实现
本文介绍了AMD GPU架构中Doorbell机制的硬件原理及驱动实现。Doorbell作为用户空间与GPU硬件的高效通信机制,通过映射到用户/内核空间的物理寄存器实现低延迟任务通知。硬件层面,Doorbell位于PCIe BAR2空间,支持多队列并发访问;驱动层面,通过特定数据结构管理Doorbell资源,包括BAR空间发现、BO分配与映射、读写操作等关键流程。文章详细阐述了Doorbell的初始化、分配、回收机制,以及内核/用户空间的安全访问方式,展现了该机制在AMD GPU驱动中的完整实现方案。原创 2025-08-05 15:53:54 · 1692 阅读 · 0 评论 -
5.7 doorbell bo的使用分析
本文分析了AMDGPU驱动中doorbellbo的创建和mmap实现流程。doorbell是CPU与GPU间高效通信机制,通过AMDGPU_GEM_DOMAIN_DOORBELL域分配显存对象。bo创建使用amdgpu_bo_create_kernel函数,doorbell内存由ttm_range_manager管理。mmap流程通过kfd_chardev设备接口实现,最终调用io_remap_pfn_range将doorbell物理地址映射到用户空间,供CPU直接写入通知GPU。原创 2025-10-15 07:45:00 · 1109 阅读 · 0 评论 -
5.8 res_cursor--BO物理内存资源的迭代器
摘要:文章详细解析了AMDGPU驱动中的amdgpu_res_cursor结构体设计,该工具用于高效遍历和管理分块资源(如VRAM/GTT)。核心内容包括:1)结构体成员(start/size/remaining等)和功能;2)关键操作接口(初始化、前进、清零检测);3)典型应用场景(页表填充、DMA映射)。该设计通过统一抽象和自动跳转机制,简化了分块资源操作,提升了驱动性能。原创 2025-10-09 19:09:02 · 2136 阅读 · 0 评论 -
6.1 GPU GART 实现深度解析--基础架构与工作原理
AMD GPU GART机制解析 GART(Graphics Address Remapping Table)是AMD GPU的硬件页表机制,核心功能是将离散的系统内存映射为连续的GPU虚拟地址空间。该机制通过页表管理实现GPU虚拟地址到系统物理地址的转换,支持页面级权限控制,使GPU能够高效访问系统内存。GART页表存储在VRAM中以降低访问延迟,其核心数据结构包括存储页表的BO对象、CPU映射地址、页面数量统计等参数。初始化时需在VRAM中分配连续空间,并通过特定流程完成映射。相比CPU MMU,GAR原创 2025-11-30 18:23:49 · 2269 阅读 · 0 评论 -
6.2 GPU GART 实现深度解析--绑定机制与性能优化
本文详细解析了AMD GPU的GART(Graphics Address Remapping Table)绑定机制实现。主要内容包括: 绑定流程:从ttm_tt_bind()到硬件PTE更新的完整调用链,重点分析amdgpu_gart_bind()函数实现。 关键函数: amdgpu_gart_bind():执行安全检查、记录映射关系、更新页表等操作 amdgpu_gart_map():将CPU页映射为多个GPU页并填充PTE amdgpu_gmc_set_pte_pde():处理硬件特定的PTE格式 内存原创 2025-12-23 05:45:00 · 2444 阅读 · 0 评论 -
7.1 AMDGPU页表机制概览
AMDGPU采用分层架构管理页表,从用户空间ioctl调用到硬件MMU页表遍历,涉及多个软件层次。核心组件包括DRM/GEM层、VM管理层和页表管理层,支持CPU和SDMA两种更新模式。全局页表管理器(amdgpu_vm_manager)负责配置页表层次、分配VMID等资源,而每个进程的页表实例(amdgpu_vm)则管理专属的GPU虚拟地址空间。该架构实现了高效的虚拟内存管理,支持4级页表层次结构,并协调CPU或SDMA方式进行页表更新。原创 2025-12-29 05:30:00 · 2494 阅读 · 0 评论 -
7.2 GPUVM 多级页表组织结构
AMD GPU采用四级页表结构(PDB2/PDB1/PDB0/PTB),每级512项,对应48位虚拟地址空间。页表以BO(Buffer Object)形式存储,各级页表通过链表关联,形成树状结构管理内存映射。每个PTB项覆盖4KB页,通过硬件MMU实现地址转换。原创 2025-12-29 06:00:00 · 2171 阅读 · 0 评论 -
7.3 AMDGPU GPUVM 页表创建与销毁
本文介绍了AMDGPU驱动中虚拟机(VM)初始化与页表管理的关键流程,主要包括: VM初始化流程:包括数据结构初始化、调度实体创建、页表BO分配等步骤,最终创建Root页目录(PD)并清除其内容。 Root PD创建细节:详细说明了页表BO的内存分配策略、大小计算、内存域选择等实现细节,以及不同层级页表的参数差异。 Root PD初始化过程:描述了引用计数管理、加锁机制、vm_bo_base初始化和清除页表内容的具体操作。原创 2025-12-29 06:00:00 · 2202 阅读 · 0 评论 -
7.4 BO到VA的映射
本文介绍了GPU虚拟内存管理中的BO到VA映射机制。该机制通过DRM_IOCTL_AMDGPU_GEM_VA接口实现映射关系的建立与管理,核心功能包括MAP/UNMAP/CLEAR/REPLACE操作。关键数据结构包括amdgpu_bo_va和amdgpu_bo_va_mapping,通过interval tree检测地址冲突,并维护valids/invalids链表跟踪映射状态。地址空间分为保留区、可用区和VA hole区域,映射变更最终会更新GPU页表。该机制为用户态提供了高效的GPU内存虚拟化能力。原创 2026-01-13 06:00:00 · 2224 阅读 · 0 评论 -
7.5 GPU页表更新机制
本文分析了AMDGPU驱动中BO到VA映射的页表更新实现机制。核心流程通过amdgpu_vm_bo_update()函数触发,支持CPU直接写入和SDMA异步命令两种更新模式。系统根据VRAM可见性自动选择最优更新策略,处理三种主要场景:命令提交、BO迁移和BO销毁。关键实现包括DMA地址数组处理、权限标志合并和BO迁移状态转换,最终通过amdgpu_vm_update_range()完成硬件页表更新。该机制有效平衡了更新延迟与吞吐量,为GPU虚拟内存管理提供基础支撑。原创 2026-01-20 05:30:00 · 2256 阅读 · 0 评论 -
7.6 TLB管理与刷新
本文分析了AMDGPU中TLB刷新机制的关键实现。TLB作为GPU虚拟内存系统的关键组件,在页表更新、VMID切换、GPU复位等场景下需要及时刷新以确保地址转换正确性。AMDGPU采用多级TLB架构(L1每CU独立,L2共享)和VMID关联设计,通过原子序列号(tlb_seq)机制跟踪TLB状态变化。当检测到序列号不一致时触发刷新,并利用fence回调实现异步递增。针对计算任务(Compute VM)还设计了专用的kfd_last_flushed_seq优化机制,避免重复刷新。原创 2026-01-12 06:30:00 · 3461 阅读 · 0 评论 -
7.7 GART vs GPUVM页表的全面对比
本文对比了AMD GPU的两种页表机制GART和GPUVM。GART采用简单的全局页表结构,仅需5个字段,支持CPU直接操作但缺乏并发控制。GPUVM则采用复杂的per-process页表设计,支持进程隔离、异步更新和状态机管理。在API层面,GART提供同步操作,而GPUVM支持异步映射和细粒度TLB刷新。生命周期方面,GART由驱动统一管理,GPUVM则与进程绑定。同步机制上,GART使用简单互斥锁,GPUVM采用多层次锁和Fence机制。原创 2026-01-19 22:09:53 · 2357 阅读 · 2 评论
分享