一、RoCE技术概览:RDMA与RoCE基础概念

聊RoCE之前,咱们得先搞清楚RDMA是什么。RDMA,全称是Remote Direct Memory Access,翻译过来就是「远程直接内存访问」。说白了,它允许一台机器的应用程序直接读写另一台机器的内存,而不需要经过CPU、操作系统协议栈这些中间环节。

我刚开始接触这个概念时,也觉得有点抽象。后来在数据中心做存储集群调优,才真正体会到它的价值。传统网络通信,数据要从应用层一路往下走,经过内核、驱动、网卡,再到对端,再一层层往上送。这个过程中CPU被频繁打断,内存也要多次拷贝。RDMA直接把这条路给「抄近道」了——数据从应用内存直达网卡,再到对端应用内存,中间几乎不消耗CPU。

RDMA的核心优势:

  • 零拷贝:数据直接在用户空间和应用内存之间传输
  • 内核旁路:不经过操作系统协议栈
  • CPU卸载:网络处理几乎不占用CPU资源
  • 高吞吐、低延迟:微秒级延迟,40Gbps以上带宽

那RoCE又是什么?RoCE是RDMA over Converged Ethernet的缩写,就是把RDMA跑在以太网上。你想想看,传统RDMA需要InfiniBand这种专用网络,成本高、生态封闭。而RoCE让RDMA能跑在大家熟悉的以太网上,成本大幅降低。

我个人习惯把RoCE看作是「平民版的InfiniBand」。虽然性能上略逊一筹,但胜在兼容性好、部署灵活。我在项目中遇到过不少客户,一听InfiniBand的价格就摇头,但换成RoCE方案后,预算就松动了。

二、RoCE v1与v2协议栈对比

RoCE有两个版本:v1和v2。它们之间的区别,说白了就是「二层」和「三层」的区别。

RoCE v1:二层协议

RoCE v1工作在以太网链路层,它直接把RDMA数据封装在以太网帧里。这意味着它只能在同一个二层网络(广播域)内通信,不能跨VLAN,也不能路由。

嗯,这里要注意:RoCE v1的报文格式很简单,以太网头后面直接跟IB(InfiniBand)的GRH(Global Routing Header)。没有IP头,没有UDP头。

RoCE v1的局限性:

  • 不能跨子网通信
  • 不支持路由
  • 依赖PFC(优先级流控)保证无损
  • 部署灵活性差

我曾经在一个金融客户的数据中心里见过RoCE v1的部署。他们为了把两个机柜的服务器连起来,不得不拉了一根单独的网线,就为了绕开三层交换机。说实话,这种部署方式太折腾了。

RoCE v2:三层协议

RoCE v2解决了v1的痛点。它把RDMA数据封装在UDP/IP包里,这样就能跨三层网络通信了。你想想看,有了IP路由,RoCE就能跑在整个数据中心甚至跨数据中心了。

RoCE v2的报文格式是:以太网头 + IP头 + UDP头 + IB BTH(Base Transport Header)+ 数据。UDP的目的端口是4791,这个端口号我建议你记住,排查问题时经常用到。

对比项 RoCE v1 RoCE v2
网络层 二层(以太网) 三层(IP/UDP)
路由能力 不支持 支持
封装格式 Eth + GRH + IB Eth + IP + UDP + IB
UDP端口 4791
部署范围 单个广播域 跨子网、跨数据中心
兼容性 较差 较好

我个人更推荐RoCE v2。虽然v2的报文头开销大了一些,但换来的是部署的灵活性。现在主流的数据中心方案,基本都是基于RoCE v2的。

三、RoCE的硬件与生态支持

RoCE不是软件就能搞定的,它需要硬件支持。核心硬件就是支持RoCE的网卡,也叫RNIC(RoCE Network Interface Card)。

主流硬件厂商

  • Mellanox(现已被NVIDIA收购):市场占有率最高,ConnectX系列是标杆产品。我个人用过ConnectX-5和ConnectX-6,稳定性确实不错。
  • Broadcom:NetXtreme系列,性价比不错,在一些白牌交换机方案中常见。
  • Intel:XL710系列,但RoCE支持相对较弱,更多用于传统网络。
  • Chelsio:Terminator系列,在特定场景下有优势。

选型建议:如果你刚开始接触RoCE,我建议从Mellanox ConnectX-5起步。驱动成熟、文档齐全、社区活跃,踩坑了也容易找到人问。我曾经在选型时贪便宜买了某小众品牌,结果驱动bug一堆,折腾了两周才跑通。

交换机支持

RoCE对交换机也有要求。因为RDMA要求无损网络,所以交换机必须支持PFC(Priority Flow Control,优先级流控)和ECN(Explicit Congestion Notification,显式拥塞通知)。

主流交换机厂商如Cisco、Arista、Juniper、华为、H3C都支持这些特性。但要注意,不是所有型号都支持,低端接入交换机往往没有这些功能。

软件生态

  • 驱动:Mellanox的mlx5驱动是事实标准,Linux内核主线已支持
  • 协议栈:libibverbs、librdmacm是用户态API
  • 应用:NVMe over Fabrics、Spark、TensorFlow、Ceph等都已支持RDMA
  • 管理工具:ibstat、ibv_devinfo、perftest等

我记得有一次帮客户排查性能问题,用ibstat一看,端口速率只有预期的一半。后来发现是网卡固件版本太旧,升级后就好了。所以,我建议你定期检查固件版本,别忽视这个细节。

四、RoCE技术全景图

下面这张图是我整理的RoCE技术全景,涵盖了从底层硬件到上层应用的完整生态。你可以把它当作一个知识地图,后续学习时随时回来对照。

RoCE 技术全景图 应用层 NVMe-oF · Spark · TensorFlow · Ceph · MySQL · NFS over RDMA 数据库加速 · 分布式存储 · AI训练 · 高性能计算 · 实时分析 中间件与API层 libibverbs · librdmacm · OpenMPI · UCX · DPDK 用户态API · 内核态接口 · 消息传递接口 · 零拷贝框架 协议层 RoCE v1(二层) Eth + GRH + IB BTH + Payload 同一广播域 · 不支持路由 · 依赖PFC RoCE v2(三层) Eth + IP + UDP(4791) + IB BTH + Payload 跨子网 · 支持路由 · UDP封装 · 主流方案 硬件层 RNIC网卡 Mellanox · Broadcom · Intel 交换机 PFC · ECN · DCB · 无损网络 线缆与光模块 DAC · AOC · 光模块 · 25/100/400G 业务场景 编程接口 网络协议 物理设备 RoCE v2 是目前数据中心的主流选择,v1已逐渐被淘汰

从这张图可以看得很清楚:RoCE v2是当前的主流选择,v1基本已经被淘汰了。如果你现在要新建一个数据中心网络,直接上RoCE v2就好,别走弯路。

本章小结:

  • RDMA让数据绕过CPU直接传输,延迟低、吞吐高
  • RoCE把RDMA带到以太网上,成本更低、部署更灵活
  • RoCE v1是二层协议,不能路由;RoCE v2是三层协议,支持跨子网
  • 硬件选型推荐Mellanox ConnectX系列,交换机需支持PFC/ECN
  • 软件生态成熟,主流应用都已支持RDMA

个人建议:如果你是第一次部署RoCE,先别急着上生产。找两台服务器、一台支持PFC的交换机,搭个最小测试环境跑一遍。我每次做新方案都是这么干的,先验证再推广,能省不少麻烦。


公众号:蓝海资料掘金营,微信deep3321