从HsaMemFlags 与 HsaMemMapFlags 理解 GPU 存储管理硬件技术 HsaMemFlags 与 HsaMemMapFlags 所反映的 GPU 存储管理硬件技术本文分析HsaMemFlags、HsaMemMapFlags以及相关的HSA_SVM_FLAGS每一个标志位背后对应的 GPU / 平台硬件技术帮助理解 KFD 内存分配、映射与迁移语义与底层硬件能力之间的映射关系。1. 概述在深入具体的显存管理 API 之前有必要先俯瞰整个硬件系统为支持存储管理提供了哪些能力以及每项能力要解决的问题。HsaMemFlags、HsaMemMapFlags以及 SVM 的相关标志位正是这些硬件能力在软件接口上的直接投影——分配与映射时设置的每一个 bit几乎都对应一项具体的硬件技术。因此熟悉这几组标志位的过程本身就是一次自底向上梳理 GPU 存储管理硬件技术的过程。HsaMemFlags用于hsaKmtAllocMemory的分配阶段HsaMemMapFlags用于hsaKmtMapMemoryToGPU的映射阶段二者的每个 bit 几乎都对应一项具体的 GPU / 互连 / IOMMU / 页表硬件能力。总体上它们覆盖以下几大硬件技术门类门类关键技术内存一致性Infinity Fabric、AA 一致性域、fine/coarse-grain、system-scope atomics原子操作PCIe AtomicOp、IOMMUv2 ATC 路径地址转换 / SVMGPUVM 多级页表、IOMMUv2ATS/PRI、统一虚拟地址空间显存类型HBM/GDDR VRAM 分区、GART/GTT、GDS/LDS/Scratch 片上存储缓存策略GPUVM PTE MTYPECached/NonCached/WriteCombined/Uncached分页 / TLB多页大小4K/64K/2M/1G、可恢复缺页、HMM 页迁移执行 / 调度AQL 队列、doorbell、MES 固件、SDMA 拷贝/迁移引擎页权限NX 执行位、只读位、页锁定pinned2. HsaMemFlags 逐位分析2.1 内存一致性Cache Coherency反映 AMDAPU / AACPUGPU 统一架构与dGPU的一致性差异。标志硬件技术带来的益处 / 解决的问题CoarseGrain0 FineGrainHSA 内存一致性模型。Fine-grain 依赖互连硬件在每次访存时维持一致性Coarse-grain 只在 dispatch / 同步屏障点由软件强制刷新。对应 GPU L2 cache 的一致性协议行为。Coarse-grain 省去逐次一致性开销让计算 kernel 全速跑、带宽利用率最高Fine-grain 则换取 CPU/GPU 随时可见同一份数据免去显式拷贝与同步简化编程模型。让软件在吞吐与共享便利之间按需取舍。ExtendedCoherent系统级原子一致性system-scope coherence原子指令跨 CPU/GPU 全系统范围保持一致依赖 Infinity Fabric / CXL 类互连的一致性域扩展。使 CPU 与 GPU 能对同一变量做无锁原子协作生产者/消费者队列、全局计数器、细粒度任务窃取无需回到 host 端串行同步大幅降低跨设备协作延迟。UncachedAA 平台 fine-grain uncached 访问绕过 cache用于 CPU/GPU 频繁读写的共享标志位。对应 GPUVM PTE 的 MTYPE 页属性。消除缓存行乒乓与陈旧数据问题让 spin flag / 信号量的写入对对端立即可见是低延迟轮询式同步的关键避免缓存刷新带来的抖动。CachePolicy2 bit见HSA_CACHING_TYPEGPUVM PTE MTYPE 缓存策略Cached / NonCached / WriteCombined直接映射到页表项缓存位。按访问模式定制缓存行为只读/复用数据用 Cached 提升命中率流式写用 WriteCombined 合并突发写以打满带宽从而针对不同数据流最大化有效带宽。底层实现GPU 页表项中的MTYPE coherence bit以及 CPU 侧 IOMMU / PCIe 一致性能力。2.1.1 内存一致性与缓存策略的区别两者常被混淆但处在不同层面、解决不同问题缓存策略决定单个访问者这次访存走不走缓存、怎么走本地性能路径内存一致性决定我写进缓存后别的访问者另一颗芯片何时能看到多方正确性。维度内存一致性Coherency缓存策略Cache Policy / MTYPE回答的问题多个访问者之间看到的数据是否一致谁先看到谁的写入单个访问者这块内存要不要 / 怎么进缓存作用对象CPU↔GPU、GPU↔GPU 等多方之间的可见性一条访存请求本身的缓存行为硬件位置L2 Cache 一致性协议引擎 互连Infinity FabricGPUVM 页表项里的 MTYPE 位UTCL2 施加对应标志CoarseGrain/FineGrain、ExtendedCoherentCachePolicyCached/NonCached/WriteCombined、Uncached语义性质正确性与同步语义性能与访问路径选择两者常配合使用Uncached缓存策略之所以适合 CPU/GPU 共享的 spin flag正是因为绕过缓存后无需一致性协议介入即可立即互相可见——用不缓存规避一致性难题而 fine-graincoherency走另一条路——允许缓存靠一致性硬件Infinity Fabric保证缓存数据跨芯片同步用协议换取既缓存又一致。一句话概括缓存策略 数据进不进 cache本地一致性 进了 cache 后跨访问者何时可见多方。2.2 原子操作Atomics硬件路径标志硬件技术带来的益处 / 解决的问题AtomicAccessFullAPU 上 ATC / IOMMUv2 路径的完整原子操作系统内存经 IOMMUv2 映射支持全套原子指令。让 GPU 直接对系统内存执行完整原子集min/max/and/or 等复杂并发算法哈希表、并发队列、直方图归约可原地在共享内存完成无需搬运回 VRAM 或退化为锁。AtomicAccessPartialPCIe 原子事务PCIe AtomicsdGPU 经 PCIe 只支持 SWAP / CAS / FetchAdd 三种硬件原子PCI Express 规范定义的 AtomicOp。在纯 PCIe 平台上仍提供硬件级 CAS/FetchAdd支撑基本的无锁计数与指针交换避免完全退回到 host 端串行处理明确其能力边界也帮助运行时选择正确的回退路径。底层依赖PCIe AtomicOp Completer/Requester 能力、IOMMUv2 ATS/PRI。2.3 地址转换与虚拟内存SVM / IOMMU标志硬件技术带来的益处 / 解决的问题HostAccessGPUVM 页表是否对 CPU 侧建立映射决定 BAR / 系统内存可见性。让 CPU 能直接读写该缓冲初始化、检查结果、填充参数省去中转拷贝关闭它则保护纯设备私有数据、避免误暴露并节省 BAR 空间。NonPaged页锁定page-locked / pinned内存避免换页供 DMA / IOMMU 直接访问。保证物理地址稳定使 DMA / 迁移引擎无需担心页被换出获得可预测的低延迟传输是高吞吐 H2D/D2H 拷贝与 P2P 的前提。FixedAddress在调用者指定的虚拟地址处分配类似mmap的MAP_FIXED置位时*MemoryAddress传入期望 VA分配器必须落在该地址地址不空闲则失败不置位时由分配器自行选址。属于 GPUVM 虚拟地址空间的放置控制。让调用者精确控制分配落点用于需要固定/预留布局的场景如复用同一 VA 重建映射、满足对特定地址区间的约束或与已有地址空间规划对齐。NoAddress/OnlyAddressVRAM 分配与 VA 分配解耦反映 GPUVM 中物理显存句柄与虚拟地址预留可分离管理支持稀疏 / 延迟映射。支持先预留大段虚拟地址、再按需回填物理页实现稀疏资源与延迟/超额分配节省显存并支撑大而稀疏的数据结构。NoNUMABindNUMA 拓扑感知系统内存是否绑定特定 NUMA 节点涉及多 socket / 多内存控制器布局。让分配落在离 GPU 最近的内存控制器上降低跨 socket 访问延迟、提升有效带宽放开绑定则在均衡场景下获得更灵活的放置。对应能力位HSA_CAPABILITY.HSAMMUPresent/SVMAPISupported依赖ATS PRIIOMMUv2 1.1 规范。2.4 显存类型与堆管理VRAM / GTT / 片上存储标志硬件技术带来的益处 / 解决的问题GTTAccessGARTGraphics Address Remapping Table/ GTT 映射供 MESMicroEngine Scheduler固件访问。把分散的系统内存页在 GPU 侧重映射为连续地址窗口使 GPU 无需大 VRAM 即可访问 host 内存是无 VRAM 驻留大数据集的桥梁。Contiguous连续物理 VRAM 分配用于需要物理连续的场景某些 DMA 引擎、P2P、显示扫描。满足显示扫描、P2P、单描述符 DMA 对物理连续的硬性要求减少 scatter-gather 描述符数量提升传输效率与兼容性。GDSMemoryGDSGlobal Data ShareGPU 片上全局数据共享存储器硬件。提供跨 workgroup 的低延迟片上共享存储适合全局归约、序号分配、跨组同步等比走 VRAM 快一个数量级。ScratchScratch 显存线程私有溢出空间对应 SGPR/VGPR 溢出临时区。为寄存器溢出提供后备空间使高寄存器压力的复杂 kernel 仍能正确运行避免因寄存器不足而编译失败或占用率骤降。PageSize2 bit见HSA_PAGE_SIZE多级页大小4KB/64KB/2MB/1GB对应 GPUVM 大页 / 巨页 TLB降低 TLB miss。大页显著减少 TLB 项数与 miss、缩短地址翻译路径对大缓冲区的随机访问带宽提升明显小页则减少内存碎片浪费。相关HSA_HEAPTYPE_FRAME_BUFFER_PUBLIC/PRIVATE对应BAR 大小限制 / Resizable BAR (Smart Access Memory)。2.5 执行 / 调度相关内存标志硬件技术带来的益处 / 解决的问题AQLQueueMemoryHSA AQLArchitected Queuing Language队列内存KFD 保证最优位置与对齐供 doorbell / HW 调度器访问。让应用无需内核参与即可通过 doorbell 直接向硬件调度器提交任务实现低延迟用户态 dispatch是 GPU 高频提交小任务的性能基础。QueueObjectAQL queue 对象供 CPU 读取amd_queue_t的 read pointer。使 CPU 能高效轮询队列进度、做流控与回收无需系统调用即可感知 GPU 消费位置。ExecuteAccess页可执行属性NX / eXecute bit区分数据页与代码页着色器指令、队列影响 PTE 执行权限位。通过 NX 隔离代码与数据防止数据被当作指令执行提升安全性并帮助捕获越界跳转等错误。ExecuteBlitBlit kernelSDMA / 拷贝内核对象内存涉及 SDMA 拷贝引擎。让拷贝/填充卸载到专用 SDMA 引擎与计算 kernel 并行执行掩盖数据搬运开销、提升整体吞吐。ReadOnly页只读属性PTE 读写位也用于允许 migration scale-out。只读语义既防止意外写坏共享数据又让同一页可安全复制到多个 GPUscale-out在多卡只读访问时消除迁移争用。3. HsaMemMapFlags 逐位分析映射与迁移HsaMemMapFlags侧重映射时的迁移语义反映HMMHeterogeneous Memory Management/ 按需分页Page Migration硬件链路。标志硬件技术带来的益处 / 解决的问题Migrate页迁移把系统内存页迁移到被映射 GPU 的本地 VRAM依赖 GPU page faultrecoverable fault SDMA 迁移引擎。让热数据自动落到 GPU 本地高带宽 VRAM把远端 PCIe 访问变为本地访问显著提升访问带宽、降低延迟且对应用透明。Probe预迁移 / 驱逐提示预告即将映射触发非必要数据驱逐降低后续缺页延迟“cleanup hint”可被忽略。提前腾出显存并预热映射把缺页开销从关键路径移走平滑迁移抖动、减少首次访问的长尾延迟。ReadOnly映射期内存不被修改 → 允许migration scale-out同一只读页可复制到多 GPU。只读页可同时复制到多张 GPU 各自的本地 VRAM多卡并行读取同一数据集时避免相互抢占迁移提升多卡扩展性。CachePolicy/PageSize/HostAccess与HsaMemFlags中同名字段含义一致作用于映射阶段的 PTE 属性。在映射阶段按目标设备重新定制缓存/页大小/可见性使同一块内存针对不同 GPU 得到最优 PTE 属性。底层是ZONE_DEVICE drm_pagemap SDMA的缺页迁移链路。4. 相关HSA_SVM_FLAGSSVM 层的一致性与迁移控制HSA_SVM_FLAGS进一步在 SVM 语义上暴露硬件能力标志硬件技术带来的益处 / 解决的问题HSA_SVM_FLAG_HOST_ACCESS保证 CPU 可访问建立双向映射。让 CPU 与 GPU 共享同一 SVM 指针并双向读写简化数据准备与结果回读无需显式 map/unmap。HSA_SVM_FLAG_COHERENTfine-grained 一致性所有可访问设备间依赖一致性互连。跨设备随时看到彼此最新写入支撑细粒度协作与共享数据结构免去手动同步刷新。HSA_SVM_FLAG_EXT_COHERENTdevice-scope atomics 细粒度一致性system-scope 原子扩展。把原子一致性扩展到系统范围使跨设备无锁算法正确成立是多设备协同的正确性基石。HSA_SVM_FLAG_HIVE_LOCALXGMI Hive 拓扑优先使用同 hive 内 GPUHsaNodeProperties.HiveID。将数据放置/迁移限定在高带宽 XGMI 互连的同一 hive 内避开慢速跨 hive 链路最大化多卡间传输带宽。HSA_SVM_FLAG_GPU_RO/GPU_READ_MOSTLY只读 / 读多优化允许页复制replication写触发缺页。让读多数据在各 GPU 本地各存一份副本消除重复远程读取与迁移抖动显著提升只读工作集的多卡吞吐。HSA_SVM_FLAG_GPU_ALWAYS_MAPPEDXNACK disable语义GPU 映射始终有效避免可恢复缺页。保证映射常驻、消除运行期缺页停顿带来确定性延迟适合对抖动敏感或不支持重放的场景。与迁移相关的枚举HSA_MIGRATE_TRIGGERS、HSA_SVM_UNMAP_TRIGGERS、HSA_SMI_EVENT描述了迁移触发源prefetch、GPU/CPU 缺页、TTM eviction、MMU notifier 等直接对应 KFD SVM 迁移与驱逐的硬件事件路径。5. 延伸平台形态 AA 与 x86A 的差异前面多处标志如Uncached、AtomicAccessFull、ExtendedCoherent都特别标注了AA 平台。这里对该术语及其对存储管理能力的影响做一个集中说明。5.1 术语含义AA指AMD CPU AMD GPU的同构平台组合——CPU 与 GPU 均为 AMD 产品二者通过Infinity Fabric一致性互连直连。与之相对的是x86A如 Intel CPU AMD GPUCPU 与 GPU 之间只能通过PCIe连接。最典型的 AA 产品是MI300AZen4 CPU chiplet 与 CDNA3 GPU chiplet 封装在一起、物理共享同一片 HBM是 fine-grain 一致性与统一内存的极致形态。5.2 能力差异对照AA 平台凭借 Infinity Fabric 一致性互连获得一批纯 PCIe 连接拿不到的硬件能力能力AAInfinity Fabricx86APCIe缓存一致性硬件维护 fine-grain 一致性仅 coarse-grain / 软件刷新原子操作全套原子AtomicAccessFull走 ATC/IOMMUv2 路径仅 PCIe 三种原子AtomicAccessPartialSWAP / CAS / FetchAdduncached 共享内存支持Uncached标志一般不支持system-scope 原子ExtendedCoherent可用受限统一内存CPU/GPU 共享 HBMMI300A需经 PCIe 迁移 / 映射5.3 对本文标志位的意义文档中凡标注AA 平台的标志位如Uncached、AtomicAccessFull本质上都是依赖 AMD CPUGPU 一致性互连才能生效的硬件特性在纯 PCIe 的 dGPU 场景下它们要么不可用要么退化为不同的行为路径例如原子操作退回到AtomicAccessPartial的 PCIe AtomicOp 子集。因此运行时在选择这些标志前仍需结合第 8 节的能力发现流程按节点判断可用性。6. 各技术所在的硬件与模块物理落点前面按标志位拆解了是什么技术、有什么益处这一节回答这些技术究竟落在哪块硬件、硬件的哪个模块里。先给出一张分层结构图再用表格逐项定位。6.1 硬件分层结构封装内 / 板载存储CPU 芯片AMD / Intel互连Infinity FabricAA 一致性域XGMI多 GPU HivePCIe Root Complex / SwitchGPU ASICCDNA / RDNACU / SIMDVGPR·SGPR·LDS·Scratch 寻址GDS 全局数据共享L2 Cache 一致性协议 / 原子 ALUGPUVM / UTCL2页表游走器 · TLB · MTYPESDMA 拷贝 / 迁移引擎MES 微引擎 doorbell apertureBIF / PCIe 接口AtomicOpCPU 核心 LLC集成内存控制器 IMCNUMA 节点IOMMU / IOMMUv2ATS/PRI/ATCHBM / GDDRVRAM含 ECC系统 DRAM6.2 技术落点对照表技术所在硬件具体模块 / 单元说明MTYPE 缓存策略 / UncachedGPU ASICGPUVM 页表项PTE UTCL2缓存类型是 PTE 里的 MTYPE 位由地址转换单元 UTCL2 在翻译时施加。fine/coarse-grain 一致性GPU ASICL2 Cache 一致性协议引擎一致性粒度由 L2 及其 coherence 逻辑决定dispatch/屏障点触发刷新。GPU 侧原子 ALUGPU ASICL2 / 原子执行单元完整原子集在 GPU 内部 ALU 实现跨设备时经互连传播。多级页表 / TLB / 多页大小GPU ASICGPUVM 页表游走器 TLBUTCL24K/64K/2M/1G 大页与 TLB 命中都由该单元处理。recoverable page fault / XNACKGPU ASICUTCL2 缺页逻辑 CU 重放XNACK缺页由页表单元上报、由 CU 的 XNACK 机制重放访存。GART / GTTGPU ASICGART 重映射表UTCL2 管辖把分散系统内存页映射为 GPU 侧连续地址窗口。GDSGPU ASICGDS 片上存储块独立于 L2 的全局数据共享 SRAM。LDS / Scratch / VGPR·SGPRGPU ASICCU / SIMD 内的片上存储与寻址Scratch 是寄存器溢出后备寻址由 CU 生成。SDMA 拷贝 / 迁移GPU ASICSDMA 引擎独立 DMA 引擎与计算并行搬运数据、执行 HMM 迁移。AQL 队列 / doorbell / 用户态提交GPU ASICMES 微引擎 doorbell aperture硬件调度器 MES 消费 AQL 包doorbell 是寄存器映射窗口。NX / 只读页权限GPU ASICGPUVM PTE 权限位执行位与读写位同样落在页表项里。PCIe AtomicOp部分原子GPU 接口 主板BIF / PCIe 接口 Root ComplexSWAP/CAS/FetchAdd 由 PCIe 事务层完成需 RC 支持 Completer。Resizable BAR (SAM)GPU 接口 主板 BIOSBIF BAR 配置 主板/BIOS决定 CPU 能否一次性映射整块 VRAM。HBM / GDDR VRAM含 ECCGPU 封装 / 板载显存颗粒 显存控制器物理存储介质ECC 由显存控制器提供。system-scope 原子 / AA 一致性互连Infinity Fabric 一致性域把 CPU 与 GPU 纳入同一一致性域是ExtendedCoherent/Uncached的物理基础。多 GPU Hive / HIVE_LOCAL互连XGMI 链路同 hive 内 GPU 走高带宽 XGMI跨 hive 退化。P2P DMA互连PCIe Switch / XGMIGPU↔GPU 直传绕开 host 内存。IOMMUv2ATS/PRI/ATCCPU 芯片CPU 侧 IOMMU地址转换服务与页请求接口AtomicAccessFull、SVM 依赖它。NUMA 亲和 / 系统内存CPU 芯片集成内存控制器IMC DRAM分配落在哪个 NUMA 节点由 IMC 拓扑决定。pinned / page-lockedCPU OS内核内存管理KFD 固定页阻止换页以保证 DMA 地址稳定。HMM 页迁移 / ZONE_DEVICE / drm_pagemap软件 GPU内核 HMM 框架 SDMA迁移的策略层在内核搬运动作由 GPU SDMA 执行。记忆线索“页相关”PTE/MTYPE/权限/大页/缺页几乎都在 GPU 的 GPUVM/UTCL2搬运在 SDMA提交调度在 MES/doorbell跨芯片一致性与原子在 Infinity Fabric / PCIe / IOMMU存储介质在 HBM/GDDR 与系统 DRAM。7. 涉及的硬件技术清单一致性互连Infinity Fabric、AA 一致性域、system-scope 原子、GPU L2 一致性协议、XGMI Hive。PCIe 特性PCIe AtomicOp、Resizable BAR (SAM)、P2P DMA。地址转换IOMMUv2ATS/PRI、GPUVM 多级页表、GART/GTT、SVM 统一地址空间。TLB / 分页多页大小4K/64K/2M/1G、recoverable page fault、HMM 页迁移、XNACK。片上 / 专用存储GDS、LDS、Scratch、HBM/GDDR VRAM 分区。缓存策略MTYPECached/Uncached/WriteCombined、fine/coarse-grain 粒度。调度硬件AQL 队列、doorbell、MES 固件、SDMA 拷贝 / 迁移引擎。页权限NX 执行位、只读位、页锁定pinned。8. 硬件能力发现路径上述标志的可用性由HsaNodeProperties.CapabilityHSA_CAPABILITY等拓扑属性在运行时决定关键位包括HSAMMUPresentIOMMUv2、SVMAPISupported、CoherentHostAccess、ASICRevision、Mem_EDCSupportECC等。应用 / 运行时应先查询这些能力位再选择对应的HsaMemFlags/HsaMemMapFlags组合以避免在不支持的节点上分配失败。这一篇涉及整个硬件系统的核心技术内容很多一下看不明白也不要紧后面在分析具体功能流程和API时会细讲按需学习即可。