7.6 GPU页表更新机制

AMD KFD BO实现分析
专栏收录该内容
¥89.90
¥99.00
86 篇文章

上一篇 7-5《BO 到 VA 的映射/解映射/重映射》 说明了 MAP/UNMAP/CLEAR/REPLACE 如何在软件侧维护 amdgpu_bo_va_mapping,并把新建映射挂入 invalids 链表等待写表。这些映射要被 GPU 的 MMU 真正使用,还差最后一步:把 invalids 中的映射填充(更新)到硬件页表——这正是本篇的主题。

本篇聚焦页表更新的主干:从 amdgpu_vm_bo_update() 到 amdgpu_vm_update_range(),以及 CPU 直写与 SDMA 异步两种后端。涉及的若干相邻机制均已独立成篇:页表遍历游标见 7-3《页表遍历游标》,Huge Page / Fragment 优化见 7-7《Huge Page 与 Fragment 机制》,更新过程的锁与并发(eviction 临界区)见 7-8《页表更新的锁与并发模型》,TLB 刷新与延迟释放见 7-12《TLB 管理与刷新》 与 7-13《TLB fence 与页表延迟释放》,本篇涉及时以引用为主。


目录

VIP GPU缺页处理全链路:从MMU页表fault到驱动恢复与重置 GPU内部同样依赖MMU和页表完成虚拟地址到物理地址的翻译,页表项不存在或权限不匹配时,硬件会触发类似CPU缺页的fault机制。不同于Linux内核成熟的内存换入换出路径,GPU fault需要驱动在极短时间内捕获现场、清除中断并决策恢复或重置,否则可能引发中断风暴甚至整卡挂死。理解这一链路对GPU驱动开发、图形栈适配以及CUDA底层调试至关重要。在实际工程中,PTE更新后的TLB失效、页表缓存一致性、缺页恢复时的资源预分配,都是高频踩坑点。本文结合一线案例,从硬件捕获、中断处理、恢复策略到实战调试速查, 开通可读全文·261 阅读·0 点赞·6 收藏 阅读全文

相关推荐

深入解析Mali-GPU驱动中的Midgard架构内存管理机制

本文深入解析Mali-GPU驱动中的Midgard架构内存管理机制,详细介绍了VA/PA映射原理、MMU页表配置流程及中断处理中的内存管理策略。通过分析核心代码结构和性能优化实践,帮助开发者理解如何提升图形渲染效率,特别针对内存区域划分和页表预加载等关键环节提供实用建议。

weixin_28684825的博客 406

7.1 AMDGPU页表机制概览

AMDGPU采用分层架构管理页表,从用户空间ioctl调用到硬件MMU页表遍历,涉及多个软件层次。核心组件包括DRM/GEM层、VM管理层和页表管理层,支持CPU和SDMA两种更新模式。全局页表管理器(amdgpu_vm_manager)负责配置页表层次、分配VMID等资源,而每个进程的页表实例(amdgpu_vm)则管理专属的GPU虚拟地址空间。该架构实现了高效的虚拟内存管理,支持4级页表层次结构,并协调CPU或SDMA方式进行页表更新。

图形/计算GPU的驱动与虚拟化技术分享园地 2695

7.4 AMDGPU GPUVM 页表创建与销毁

本文介绍了AMDGPU驱动中虚拟机(VM)初始化与页表管理的关键流程,主要包括: VM初始化流程:包括数据结构初始化、调度实体创建、页表BO分配等步骤,最终创建Root页目录(PD)并清除其内容。 Root PD创建细节:详细说明了页表BO的内存分配策略、大小计算、内存域选择等实现细节,以及不同层级页表的参数差异。 Root PD初始化过程:描述了引用计数管理、加锁机制、vm_bo_base初始化和清除页表内容的具体操作。

图形/计算GPU的驱动与虚拟化技术分享园地 2345

7.2 GPUVM 多级页表组织结构

AMD GPU采用四级页表结构(PDB2/PDB1/PDB0/PTB),每级512项,对应48位虚拟地址空间。页表以BO(Buffer Object)形式存储,各级页表通过链表关联,形成树状结构管理内存映射。每个PTB项覆盖4KB页,通过硬件MMU实现地址转换。

图形/计算GPU的驱动与虚拟化技术分享园地 2334

7.18 GART vs GPUVM页表的全面对比(软硬件维度)

