技术深度篇二:超节点里的统一内存编址:从 RDMA、DMA 到 Load/Store 语义
目录本文你会看懂什么先用一句话解释先看报告里的技术边界一、先区分两条路径数据路径和控制路径二、DMA、RDMA、Load/Store 的边界三、统一地址空间的核心组件四、CXL 在这里承担什么角色五、Fabric 化之后内存变成资源池六、操作系统和运行时必须参与七、统一内存能力的指标化八、工程判断清单九、总结核心术语表本文基于以下三份报告进行汇总、解释和二次整理华为《超节点发展报告中兴《超节点技术白皮书H3C《超节点技术白皮书》本文你会看懂什么超节点为什么要把问题从“高速通信”推进到“统一地址空间”和“内存访问语义”。RDMA、DMA、Load/Store不是谁替代谁而是分别位于不同的数据访问层次。CXL、MMU、IOMMU、Linux 内核和资源池化如何影响未来超节点的软件栈设计。上一篇讨论了Scale-Up和HBD重点是把高频通信留在更高带宽、更低时延的域内。这一篇继续往下拆当设备已经连得足够近下一步要解决的是“数据如何被访问”。先用一句话解释统一内存编址的意思是系统给多张 GPU/NPU、CPU 内存、扩展内存等资源建立一套统一的地址视图让设备访问数据时可以先用“地址”描述目标数据再由硬件、协议、驱动和运行时去判断这块数据到底在哪个设备、哪层内存、应该走哪条访问路径。它要解决的不是“所有内存真的变成同一块物理内存”而是解决一个更底层的问题在多设备系统里数据不能只靠“你发给我、我再拷贝一份”来协作系统需要有能力让远端内存也变成可寻址、可管理、可访问的资源。可以先用一个小例子理解。场景传统分布式访问统一内存编址后的目标GPU 0 想用 GPU 1 上的一段数据GPU 0 不能直接理解 GPU 1 的本地地址通常要通过通信库发起传输把数据拷贝或拉取过来GPU 0 可以通过统一地址模型描述要访问的数据底层负责把这个地址翻译到 GPU 1 的目标内存地址的含义每张卡有自己的“地址本”同一个地址值在不同卡上可能指向不同地方多设备共享一套更高层的地址解释规则地址可以被翻译成“哪个设备 哪块内存 哪条路径”编程模型开发者更关心发送、接收、拷贝、同步开发者更希望按访问内存的方式组织部分数据协作这里有一个很重要的边界统一内存编址不等于访问远端内存就和访问本地 HBM 一样快也不等于所有缓存一致性问题自动消失。它只是把多设备协作从“显式搬数据”往“按地址访问数据”推进了一步。所以统一内存编址可以简单理解为先统一地址再讨论访问没有统一地址远端数据就很难从系统资源变成可编程资源。从工程角度看超节点里的统一内存编址也不是一句“显存共享”。它至少包含三层问题层次关键问题典型技术对象地址层远端内存如何被寻址全局地址、MMU、IOMMU、地址翻译访问层设备如何读写远端数据DMA、RDMA、Load/Store、CXL.mem管理层内存资源如何分配、隔离和回收OS、驱动、运行时、资源池、调度器所以统一内存编址真正讨论的是一个系统问题在多 GPU/NPU、多内存层级、多互联协议并存时如何把“数据在哪里”和“如何访问它”抽象成可管理、可调度、可观测的基础能力。先看报告里的技术边界华为报告第 15 页把超节点的基础特征概括为超大带宽、超低时延互联和内存统一编址。报告以昇腾 384 为例给出一个很有参考价值的量级相比传统服务器架构通信带宽提升 15 倍单跳通信时延从 2 微秒降到 200 纳秒域内 AI 芯片支持内存统一编址AI 芯片可以用内存语义直接访问其他 AI 芯片内存。中兴报告第 10 页进一步把统一内存编址和访问方式讲得更明确统一地址是区别普通分布式集群的重要前提GPGPU 倾向使用Load/Store内存语义DSA GPU 则更多使用 DMA 消息语义。换句话说统一内存并不等于只有一种访问方式而是要在一个地址模型下同时容纳内存语义和消息语义。把两份报告放在一起看统一内存编址至少要满足三个条件条件工程含义带宽和时延足够接近本地访问否则远端内存只能做冷数据无法进入关键路径地址空间可以统一解释否则上层仍要显式维护远端地址和拷贝关系访问语义能被软件栈承接否则硬件支持不会自然转化为框架能力一、先区分两条路径数据路径和控制路径讨论远端内存访问时最容易混在一起的是数据路径和控制路径。数据路径关心数据怎么走。从哪块内存读经过 PCIe、RDMA、CXL 还是 Scale-Up 互联是否经过 CPU是否经过交换芯片带宽、时延、重传和一致性开销是多少控制路径关心访问怎么被允许和管理。内存是否已经注册地址如何映射权限如何检查哪个进程、容器、租户可以访问故障后映射如何恢复调度器是否知道这块内存的拓扑位置传统RDMA优化了数据路径特别是减少 CPU 参与和内存拷贝。但统一内存编址要进一步处理控制路径地址空间、权限、隔离、一致性、迁移和资源回收。H3C 报告中的 GPU Direct RDMA 架构图可以作为传统高速访问路径的参照。图源H3C《超节点技术白皮书》第 247 页图 164。GPU Direct RDMA的价值在于让网卡直接和 GPU 显存交互减少 CPU staging copy。但它仍然需要内存注册、访问权限、队列、完成通知等机制编程和运行时模型仍然是显式通信。统一内存编址要解决的是能不能把更多远端资源纳入统一地址和统一调度模型让上层框架不必把每一次跨设备访问都显式组织成通信流程。二、DMA、RDMA、Load/Store 的边界这几个词经常一起出现但它们不是同一个维度。模型核心动作典型控制对象适合场景技术风险DMA设备按描述符搬运一段内存源地址、目的地址、长度、完成状态本机设备间大块搬运需要显式编排粒度偏粗RDMA通过网络直接读写远端内存MR、QP、CQ、rkey、队列深度跨节点高速通信内存注册和访问控制复杂Load/Store以读写地址方式访问目标内存地址转换、权限、一致性、缓存紧耦合设备协同对协议、MMU、OS 要求更高一个更工程化的判断是如果你在写通信库RDMA是你显式发起的通信操作。如果你在看加速卡互联DMA是数据搬运的基础机制之一。如果你在设计超节点编程模型Load/Store是希望暴露给上层的访问语义。H3C 报告提到AI 工作负载会推动系统从传统Read/Write或DMA模型走向统一Load/Store内存访问。这里的重点不是 RDMA 失效而是 AI 负载的访问粒度和协同复杂度在提高显式通信模型会不断把复杂度推给框架和运行时。三、统一地址空间的核心组件一个设备想访问另一个设备的内存最少要经过几类组件。组件作用请求端设备发起读写请求例如 GPU/NPU地址转换单元把虚拟地址或全局地址转换为目标设备可识别地址权限检查确认请求方是否允许访问目标内存路由/交换结构把请求送到目标设备或内存池目标内存HBM、DDR、CXL 内存、远端内存池完成/异常处理返回数据、确认写入或报告错误H3C 报告中的 UALink 地址转换图很适合看这条路径。交换机访问对端内存使用 GVAGuest Virtual Address地址发起访问。GVA 地址经本地 MMU 转为为网络物理地址NPANetWork PhysicalAddressNPA 地址在对端 MMU 转换为本地系统物理地址SPASystem Physical Address图源H3C《超节点技术白皮书》第 89 页图 67。从这张图可以抽出一个技术要点统一内存编址的关键不是“所有设备共用一个大数组”而是请求端、地址转换、互联协议和目标端都要接受同一套地址与权限模型。如果缺少这个模型所谓远端访问仍然会退化成显式拷贝。四、CXL 在这里承担什么角色CXL的重要性在于它把设备互联、内存扩展和一致性语义放进一个更标准化的框架里讨论。H3C 报告展示了 CXL 数据读取过程。CXL 的数据读取过程需进行多次 Snoop 报文红圈交互来确认数据一致性过程解读详见 CXL 章节图源H3C《超节点技术白皮书》第 90 页图 68。从技术分享角度CXL 至少可以拆成三个关注点关注点技术意义设备枚举和配置复用 PCIe 生态让设备可以被系统识别和管理内存访问语义让主机和设备之间形成更清晰的内存访问关系Fabric/池化让内存资源从单机附属设备走向可组合资源H3C 报告中的CXL 资源池化图说明 CXL 不只是单设备连接而是面向资源池化。下图是使用 CXL 技术实现的计算资源池化图源H3C《超节点技术白皮书》第 102 页图 73。在超节点语境下CXL 的价值不一定是替代 GPU 间 Scale-Up 互联而是补齐内存层级本地 HBM 承载最热数据。本地 DDR 承载较大容量数据。CXL 内存承载可扩展和可池化内存。远端内存池承载更大范围资源调配。这对推理尤其重要因为KV Cache会持续挤压 HBM 容量。五、Fabric 化之后内存变成资源池单个 CXL 设备解决的是扩展问题CXL Fabric 解决的是组织问题。当多个 Host 和 Device 通过 CXL Switch 组成 Fabric 时整个 Fabric 的管理需要一个专属的管理组件 FMFabric Manager进行管理。如上图Fabric 由一个或多个互联的 CXL Switch 组成。Switch 端口可连接至 CXL 主机Host端口或 CXL 设备Dev。Fabric 管理器FM在 CXL 网络Fabric中不可或缺但角色可以被其他具备类似管理功能的组件替代。FM 可通过带外对 Switch 网络进行管理。FM 组件也被其他 Scale up 协议借鉴如 UB 的 UBFM。FM 的主要功能负责 fabric 初始化、组件发现构建拓扑视图完成链路与参数协商。管控端口绑定、路由配置协调带宽与内存资源支撑全局地址映射。监控 fabric 内组件与链路状态处理异常事件包括热插拔保障传输可靠性。提供安全管控与标准化 API实现多组件协同。图源H3C《超节点技术白皮书》第 108 页图 79。Fabric 化以后系统要处理的不是“这台机器插了多少内存”而是哪些计算节点能访问哪些内存池访问路径经过几跳访问延迟是否可预测是否支持动态分配和回收是否支持租户隔离是否能在故障后重新映射这和云计算里的资源池化很像但难度更高因为内存访问比存储访问更敏感。带宽、延迟、NUMA 距离、缓存一致性、故障恢复都会直接影响训练或推理性能。六、操作系统和运行时必须参与统一内存编址不能只靠硬件宣称支持。H3C 报告中提到 Linux 内核对 CXL 的支持说明这类能力最终必须进入 OS、驱动和资源管理层。图源H3C《超节点技术白皮书》第 257 页图 168。从系统软件看至少有四类工作要做层级需要处理的内容内核/驱动设备发现、地址映射、错误处理、热插拔、NUMA 暴露运行时内存分配策略、冷热数据迁移、缓存管理调度器根据拓扑和内存位置放置任务框架感知远端内存代价避免把热路径放到慢内存如果只有底层硬件能力而上层框架不可见统一内存就很难产生实际收益。比如一个推理任务的 KV Cache 被放到远端内存但调度器不知道访问路径Decode 阶段可能每步都走慢路径首 token 延迟和吞吐都会受影响。七、统一内存能力的指标化技术分享里不能只说“支持统一内存”还要问它怎么度量。指标为什么重要本地 HBM 带宽和时延热数据访问上限同域远端访问时延判断 HBD 内远端访问是否可用跨域远端访问时延判断是否适合放冷数据地址翻译开销影响细粒度访问性能映射更新耗时影响动态迁移和资源回收一致性开销影响共享数据访问模型错误恢复时间影响长任务稳定性多租户隔离能力影响云化和资源池化落地这类指标比“支持 CXL”或“支持统一地址”更有工程价值。八、工程判断清单如果要评估一个超节点统一内存方案可以按下面的问题追问。判断项关键问题地址模型是全局地址、虚拟地址映射还是只做远端 DMA访问语义支持消息语义、内存语义还是完整 Load/Store地址转换MMU/IOMMU 在哪里映射缓存如何失效一致性范围是否需要缓存一致性一致性边界多大软件暴露Linux、驱动、运行时、调度器是否可见分层策略HBM、DDR、CXL、远端内存如何分层故障模型链路、内存池、映射异常后如何恢复性能基线是否有本地、同域、跨域访问时延和带宽数据这也是区别“技术概念”和“工程能力”的地方。只要不能回答地址模型、访问语义、软件暴露和性能基线统一内存编址就还停留在宣传层。九、总结超节点里的统一内存编址本质上是把 AI 基础设施从“显式通信系统”推进到“可寻址资源系统”。RDMA让跨节点通信更快DMA是设备搬运数据的基础机制Load/Store则代表更紧耦合设备协同下的访问语义。它们不是简单替代关系而是叠在不同层次上。真正可用的统一内存能力需要硬件、协议、OS、驱动、运行时和调度器共同完成硬件负责链路、地址转换和访问路径。协议负责语义、路由和一致性边界。OS 和驱动负责资源发现、映射和错误处理。运行时和调度器负责冷热数据放置和任务拓扑映射。下一篇我们从训练侧看大模型并行通信重点不是解释 DP/TP/PP/EP/CP 是什么而是拆它们在网络里对应什么通信原语和拓扑约束。核心术语表术语含义DMA设备直接搬运内存数据的机制适合大块显式数据传输。RDMA跨节点直接读写远端内存的机制减少 CPU 参与和拷贝。Load/Store更接近普通内存读写的访问语义需要地址转换、权限和一致性支持。MMU负责地址转换和访问权限控制的硬件单元。CXL面向设备、内存扩展和资源池化的互联协议体系。CXL Fabric将多个主机、设备和内存资源组织为可组合资源池的互联结构。IOMMU面向设备 IO 的内存管理和地址转换机制用于隔离和安全访问。