4、交换机配置与调优:Mellanox交换机基础配置、端口速率与FEC设置、流控策略

好,咱们进入第四讲。前面几章我们把网卡、线缆、拓扑都聊了一遍,现在终于轮到交换机了。说实话,在InfiniBand网络里,交换机配置这块儿,很多人容易忽视。总觉得交换机嘛,插上电、连上线就能跑。其实不然。

我见过太多集群,网卡是顶级的,线缆也是最新的,结果性能死活上不去。最后查下来,问题就出在交换机配置上。嗯,今天咱们就把这块儿掰开揉碎了讲清楚。

4.1 Mellanox交换机基础配置

Mellanox的IB交换机,说白了就是一台跑MLNX-OS的专用设备。你第一次拿到手,得先做几件事。

第一件事:初始登录与网络配置

我个人习惯,先用串口线连上去。为什么呢?因为新交换机默认IP是192.168.0.1,万一跟你现有网络冲突,你连都连不上。串口登录后,第一件事就是改管理IP。

# 进入配置模式
enable
configure terminal

# 配置管理IP
interface mgmt0
ip address 10.10.10.100/24
no shutdown
exit

# 配置默认网关
ip route 0.0.0.0/0 10.10.10.1

# 保存配置
configuration write

这里有个坑。我曾经遇到过,保存配置后重启,发现IP没生效。后来查手册才知道,Mellanox交换机有个startup-configrunning-config的区别。你光写configuration write还不够,得确认写入了启动配置。

小技巧: 配置完记得用 show running-configshow startup-config 对比一下。两个一致了,才算真正保存成功。

第二件事:主机名与LLDP

我建议你给每台交换机起个有意义的名字。比如IB-Spine-01IB-Leaf-03。别偷懒,等集群扩到几百个节点,你对着IP找设备,那叫一个痛苦。

hostname IB-Spine-01

# 开启LLDP,方便后续排查拓扑
lldp enable

LLDP这东西,平时你可能觉得没用。但等你遇到链路问题,想确认对端连的是哪台设备时,你就知道它的好了。

4.2 端口速率与FEC设置

端口速率和FEC,这是性能调优的重头戏。很多人在这一步翻车。

端口速率:别想当然

你想想看,现在主流的是HDR100(100Gbps)和HDR200(200Gbps)。但交换机端口默认可能跑在自适应模式。自适应听起来很智能,对吧?其实在IB网络里,自适应经常出幺蛾子。

我遇到过的情况:明明线缆和网卡都支持200G,交换机也支持,但端口协商下来只跑了100G。查了半天,发现是线缆的EEPROM信息有点问题,自适应没协商到最高速率。

所以我的建议是:手动固定速率

# 进入端口配置
interface ib 1/1
speed 200g
no autoneg
exit

手动固定后,端口就老老实实跑200G了。当然,前提是你的线缆和网卡确实支持。

FEC:前向纠错,不是越强越好

FEC(Forward Error Correction)这东西,说白了就是给数据包加一些冗余信息,让接收端能自己纠正一部分错误。好处是降低误码率,坏处是增加延迟。

Mellanox交换机支持几种FEC模式:

FEC模式 适用场景 延迟影响
No FEC 短距离、高质量链路 无额外延迟
Firecode 中等距离,一般链路质量 低延迟
RS-FEC 长距离、高误码率链路 较高延迟

你可能会问:那是不是直接用RS-FEC最保险?

嗯,这里要注意。RS-FEC纠错能力强,但延迟也高。对于深度学习训练这种对延迟敏感的场景,你用了RS-FEC,可能反而拖慢性能。我个人的经验是:先试试Firecode。如果链路质量没问题,Firecode就够用了。只有在链路误码率确实高的情况下,才考虑RS-FEC。

# 设置FEC为Firecode
interface ib 1/1
fec firecode
exit
警告: 交换机和网卡的FEC模式必须一致。我曾经遇到过,交换机设了Firecode,网卡那边忘了改,结果端口死活起不来。两边对不上,链路就建不了。

4.3 流控策略

流控,很多人一听就觉得是“防止丢包”。其实在InfiniBand网络里,流控的逻辑跟以太网不太一样。

IB的流控机制:基于信用的流控

InfiniBand用的是基于信用的流控(Credit-Based Flow Control)。什么意思呢?就是发送端在发数据之前,先问接收端:“你还有多少缓冲区?”接收端告诉它:“我还有100个包的容量。”然后发送端最多发100个包。发完了,再等接收端给新的信用。

这种机制的好处是:理论上不会丢包。因为发送端永远不超过接收端的处理能力。

但实际中呢?我遇到过一个问题:信用分配不合理,导致链路利用率上不去。说白了就是,接收端给了很多信用,但发送端用不完;或者发送端想发,但接收端信用给得慢。

怎么调优?

Mellanox交换机上,你可以调整几个参数:

# 查看当前流控状态
show interface ib 1/1 flow-control

# 调整信用大小(单位:字节)
interface ib 1/1
credit-size 4096
exit

信用大小设多少合适?这取决于你的平均包大小。如果大部分是大的消息(比如4KB以上),信用设大一点,可以减少信用交互次数,提高吞吐。如果小包多,信用设小一点,避免浪费。

我一般怎么调?先跑一个基准测试,看看链路利用率。如果利用率低于90%,就试着调大信用大小。每次调一倍,再测。直到利用率不再明显提升为止。

核心要点: 流控调优的目标不是“不丢包”,而是“让链路跑满”。IB本身已经保证了不丢包,你要做的是让信用分配跟得上实际流量。

PFC:优先级流控

如果你在IB网络上跑了多种流量(比如训练流量和管理流量混在一起),那就要考虑PFC(Priority Flow Control)。PFC允许你为不同优先级的数据流分别做流控。

# 开启PFC,并设置优先级映射
interface ib 1/1
priority-flow-control enable
priority-flow-control priority 3
exit

这里我建议:把训练流量放到高优先级,管理流量放低优先级。这样即使网络拥塞,也是先丢管理流量,不影响训练。

嗯,说到这儿,我想起一个案例。有一次客户反馈,训练任务时不时卡顿一下。我上去一看,发现管理流量和训练流量混在一起,没有做优先级区分。管理流量偶尔爆发,把训练流量的信用给挤占了。开了PFC之后,问题就解决了。

4.4 实战建议:一套完整的配置流程

好,讲了这么多,我总结一下我个人的配置流程:

  1. 基础配置:改主机名、配管理IP、开LLDP。
  2. 端口配置:手动固定速率,不依赖自适应。
  3. FEC选择:先试Firecode,链路质量差再换RS-FEC。
  4. 流控调优:根据平均包大小调整信用大小,必要时开PFC。
  5. 验证:跑iperf或ib_write_bw,确认链路利用率达标。

最后提醒一句:配置完一定要保存。我见过有人调了半天,一重启全没了,那叫一个崩溃。

configuration write

好了,这一章就到这儿。下一章咱们聊聊更高级的话题——路由策略和自适应路由。到时候见。