RDMA传输服务类型:RC/UC/UD/XRC深度对比
2026/7/24 6:57:22 网站建设 项目流程

摘要:在AI万卡集群与高性能计算中,RDMA传输服务的选择直接决定网络性能与资源利用率。本文深度剖析RDMA的四大传输服务类型:RC、UC、UD与XRC。我们将从可靠性与连接模式两大维度出发,对比它们的核心特性、资源消耗及适用场景。重点揭秘XRC如何通过“节点级共享连接+硬件分流”打破大规模集群的QP资源瓶颈,并附带NCCL场景下的实战配置指南,助你轻松搞定RDMA网络选型!

大家好!我是你们的老朋友,专注RDMA智能网卡技术的博主 🚀。

最近很多同学在后台问我:“跑万卡AI大模型训练时,NCCL老是报QP资源耗尽的错误,到底该怎么优化?”
其实,这个问题的根源往往在于RDMA传输服务类型没选对!
今天,我们就来扒一扒RDMA传输层那些事儿,把RC、UC、UD以及“救星”XRC扒个底朝天。干货满满,建议先收藏再看哦!💡

一、RDMA传输的两大“灵魂维度”

在InfiniBand/RoCEv2体系中,传输层的设计非常巧妙。它通过两个核心维度来定义一种传输服务:

  • 维度一:可靠性(可靠 vs 不可靠)
  • 维度二:连接模式(面向连接 vs 数据报)

把这两个维度交叉组合,就得到了我们熟悉的RC(可靠连接)UC(不可靠连接)UD(不可靠数据报)。至于“可靠数据报(RD)”,理论上存在,但现实中并没有这种产品,大家可以直接忽略 🙅‍♂️。

二、RC / UC / UD 深度大比拼

我们先来看看这三位“老熟人”的底细。

🔥 1. RC(Reliable Connected):全能但“娇贵”的TCP亲戚
RC 是最常用的类型,点对点绑定,保证按序交付,支持所有RDMA原语(Send/Recv、Read/Write、Atomic)。
痛点:QP资源消耗极大!假设 N 个节点,每个节点 M 个进程全网互联,RC 需要的 QP 数量是N × M × M。在千卡集群里,这会让网卡的 ICM 内存瞬间爆炸 💥。

⚡ 2. UC(Unreliable Connected):妥协的中间派
UC 也是点对点,但不保证可靠性(没有ACK重传机制)。
它支持 Send/Recv 和 RDMA Write,但不支持 RDMA Read 和 Atomic
场景:对延迟极度敏感且能容忍少量丢包的特殊场景,日常开发中用得比较少。

🌪️ 3. UD(Unreliable Datagram):轻量级的UDP翻版
UD 不建立连接,一个 QP 可以向任意多个 UD QP 发送数据,支持多播/广播
优势:QP 数量只需M个,资源占用极小!
劣势:只支持 Send/Recv,单次消息最大通常只有 4KB,不支持单边内存读写。

📊 核心特性对比表

特性RC (可靠连接)UC (不可靠连接)UD (不可靠数据报)
连接模式点对点点对点一对多 (数据报)
可靠性可靠,按序交付不可靠不可靠
RDMA Read✅ 支持❌ 不支持❌ 不支持
Atomic 原子操作✅ 支持❌ 不支持❌ 不支持
QP资源消耗极大 (O(N*M²))大 (O(N*M²))极小 (O(M))

三、破局者 XRC,大规模集群的“救星”

既然 RC 功能最全但太耗资源,UD 省资源但不支持 Read/Write,有没有两全其美的办法?
答案就是XRC(eXtended Reliable Connected,扩展可靠连接)!🌟

💡 XRC 是如何“变魔术”的?
XRC 把传统的 QP 拆成了两段,并引入了XRCD(XRC Domain)来管控权限:

  1. INI QP(发起端):只有发送队列(SQ)。一个 INI QP 面向远端整台服务器建立一条可靠连接。
  2. TGT QP(目标端):部署在接收端,接收所有流量,并根据报文附带的SRQ(共享接收队列)编号,由网卡硬件自动分流到本机不同进程的独立 SRQ 中。

🚀 XRC 的核心优势

  • QP数量断崖式下降:同等 N 节点 M 进程场景,QP 数量从 N×M² 降到N×M,直接缩小 M 倍!彻底解决网卡硬件资源天花板。
  • 完美继承 RC 能力:底层依然是可靠连接,支持 Read/Write/Atomic,保序重传全都有。
  • 硬件分流零CPU开销:TGT QP 收到包后,RNIC 硬件直接根据 SRQ 编号分发,不占 CPU。

⚠️ 避坑指南

  • 通信不对称:A 发给 B 需要 A 建 INI QP,B 反向发给 A 还得 B 自己建 INI QP。
  • 调试门槛高:多了 XRCD 域和 SRQ 编号,排错需要更深厚的功底。
  • 网卡要求:CX5 及更早固件对 XRC 优化一般,推荐CX6/CX7/CX8系列!

四、实战案例:AI集群 NCCL 中的 XRC 配置

在 AI 分布式训练(如 NCCL AllReduce)中,通常面临全网状(Full Mesh)通信。我们来看看如何用代码玩转 XRC。

1. 创建 XRC INI QP 示例

// 创建 XRC INI QP 示例structibv_qp_init_attr_exinit_attr={.qp_type=IBV_QPT_XRC_SEND,// 发起端.comp_mask=IBV_QP_INIT_ATTR_PD|IBV_QP_INIT_ATTR_XRCD,.pd=pd,.xrcd=xrcd,// 绑定 XRC Domain.cap={.max_send_wr=1024,.max_send_sge=1,}};structibv_qp*ini_qp=ibv_create_qp_ex(ctx,&init_attr);

2. 网卡端开启自适应路由(AR)优化 XRC 性能
在大规模 RoCEv2 网络中,结合自适应路由能让 XRC 如虎添翼,解决多路径下的乱序重传问题:

# 开启自适应路由,优化多路径下的乱序重传mlxreg-d/dev/mst/mt4123_pciconf0--reg_nameROCE_ACCL\--setadaptive_routing_forced_en=1

五、总结与互动

好啦,今天的 RDMA 传输服务大揭秘就到这里!我们来简单总结一下选型口诀:

  • 点对点、小规模、要全能👉 选RC
  • 大规模、多进程、全网状👉 选XRC(AI集群首选!)
  • 组播广播、轻量级控制面👉 选UD

大家在平时的 RDMA 开发或集群运维中,遇到过哪些坑呢?或者对 XRC 的 SRQ 分流还有什么疑问?欢迎在评论区留言,我们一起探讨交流!👇
别忘了点赞、关注,下期我们继续硬核拆解 RDMA 内存注册(MR)的那些事儿!我们下期见~ 👋

推荐标签
#RDMA #智能网卡 #XRC #AI集群 #RoCEv2 #InfiniBand #高性能计算 #NCCL


本文为RDMA智能网卡技术知识系列文章。首发于CSDN,转载请注明出处。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询