本文对比了AMD GPU的两种页表机制GART和GPUVM。GART采用简单的全局页表结构,仅需5个字段,支持CPU直接操作但缺乏并发控制。GPUVM则采用复杂的per-process页表设计,支持进程隔离、异步更新和状态机管理。在API层面,GART提供同步操作,而GPUVM支持异步映射和细粒度TLB刷新。生命周期方面,GART由驱动统一管理,GPUVM则与进程绑定。同步机制上,GART使用简单互斥锁,GPUVM采用多层次锁和Fence机制。

图形/计算GPU的驱动与虚拟化技术分享园地 2518

AMD KFD的BO设计分析系列8-6:页表更新机制

本文分析了AMDGPU虚拟内存管理中页表更新的核心机制。系统支持CPU和SDMA两种更新模式:CPU模式适用于小规模更新和系统内存页表,具有低延迟优势;SDMA模式则适合大规模更新和VRAM页表,提供高吞吐能力。更新流程包含初始化、准备、遍历资源、提交更新和TLB刷新等步骤,其中SDMA模式通过构造间接缓冲区实现异步命令提交。关键优化包括检测连续物理页合并为大页映射,以及确保PTE写入对GPU可见的内存屏障机制。该机制有效平衡了不同场景下的性能需求,为GPU虚拟化提供了高效支持。

图形/计算GPU的驱动与虚拟化技术分享园地 740

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

图形/计算GPU的驱动与虚拟化技术分享园地 2470

6-2 GPU GART 绑定机制与 TLB 失效

本文详细解析了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格式 内存

图形/计算GPU的驱动与虚拟化技术分享园地 2623

7.18 GART 与 GPUVM 对比:一颗 GPU 上两套页表的分工

本文横向对比AMD GPU上并存的GART与GPUVM两套页表。GART为内核专用,全局单一,线性单层结构,CPU同步直写;GPUVM为每进程48位地址空间,四级页表,含并发状态机,支持隔离与迁移。二者通过VMID区分,共享GMC硬件与PTE编码,分工互补。

图形/计算GPU的驱动与虚拟化技术分享园地 357

IOMMU的2级地址翻译机制及多级(2~5)页表查找

摘要:IOMMU是现代计算机系统中为I/O设备设计的地址翻译与保护机制,支持虚拟化环境下的两级地址翻译(Stage1+Stage2)。其核心机制包括:1)通过多级页表(2-5级)实现设备虚拟地址到物理地址的转换;2)L1/L2 MMU分层架构,分别处理guest级和host级地址翻译;3)x86和ARM架构的具体实现差异,如Intel VT-d的4级页表走查和ARM SMMU的TTBR/TCR寄存器配置;4)ATS(地址翻译服务)优化机制,通过设备端缓存翻译结果减少延迟。这些技术共同保障了I/O虚拟化的安全

元直的博客 1647

7.7 Huge Page 与 Fragment 机制

本文介绍amdgpu页表更新中的大页与Fragment优化:基于物理连续与地址对齐,连续映射可合并为2MB/1GB大页,直接在高层PDE落地省去下层页表,并通过PTE的frag字段(bit7-11)提升TLB效率。Fragment大小由起始地址对齐度和区间长度决定,受硬件限制;系统内存因物理分散禁止合并。该机制显著降低页表内存占用与TLB压力。

图形/计算GPU的驱动与虚拟化技术分享园地 500

5.5 amdgpu HMM:userptr BO 的页表同步

本文介绍了AMDGPU驱动中userptr BO的实现机制,其核心思路是将用户态CPU内存包装为GEM/TTM BO对象,通过HMM机制同步CPU页表到GPU页表。主要内容包括:1) userptr BO与SVM的区别,前者侧重于页表同步而非迁移;2) BO创建流程,包括UAPI接口和HMM notifier注册;3) notifier回调处理,GFX和KFD采用不同失效策略;4) 页获取与绑定过程,通过HMM获取页并转换为GPU可访问形式;5) 命令提交时的页表验证机制;6) KFD特有的恢复工作队列机制

图形/计算GPU的驱动与虚拟化技术分享园地 364

使用R语言(ggplot2)绘制KEGG信号通路富集气泡图

本文详细介绍了如何使用R语言的ggplot2包绘制KEGG信号通路富集气泡图,从数据预处理到高级定制技巧,帮助生物信息学研究者直观展示富集分析结果。文章涵盖了气泡图的核心绘制方法、布局优化、常见问题解决方案以及交互式可视化扩展,是进行KEGG富集分析可视化的实用指南。

weixin_42625070的博客 444

手把手教你用Origin拟合真应力-真应变曲线:从数据到加工硬化指数n的完整流程

