
一台服务器要把数据交给另一台服务器网线够快就行了吗在高速网络里CPU 处理协议、数据在缓冲区之间复制、线程等待调度也可能成为开销。AI 训练、分布式存储和高性能计算经常需要反复交换大量数据因此既在意网络带宽也在意“每搬一次数据要付出多少代价”。RDMARemote Direct Memory Access远程直接内存访问让支持 RDMA 的网卡在预先建立的权限和通信关系下把数据直接放入对端指定的内存缓冲区或从中读出数据从而减少主机软件参与数据搬运的开销。这里的“直接”有严格边界目标内存需要获得授权网络传输与内存访问仍真实发生。定义与内存保护语义IETF RFC 50401. 先看数据路径RDMA 到底省了什么把服务器想成一座仓库应用缓冲区是货架CPU 是工作人员网卡是装卸设备。常见的 Socket 通信路径里应用把数据交给内核内核处理网络协议再由网卡发出接收端完成相应处理后应用取得数据。这里可能发生用户态与内核态之间的缓冲区复制以及协议处理、调度等开销。RDMA 则更像是提前安排好货架位置和通行权限让装卸设备按照任务单搬运。应用提交操作后网卡承担更多传输与数据放置工作。图 1比较的是常见软件路径和已准备好资源的 RDMA 数据路径不是对所有 TCP 实现的性能判断。普通网卡也会使用 DMARDMA 增加了远端操作、权限检查和直接数据放置等能力。人们常用三个词描述 RDMA 的优势减少拷贝数据可以直接进入注册缓冲区减少中间缓冲区的 CPU 复制。内核旁路在常见用户态 RDMA 实现中稳定运行的数据路径可以绕过传统内核网络协议栈。硬件卸载网卡处理较多传输协议工作使主机 CPU 有机会把资源用于业务计算。这些收益来自一整套软硬件协作。内存注册、资源管理和异常处理仍可能涉及内核提交任务、轮询完成队列、序列化数据和运行应用仍然需要计算资源。零拷贝也不等于零数据移动轮询还可能持续占用 CPU。TCP 同样存在零拷贝和卸载优化比较时要明确具体实现。RDMA 数据路径背景DCQCN 论文2. “直接访问远程内存”为什么不会乱写RDMA 不会因为两台机器网络互通就允许其中一台随意读写另一台的内存。以常见 verbs 接口为例接收方先把一段内存注册成MRMemory Region内存区域声明范围和读写权限。通信双方还要建立相应的通信资源并以受控方式交换操作所需的信息。对远端 ReadWrite发起方通常需要知道远端地址和rkey远端访问键。网卡结合地址范围、访问键和权限检查操作能否执行。注册还会建立设备访问内存所需的映射常见路径涉及固定内存页也存在按需分页等机制。可以把它理解为“允许指定的通信对象在规定的时间和范围里使用这些货架。”授权方可以回收或重新设置相关资源。rkey 是访问检查的一部分不是数据加密也不能单独替代身份认证、租户隔离和安全的密钥交换。应用还必须管理缓冲区的有效期防止一边重新使用内存另一边仍在访问旧地址。内存注册与访问权限rdma-coreibv_reg_mr3. 一次 RDMA 操作是怎样完成的阅读 RDMA 文档时先认清四个常见缩写名称含义可以怎样理解RNIC支持 RDMA 的网卡执行搬运的设备InfiniBand 中也常称 HCAQPQueue Pair队列对提交操作的队列资源包括发送队列和接收队列WRWork Request工作请求描述操作类型、缓冲区等信息的任务单CQCompletion Queue完成队列应用取得所请求的完成状态或错误信息的地方下面用一次普通RDMA Write串起来图 2省略了协议确认、连接状态转换等细节。普通 Write 不需要远端应用为每一笔写操作投递 Receive。双方先准备资源A 再把“从哪里取、写到哪里、写多少”的请求提交给网卡。随后由两端网卡完成数据传输和放置A 根据完成信息管理后续工作。队列、工作请求与完成队列NVIDIA RDMA 编程指南有一个区别必须记住本地操作完成不等于远端业务已经处理完数据。普通 Write 本身通常不会让远端应用收到一个“请处理这笔业务”的接收完成事件。通知方式、可见性和并发同步需要由应用或通信库另外设计也不是每个成功的发送请求都必须产生独立完成事件。请求类型与完成语义rdma-coreibv_post_send4. Send、Write、Read差别在哪里名字都像“传数据”但两端应用的分工不同。图 3Read 的请求从 A 发向 B读回的数据从 B 流向 A图中的内存都已获得相应授权。操作做什么远端应用要怎样配合Send / ReceiveA 发送消息网卡放进 B 预先提供的接收缓冲区B 需要预先投递接收请求并处理接收完成RDMA WriteA 把本地数据写到 B 的指定内存位置B 事先授权内存普通 Write 无需逐笔运行接收处理程序RDMA ReadA 发出读请求把 B 指定位置的数据读回 AB 事先允许远端读取网卡响应读取SendReceive 常被称为双边操作ReadWrite 常被称为单边操作。这里的“单边”描述的是操作发起和远端 CPU 参与方式并不表示另一端没有做过准备。还有原子操作以及 Write with Immediate 等变体。后者带有额外通知语义不能直接套用“普通 Write 无需接收请求”的说法。可用操作也取决于传输模式常见 RC 支持 ReadWrite而 UD 不能简单按 RC 使用。操作与模式支持NVIDIA RDMA 编程指南例如一个缓存服务可以通过 SendReceive 收到“查询某个键”的请求再由 CPU 查询也可以设计成客户端通过 Read 读取事先公开的数据结构。后一种方式减少了某些服务端处理但把地址管理、版本和一致性问题带给了系统设计者。5. RDMA、InfiniBand、RoCE、iWARP 是什么关系RDMA 是一种通信能力和操作语义下面可以使用不同的网络技术。理解这一层关系才能避免把“支持 RDMA”误解成“必须使用某一种交换机”。图 4用于解释承载关系省略部分报头、校验和物理层细节iWARP 列展示常见的 TCP 承载。技术使用的网络入门时要抓住的区别InfiniBandInfiniBand 网络网络体系本身包含 RDMA 相关传输、链路流控与管理机制RoCEv1以太网二层直接在以太网上承载受二层网络边界约束RoCEv2以太网 IP UDP可经过 IP 路由适用于构建三层数据中心网络iWARP通常为以太网 TCP/IP在 TCP 之上承载相关 RDMA 协议说明 RDMA 与 TCP 并非绝对互斥RoCEv2 中的 UDP 主要提供封装与网络识别功能。使用可靠连接 RC 时确认、顺序和重传等可靠性由 RDMA 传输机制提供不能看到 UDP 就断定应用必须接受不可靠交付。RoCE 封装NVIDIA 文档 · iWARP 的 TCP 承载IETF RFC 5044能够路由也不代表跨任意广域网都能获得数据中心内相同的性能。往返时延、拥塞、丢包、设备能力和配置仍然影响结果。6. 为什么 RoCE 总是与“无损网络”一起出现多台服务器同时向一台服务器发送数据很容易出现“入口总速率超过出口速率”。包会先进入交换机缓冲区缓冲区装满后就可能被丢弃。许多经典 RoCE 实现对丢包很敏感丢包后的恢复会明显影响吞吐与尾延迟。因此传统部署常通过PFCPriority-based Flow Control基于优先级的流量控制尽量避免某些流量因缓冲区溢出而丢包。PFC 的动作是下游向相邻上游发出暂停要求让其暂时停止发送某个优先级的流量给缓冲区留出空间。需要区分三个概念可靠传输传输层发现丢包后通过确认与重传等机制恢复。减少拥塞丢包网络通过缓冲管理和流量控制降低溢出丢包的机会。绝对不丢包现实中还会有链路误码、设备故障等原因PFC 无法消除所有丢包。所以“可靠”不等于“不需要重传”“无损配置”也不意味着所有故障都会消失。微软 2016 年的部署论文就记录了启用 PFC 后仍需处理的丢包与恢复问题。SIGCOMM 2016 论文还应避免把历史经验写成永恒前提RDMA 本身并不普遍要求 PFC。不同承载协议、网卡与传输设计对网络的要求不同。IRN 等研究也专门探讨了如何通过改进丢包恢复等机制让 RDMA 在不依赖 PFC 的情况下有效运行。Revisiting Network Support for RDMASIGCOMM 20187. ECN 与 PFC为什么需要两套机制如果道路越来越拥挤更合理的办法是让源头逐渐减少进入的车辆。PFC 则像某一段道路快装不下时临时让相邻上游停一下。ECNExplicit Congestion Notification显式拥塞通知允许网络给数据包加上拥塞标记。在采用DCQCN的典型 RoCEv2 网络里接收网卡看到标记后向发送端发出CNPCongestion Notification Packet拥塞通知包发送端再依据算法调整速率。图 5ECN 标记随数据包到达接收端CNP 再反馈给发送端PFC 帧作用于相邻链路。如果拥塞继续反压可能逐跳向上游扩散并非同一张 PFC 帧被全网路由。对比项ECN DCQCNPFC主要目的根据拥塞反馈控制源端注入速率缓冲压力下暂停某优先级的上游发送作用范围端到端反馈与速率调整逐跳、按优先级控制典型动作标记 → CNP → 发送端调速PAUSE → 暂停 → 恢复主要局限反馈需要时间参数会影响响应与稳定性同一优先级的其他流也可能受影响反压可能扩散二者可以配合通过拥塞控制维持稳定发送把 PFC 用作缓冲保护。PFC 本身不承担端到端公平分配带宽的全部职责。DCQCN 原始论文工程上通常希望 ECN 在缓冲耗尽之前发挥作用但不能只写一句“把 ECN 阈值设置得更小”。具体调优还与链路速度、往返时延、共享缓冲、端口余量和突发规模有关不同计量位置的阈值也未必能直接比较。微软关于 ECN/PFC 阈值的技术说明8. SIGCOMM 2016 那篇论文给了我们什么提醒《RDMA over Commodity Ethernet at Scale》重点是把 RoCEv2 带入大规模数据中心之后如何让它长期稳定运行。论文记录了几类容易被小规模带宽测试遗漏的问题问题通俗解释PFC 死锁某些缓冲依赖形成环相互等待对方释放空间传输活锁协议反复重试但有效数据传输缺乏进展PFC 暂停风暴异常设备持续发送暂停影响经由它的流量及上游慢接收端影响扩散接收端处理不及时反压可能牵连其他流其中PFC 针对的是优先级并不会只暂停“真正导致问题的那一条业务流”。这也是故障可能扩大的原因之一。论文还强调监控、管理和逐步上线。对今天的读者更有用的是这些问题机制和排查思路文中网卡、速率、规模与故障细节属于当时的环境应和现网能力分开判断。论文原文9. AI 集群为什么关心 RDMA多 GPU 训练除了计算还要交换梯度、激活或其他张量。以 All-Reduce 为例各参与者对输入执行求和等归约并获得归约结果。这个过程由通信库组织可能产生大量跨服务器通信。NCCL 集合通信说明因此可以从三个层次理解RDMA提供数据传输与远端内存操作能力。GPUDirect RDMA在支持的硬件、驱动和拓扑下让网卡直接访问 GPU 显存减少主机内存中转。NCCL 等通信库组织 All-Reduce、All-Gather 等集合通信并选择可用的数据路径。图 6GPUDirect RDMA 缩短 GPU 与网卡之间的数据路径数据仍经过 PCIe、网卡和网络。主机侧的准备、控制和同步并不会因为画出了直连箭头就自动消失。GPUDirect RDMA 的收益受 PCIe 拓扑、设备与驱动支持等条件影响。它也不会自动完成 GPU 内存同步更不会把多台服务器的显存变成应用可任意访问、自动一致的共享内存。NVIDIA GPUDirect RDMA 文档把链路换成 RDMA 后如果 GPU 仍在等待慢节点、负载分配不均或拥塞训练也可能继续停顿。网络吞吐测试的提升最终要通过训练迭代时间或业务完成时间来确认。10. 判断 RDMA 有没有价值应看哪些指标先明确业务问题再评价网络技术。下面是一组便于入门的观察方向具体指标与测试方式需要结合系统设计。观察方向想回答的问题吞吐与有效带宽真正交付给应用的数据量增加了吗平均延迟与尾延迟大多数请求快了以后最慢的一批请求是否仍拖累业务CPU 使用量协议开销减少后是否又被忙轮询或其他处理占用了ECN、CNP、PFC 与丢包网络是在稳定调速还是频繁暂停或恢复重传、超时与错误拥塞或故障发生时连接能否恢复业务有何影响实际业务完成时间存储请求、训练迭代或计算任务最终是否更快还有一个很朴素的物理约束RDMA 不能突破链路带宽上限。假设要在一条 100 Gb/s 链路上单向传送 100 MB 数据MB 按十进制计算即使完全不考虑报头和其他开销串行化时间也至少约为100 MB × 8 ÷ 100 Gb/s 0.008 s 8 ms这是用于理解带宽下限的算例不是 RDMA 性能测试结果。真实耗时还包括协议、排队、软件、PCIe、内存访问等因素流水线和重叠执行又会改变它们的组合方式。RDMA 的价值在于减少额外成本让系统更有效地接近资源能力并为应用提供不同的通信方式。11. 常见疑问速查换一块 RDMA 网卡原来的应用就会自动变快吗不一定。应用、框架或存储协议需要实际使用 RDMA 路径硬件支持只是条件之一。现有 Socket 应用不会仅因安装了新网卡就自动获得单边 ReadWrite 语义。RDMA 是否完全不经过 CPU网卡可以承担大量数据搬运和协议工作但 CPU 或其他处理器仍负责资源准备、操作控制、完成处理及业务计算具体参与程度取决于实现。普通 RDMA Write 完成是否代表数据已经保存到磁盘不是。网络与内存操作完成不等于持久化持久性需要存储协议和设备进一步保证。有了 PFC是否就没有拥塞了没有。暂停可以推迟缓冲区溢出也可能把等待传播出去过量流量仍需要拥塞控制、容量规划等措施处理。RoCEv2 使用 UDP为什么可以可靠传输UDP 是封装的一部分常见 RC 模式的可靠性交给 RDMA 传输机制实现。其他模式不能一概按 RC 理解。RDMA 能代替分布式算法和业务协议吗不能。数据放到了哪里、何时可以使用、是否读到同一版本、故障后如何恢复仍需要系统设计。延伸阅读建议先理解图 1、图 3 和图 5再读网络论文。NVIDIA RDMA-aware Networks Programming Guide查阅 QP、CQ、通信操作与传输模式。rdma-coreibv_reg_mr与ibv_post_send了解实际接口中的内存权限与工作请求。Congestion Control for Large-Scale RDMA DeploymentsSIGCOMM 2015理解 DCQCN、ECN 与 PFC 的关系。RDMA over Commodity Ethernet at ScaleSIGCOMM 2016了解规模化部署的故障机制与运维经验。Revisiting Network Support for RDMASIGCOMM 2018理解“RDMA 是否必须依赖 PFC”这一问题。NVIDIA GPUDirect RDMA 与 NCCL 集合通信连接 RDMA 与 GPU 通信场景。