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以下。
构建无损网络需要三个要素:
- 端到端的流控:PFC在链路层做流控,ECN在IP层做拥塞通知。
- 合理的缓冲区规划:交换机每个端口的缓冲区要按优先级分配好。
- 流量整形:避免突发流量冲垮缓冲区。
小技巧:测试无损网络是否达标,可以用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协议栈的层次关系:
从这张图你能看出来,RoCE的“融合”体现在哪:传输层是IBTA的,链路层和物理层是以太网的。网络层则是个“混血”——RoCE v1直接映射到以太网类型,RoCE v2则用UDP端口4791。我个人更推荐RoCE v2,因为它能跨三层路由,部署更灵活。
核心要点:RoCE v2的UDP封装,让RDMA流量可以像普通UDP流量一样被路由、被ACL过滤、被监控。这是RoCE能大规模部署的关键。
好了,这一章的内容就这些。核心组件搞清楚了,后面咱们才能聊怎么排查丢包问题。记住:RDMA网卡是基础,PFC交换机是保障,无损网络是目标,协议栈是桥梁。四者缺一不可。