第二讲:物理网络基础——25G/100G以太网标准、PFC流控机制、ECN拥塞通知、DCB配置

各位同学,欢迎来到第二讲。上一讲我们聊了RoCE的整体架构,今天咱们把脚踩到地上,看看物理网络到底该怎么搭。

说实话,很多做RDMA的人翻车,不是翻在协议层,而是翻在物理网络配置上。我见过太多团队,软件调得飞起,结果网络丢一个包,性能直接腰斩。所以这一讲,咱们把25G/100G以太网、PFC、ECN、DCB这几个硬骨头啃下来。

核心观点:RoCE的性能天花板,90%由物理网络决定。PFC和ECN配不好,RDMA就是空中楼阁。

2.1 25G/100G以太网标准——为什么是它们?

先问一个问题:为什么RoCE普遍推荐25G和100G,而不是10G或40G?

我个人习惯从带宽和时延两个维度看。10G对于RDMA来说太窄了,尤其是NVMe over Fabric场景,10G根本喂不饱SSD的吞吐。40G呢?它用的是4条10G lane,物理层效率其实不高。25G是单lane 25Gbps,100G是4条25G lane,物理层非常干净。

说白了,25G和100G是当前性价比最高的RDMA承载网络。25G适合接入层,100G适合汇聚和核心层。

标准 速率 物理层 典型场景
25GBASE-R 25 Gbps 单lane,PAM4 服务器接入
100GBASE-R 100 Gbps 4×25G lane 汇聚/核心
200GBASE-R 200 Gbps 4×50G lane 超大规模

嗯,这里要注意:25G和100G的物理层编码都是RS-FEC(Reed-Solomon Forward Error Correction)。这个FEC不是可选项,而是强制性的。我在项目中遇到过有人把FEC关了,结果链路误码率飙升,RDMA连接频繁断开。所以,25G/100G端口一定要确认FEC开启

避坑指南:我曾经在某个数据中心发现,同一台交换机上混用了不同厂商的光模块,结果FEC协商失败,链路一直报CRC错误。后来统一换成同一品牌模块,问题解决。所以,光模块兼容性是个大坑,别忽视。

2.2 PFC流控机制——RoCE的“刹车片”

PFC,全称Priority Flow Control,优先级流控。你想想看,以太网本来是无损的吗?不是。传统以太网丢包是常态。但RDMA要求无损,怎么办?PFC就是答案。

PFC的工作原理很简单:它把网络流量分成8个优先级(802.1p),每个优先级独立做流控。当接收端缓冲区快满时,它会发一个PAUSE帧给发送端,说“兄弟,停一下,我消化不了”。发送端收到后,暂停发送该优先级的流量。

但这里有个问题:PFC是逐跳的。也就是说,它只在相邻的两个设备之间起作用。如果链路上有3台交换机,PFC会一级一级往回传,形成“背压”。

警告:PFC配置不当会导致“PFC死锁”。我曾经在一个集群里,因为PFC阈值设得太低,导致PAUSE帧满天飞,最终整个网络的RoCE流量全部卡死。恢复方法是重启交换机端口,但业务已经中断了10分钟。所以,PFC阈值一定要根据实际流量模型来调。

配置PFC时,我建议遵循以下原则:

  • 只对RoCE流量所在的优先级开启PFC(通常是优先级3或4)
  • 其他优先级(如管理流量)不要开PFC,避免影响范围扩大
  • PFC的XOFF阈值(触发PAUSE的水位)设置为缓冲区大小的70%左右
  • XON阈值(恢复发送的水位)设置为30%左右

2.3 ECN拥塞通知——更优雅的拥塞控制

PFC虽然能防止丢包,但它太粗暴了。你想想看,一旦PFC生效,整个优先级队列都停了,这会导致“队头阻塞”。ECN(Explicit Congestion Notification)就是来解决这个问题的。

ECN的工作方式更优雅:交换机检测到队列深度超过阈值时,它不会停掉流量,而是在IP包头上打一个标记(CE标记)。接收端看到这个标记后,会通知发送端降低发送速率。整个过程是端到端的,不需要逐跳暂停。

我个人习惯把ECN和PFC配合使用:ECN做主动降速,PFC做最后防线。ECN先起作用,如果ECN没控制住,队列继续增长,PFC再介入。