本文详细解析了如何使用Origin软件拟合真应力-真应变曲线并计算加工硬化指数n的全流程。从数据预处理、曲线绘制到Hollomon方程拟合,逐步指导材料科学研究人员完成实验数据分析,帮助准确评估金属材料的力学性能与强化特性。

view3的博客 699

LSM6DS3TR-C IMU传感器入门:从MEMS原理到姿态解算实战

惯性测量单元(IMU)是现代智能设备实现运动感知的核心部件,其基础原理基于微机电系统(MEMS)技术。MEMS加速度计通过检测质量块在惯性力作用下的位移来测量线性加速度,而陀螺仪则利用科里奥利力效应感知角速度。这种技术使得微型化、低成本的6自由度运动测量成为可能,为机器人、无人机、可穿戴设备等提供了关键的空间姿态和运动状态信息。在实际工程中,开发者需要掌握I2C/SPI通信协议、传感器数据读取与校准,并通过互补滤波等算法融合加速度计和陀螺仪数据,实现稳定的姿态解算。LSM6DS3TR-C作为一款高性价比的6

weixin_28684655的博客 589

关于 SAP UI5 应用 url 中的特殊符号 # 的作用介绍

符号在 SAP UI5 的 URL 中不仅仅是一个分隔符,更是动态路由、状态管理和深链接的关键所在。通过合理使用,开发者可以实现高效、流畅的用户体验,同时保持系统的可维护性和扩展性。通过 SAP UI5 提供的灵活路由机制,企业应用可以轻松实现复杂导航需求,同时为用户提供直观的交互体验。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 396

手把手教你学SOME/IP「3.2.1.发布/订阅行为」

本文详细介绍了SOME/IP协议中的服务发现机制,重点解析了发布/订阅行为的流程。主要内容包括:1)服务发布与Method通信流程,涵盖find/offer报文交互、TTL保活机制及异常处理;2)服务订阅与Event通信流程,包括subscribe/ack报文交互和组播延迟机制;3)特殊场景如快速发送、半周期回复、重置订阅等机制。通过邮局订阅报纸的类比,帮助理解服务发现的核心原理,并强调流程图对于问题定位的重要性。文章为SOME/IP协议的工程实现提供了实用指导。

nihaoljq2010的博客 1216

大模型_WIN10使用hyper-v安装Ubuntu24.04虚拟机_配置独立静态IP地址_连接外网_并与内网其他机器互通_通过容器安装Dify_超详细安装过程002--人工智能工作笔记0247

本文详细描述了在Hyper-V环境中配置网络、安装Ubuntu虚拟机、设置IP地址、安装Docker以及部署Dify应用的过程。首先,通过Hyper-V管理器创建外部虚拟交换机(ExternalSwitch),并配置本机、虚拟交换机和Ubuntu虚拟机的IP地址,确保网络互通。接着,在Ubuntu虚拟机中安装Open-VM-Tools和Docker,并配置Docker的国内镜像源。最后,通过Git克隆Dify源码,使用Docker Compose启动Dify应用,完成部署。整个过程涵盖了网络配置、虚拟机管理

添柴程序猿的专栏 1746

【SpringBoot笔记44】SpringBoot多数据源配置(方式一:配置多个mapper扫描不同的包路径实现多数据源配置)

在SpringBoot应用开发中,一般情况下,都是只会配置一个数据源信息,之后整个工程都是对当前数据源进行增删改查的操作。但是,在实际开发里面,也有可能会遇到多数据源的情况,例如:当前工程中除了需要访问自己应用的数据库,还需要直接连接第三方系统的数据库进行业务处理,这种情况下,就需要进行多数据源的配置。SpringBoot考虑到了这一点,所以它是支持多数据源的配置的,下面介绍一下如何配置多数据源。

✅ Java 开发工程师 1109

Vue3 - Vite运行打包时Uncaught ReferenceError: process is not defined(解决vue3+vite报错process is not defined)

vue3,vite,vue3+vite报错,process,UncaughtReferenceError:processisnotdefined,浏览器控制台报错processisnotdefined解决方法,vue3如何解决报错,vite报错怎么办,前端打包UncaughtReferenceError:processisnotdefined,npmrunbuild打包报错,vite打包时出现错误,vue3打包运行找不到process,热更新会报错UncaughtRefer

🏆 前端领域优质创作者 7731

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: 7.18 GART vs GPUVM页表的全面对比(软硬件维度)
下一篇: 8.1 amdgpu bo 的 dma address 的使用

双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —
DeeplyMind
DeeplyMind 新星创作者: 嵌入式与硬件开发技术领域 新星创作者: 嵌入式与硬件开发技术领域
博客等级 码龄16年 2195粉丝 862原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值