2、RoCE网络核心组件:RDMA网卡、支持PFC的交换机、无损网络的概念、RoCE协议栈

好,咱们今天聊聊RoCE网络的核心组件。说实话,很多人一上来就扎进配置细节,结果丢包了都不知道从哪查起。我个人习惯是,先把这几个核心组件搞明白——RDMA网卡、支持PFC的交换机、无损网络的概念,还有那个看起来有点绕的RoCE协议栈。这些东西搞清楚了,后面排查问题才能有的放矢。

2.1 RDMA网卡(NIC)—— 不只是“网卡”那么简单

RDMA网卡,说白了就是一块能“绕过CPU”直接读写远端内存的网卡。你想想看,传统网络发个数据,CPU得参与中断、拷贝、上下文切换,那延迟能低吗?RDMA网卡不一样,它自己就能完成数据传输,CPU基本不用管。

我在项目中遇到过一种情况:业务方抱怨存储集群性能上不去,我一看,他们用的还是普通网卡跑RoCE。嗯,这肯定不行。RDMA网卡必须支持硬件卸载,比如DDP(直接数据放置)、拥塞控制、还有PFC的配合。没有这些,RoCE就是空中楼阁。

关键点:RDMA网卡必须支持RoCE v2(基于UDP封装),并且要开启硬件卸载功能。否则,你跑的就是“软RoCE”,性能大打折扣。

选型时我建议关注这几个参数:

  • 带宽:25Gbps起步,100Gbps常见,400Gbps也在普及了。
  • 队列数:QP(队列对)数量越多,并发能力越强。
  • 拥塞控制算法:比如DCQCN,这个后面会细讲。

2.2 支持PFC的交换机—— 流量不丢的“交通警察”

RoCE网络最怕什么?丢包。一丢包,重传延迟直接飙升。那怎么保证不丢包?靠的就是PFC(优先级流控制)。

PFC是什么?说白了就是交换机上的“交通警察”。它会给不同优先级的数据流分配不同的缓冲区。当某个优先级的缓冲区快满了,交换机会通知上游设备:“嘿,你先别发这个优先级的数据了,等我消化一下。”这样就能避免丢包。

我曾经踩过一个坑:某次部署RoCE网络,交换机PFC配置没调好,结果一个优先级的数据流把缓冲区全占了,其他优先级的数据直接饿死。那叫一个惨。后来我学乖了,PFC的阈值、缓冲区大小、还有死锁预防,都得仔细调。

警告:PFC不是万能的。配置不当会导致PFC风暴(PFC死锁),整个网络都可能瘫痪。建议开启PFC Watchdog和死锁检测。

支持PFC的交换机,通常需要具备以下能力:

  • 支持IEEE 802.1Qbb(PFC标准)。
  • 支持8个优先级队列(至少4个用于RoCE)。
  • 支持ECN(显式拥塞通知),配合DCQCN使用。

2.3 无损网络的概念—— 理想很丰满,现实很骨感

无损网络,听起来很美对吧?数据在网络上传输,一个包都不丢。但现实是,物理链路本身就有误码率,交换机缓冲区也会满。所以无损网络其实是个“尽力而为”的目标,靠的是PFC、ECN、流量整形这些技术来逼近。

我个人的理解是:无损网络不是“绝对不丢包”,而是“在正常负载下不丢包”。一旦流量突发超过设计容量,该丢还是得丢。所以我们要做的是:让丢包概率降到极低,比如10^-12以下。

构建无损网络需要三个要素:

  1. 端到端的流控:PFC在链路层做流控,ECN在IP层做拥塞通知。
  2. 合理的缓冲区规划:交换机每个端口的缓冲区要按优先级分配好。
  3. 流量整形:避免突发流量冲垮缓冲区。

小技巧:测试无损网络是否达标,可以用iperf3或ib_write_bw打满带宽,然后看有没有PFC暂停帧。如果暂停帧太多,说明缓冲区不够或PFC阈值没调好。

2.4 RoCE协议栈—— IBTA与以太网的“混血儿”

RoCE协议栈,说白了就是InfiniBand的传输层跑在以太网的物理层上。IBTA(InfiniBand贸易协会)定义了RDMA的传输语义,而以太网提供了廉价的物理层和链路层。RoCE v1直接跑在以太网帧上,RoCE v2则跑在UDP/IP上,这样就能跨三层路由了。

我刚开始学RoCE时,总觉得这协议栈有点“四不像”。后来在项目中调优,才真正理解它的设计哲学:既要RDMA的低延迟,又要以太网的普及性。嗯,这其实是个很聪明的折中。

RoCE协议栈的层次结构:

  • 应用层:比如NVMe-oF、Spark、TensorFlow,直接调用RDMA verbs API。
  • 传输层:IBTA定义的RC(可靠连接)、UC(不可靠连接)、UD(不可靠数据报)。
  • 网络层:RoCE v2用UDP/IP,RoCE v1用以太网类型字段。
  • 链路层:以太网帧 + PFC + ECN。

下面这张图是我自己画的,帮你理清RoCE协议栈的层次关系:

应用层 (NVMe-oF, Spark, TensorFlow) 传输层 (RC, UC, UD - IBTA定义) 网络层 (RoCE v2: UDP/IP, RoCE v1: 以太网类型) 链路层 (以太网帧 + PFC + ECN) 物理层 (25G/100G/400G 以太网) IBTA定义 以太网/IP 无损网络核心

从这张图你能看出来,RoCE的“融合”体现在哪:传输层是IBTA的,链路层和物理层是以太网的。网络层则是个“混血”——RoCE v1直接映射到以太网类型,RoCE v2则用UDP端口4791。我个人更推荐RoCE v2,因为它能跨三层路由,部署更灵活。

核心要点:RoCE v2的UDP封装,让RDMA流量可以像普通UDP流量一样被路由、被ACL过滤、被监控。这是RoCE能大规模部署的关键。

好了,这一章的内容就这些。核心组件搞清楚了,后面咱们才能聊怎么排查丢包问题。记住:RDMA网卡是基础,PFC交换机是保障,无损网络是目标,协议栈是桥梁。四者缺一不可。

专注资料整理