机制 作用范围 触发条件 效果
ECN 端到端 队列深度 > ECN阈值 发送端降速
PFC 逐跳 缓冲区 > XOFF阈值 暂停发送

ECN的配置关键点在于阈值。阈值设得太低,ECN频繁触发,吞吐量上不去;设得太高,ECN形同虚设,PFC频繁触发。我一般建议ECN阈值设置为缓冲区大小的30%-50%,具体数值需要根据实际流量做微调。

实战经验:我在一个AI训练集群中,把ECN阈值从默认的50%调到了30%,结果训练吞吐量提升了15%。原因是ECN更早介入,避免了PFC的全局暂停。所以,别迷信默认值,一定要调优。

2.4 DCB配置——把一切串起来

DCB(Data Center Bridging)是IEEE 802.1标准族,它把PFC、ECN、优先级调度等机制整合在一起。说白了,DCB就是RoCE网络的“交通规则”。

DCB的核心组件包括:

  • 802.1Qbb(PFC):优先级流控,我们刚才讲过了
  • 802.1Qaz(ETS):增强传输选择,用于带宽分配
  • 802.1Qau(QCN):拥塞通知,ECN的增强版
  • DCBX:DCB的发现和配置协议,用于自动协商

配置DCB时,我建议按以下步骤来:

  1. 划分优先级:把RoCE流量映射到优先级3,管理流量映射到优先级0
  2. 开启PFC:只在优先级3上开启PFC
  3. 配置ETS:给优先级3分配80%的带宽,其他优先级共享20%
  4. 配置ECN:在交换机上开启ECN,设置合适的阈值
  5. 启用DCBX:让交换机和网卡自动协商DCB参数

下面是一个典型的DCB配置示例(以Mellanox交换机为例):

# 配置优先级映射
mlnx qos priority-map 3 0

# 开启PFC
mlnx qos pfc enable 3

# 配置ETS带宽分配
mlnx qos ets 3 bandwidth 80
mlnx qos ets 0 bandwidth 20

# 开启ECN
mlnx qos ecn enable 3
mlnx qos ecn threshold 30

# 启用DCBX
mlnx qos dcbx enable

重要提醒:DCBX虽然能自动协商,但我建议在正式环境下手动配置。因为DCBX协商失败时,交换机和网卡会回退到默认配置,而默认配置通常不适合RoCE。我曾经因为DCBX协商超时,导致PFC没生效,整个集群的RDMA性能崩了。所以,手动配置更可靠。

2.5 本章知识体系

为了让大家更直观地理解本章的知识结构,我画了一张图。这张图展示了从物理层到DCB配置的完整链路:

RoCE物理网络知识体系 物理层:25G/100G以太网 25GBASE-R(单lane) | 100GBASE-R(4×25G lane) RS-FEC强制开启 | 光模块兼容性检查 流控层:PFC优先级流控 8个优先级(802.1p) | 逐跳PAUSE机制 XOFF阈值70% | XON阈值30% | 仅对RoCE优先级开启 拥塞控制层:ECN显式拥塞通知 端到端标记(CE标记) | 发送端主动降速 ECN阈值30%-50% | 与PFC配合使用 配置层:DCB数据中心桥接 802.1Qbb(PFC) | 802.1Qaz(ETS) | 802.1Qau(QCN) | DCBX 优先级映射 → PFC开启 → ETS带宽 → ECN阈值 → DCBX

这张图清晰地展示了四层结构:物理层是基础,流控层保证无损,拥塞控制层优化性能,配置层把一切落地。每一层都依赖下一层,缺一不可。

2.6 本章小结

好了,这一讲的内容就到这里。我们讲了25G/100G的物理标准,PFC的流控机制,ECN的拥塞通知,以及DCB的配置方法。这些东西看起来琐碎,但每一个细节都可能成为你RoCE网络的瓶颈。

我个人觉得,物理网络配置是RoCE中最容易被忽视的部分。很多人觉得“不就是配个交换机嘛”,结果一跑RDMA就出问题。所以,我建议你在动手搭建之前,先把这些基础打牢。

下一讲我们会进入更具体的操作层面,看看如何在Linux系统上配置RoCE网卡和驱动。到时候见。


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