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-config和running-config的区别。你光写configuration write还不够,得确认写入了启动配置。
show running-config 和 show startup-config 对比一下。两个一致了,才算真正保存成功。
第二件事:主机名与LLDP
我建议你给每台交换机起个有意义的名字。比如IB-Spine-01、IB-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
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%,就试着调大信用大小。每次调一倍,再测。直到利用率不再明显提升为止。
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 实战建议:一套完整的配置流程
好,讲了这么多,我总结一下我个人的配置流程:
- 基础配置:改主机名、配管理IP、开LLDP。
- 端口配置:手动固定速率,不依赖自适应。
- FEC选择:先试Firecode,链路质量差再换RS-FEC。
- 流控调优:根据平均包大小调整信用大小,必要时开PFC。
- 验证:跑iperf或ib_write_bw,确认链路利用率达标。
最后提醒一句:配置完一定要保存。我见过有人调了半天,一重启全没了,那叫一个崩溃。
configuration write
好了,这一章就到这儿。下一章咱们聊聊更高级的话题——路由策略和自适应路由。到时候见。