第4章:固件版本号解读
固件版本号这东西,看着像一串数字,其实里面门道不少。我刚接触IB网络那会儿,就吃过版本号的亏——升级时选错了分支,结果整个集群挂了半天。今天我把这些经验掰开揉碎了讲给你听。
4.1 版本号编码规则:Major.Minor.Build
英伟达IB网卡的固件版本号,遵循一个经典的三段式结构:
XX.YY.ZZ
│ │ └── Build(构建号)
│ └──── Minor(次版本号)
└────── Major(主版本号)
Major(主版本号):代表重大架构变更。比如从ConnectX-5到ConnectX-6,主版本号会跳变。我见过一次主版本升级,整个网络拓扑都得重新规划。
Minor(次版本号):功能更新或协议改进。举个例子,从20.28到20.29,可能只是增加了对某个新协议的支持。
Build(构建号):这是最细的粒度。说白了就是同一个小版本内的补丁迭代。Build号越大,修复的bug越多。
实际案例:固件版本 28.36.1000
- 28 → 主版本,对应ConnectX-6 Dx系列
- 36 → 次版本,包含RoCE v2增强
- 1000 → 构建号,第1000次构建
4.2 版本分支含义:GA、EA、Hotfix
这三个分支,我建议你记牢了。选错了分支,后果可能很严重。
| 分支 | 全称 | 含义 | 适用场景 |
|---|---|---|---|
| GA | General Availability | 正式发布版 | 生产环境首选 |
| EA | Early Availability | 早期体验版 | 测试环境尝鲜 |
| Hotfix | 紧急修复版 | 针对特定bug | 遇到严重问题时 |
GA版本:这是经过完整测试的稳定版本。我个人习惯,生产环境只用GA版本。你想想看,万一出问题,整个业务都受影响,不值得冒险。
EA版本:说白了就是公测版。功能新,但可能有坑。我曾在EA版本上遇到过内存泄漏,折腾了两天才回滚。所以,EA版本只适合在实验室里玩。
Hotfix版本:这是针对特定问题的紧急补丁。比如某个bug导致网络丢包,英伟达会出一个Hotfix。我曾经遇到过一个Hotfix,修复了问题,但引入了新问题。嗯,这里要注意:打Hotfix前,一定要看Release Notes。
避坑指南:我曾经在生产环境打了Hotfix,结果导致所有网卡无法识别。后来发现,那个Hotfix依赖特定的驱动版本。所以,打补丁前,先确认兼容性。
4.3 如何查看当前固件版本
查看固件版本,我常用的方法有四种。每种都有适用场景,你根据情况选。
方法一:使用 ibstat 命令
这是最直接的方法。在Linux终端输入:
ibstat
输出示例:
CA 'mlx5_0'
CA type: MT4129
FW version: 28.36.1000
Node GUID: 0x248a070300a1b2c3
System image GUID: 0x248a070300a1b2c3
看到 FW version 那行了吗?那就是固件版本。
方法二:使用 mlxconfig 命令
这个方法能看更多细节:
mlxconfig query | grep -i firmware
输出示例:
FW_VERSION 28.36.1000
FW_BUNDLE_ID 28.36.1000_GA
注意看 FW_BUNDLE_ID,它告诉你这是GA版本还是其他分支。
方法三:使用 ibv_devinfo 命令
这个方法适合查看所有网卡信息:
ibv_devinfo -v | grep fw_ver
输出示例:
fw_ver: 28.36.1000
方法四:通过MFT工具查看
如果你安装了MFT(Mellanox Firmware Tools),可以用:
flint -d /dev/mst/mt4129_pciconf0 query full | grep "FW Version"
我的小技巧:我习惯写一个脚本,批量检查所有节点的固件版本。这样能快速发现版本不一致的问题。脚本大概长这样:
#!/bin/bash
for node in $(cat nodes.txt); do
echo "Node: $node"
ssh $node "ibstat | grep 'FW version'"
done
4.4 版本号与硬件型号的对应关系
不同硬件型号,固件版本号的范围也不同。我整理了一张表,方便你对照:
| 硬件型号 | 典型固件版本范围 | 说明 |
|---|---|---|
| ConnectX-4 | 12.x.x | 较老,已逐步淘汰 |
| ConnectX-5 | 16.x.x ~ 18.x.x | 主流型号,稳定 |
| ConnectX-6 | 20.x.x ~ 28.x.x | 高性能,支持RoCE v2 |
| ConnectX-7 | 32.x.x ~ 40.x.x | 最新,支持400G |
为什么会这样?因为每个硬件系列都有独立的固件开发分支。你不可能把ConnectX-6的固件刷到ConnectX-5上,硬件不兼容。
4.5 版本号解读实战
我们来看一个实际例子。假设你看到这样一个版本号:
FW version: 28.36.1000_GA
解读步骤:
- 看主版本:28 → ConnectX-6 Dx系列
- 看次版本:36 → 功能较新,包含RoCE v2增强
- 看构建号:1000 → 第1000次构建,比较成熟
- 看分支:GA → 正式发布版,可以用于生产
结论:这个固件版本适合生产环境,功能完整,稳定性有保障。
4.6 版本号常见误区
我见过不少新手犯这些错,你注意避开:
- 误区一:认为版本号越大越好。其实,EA版本的版本号可能比GA版本大,但稳定性差远了。
- 误区二:忽略Build号。Build号不同,可能修复了不同的bug。我曾经因为没注意Build号,升级后反而引入了新问题。
- 误区三:混用不同分支的固件。比如一台机器用GA,另一台用Hotfix,结果集群通信异常。
重要提醒:升级固件前,一定要确认所有节点的固件版本一致。不一致的版本会导致网络性能下降,甚至通信中断。
4.7 知识体系图
下面这张图,帮你理清本章的核心逻辑:
这张图把版本号解读的三个核心维度串起来了。你对照着看,思路会更清晰。
公众号:蓝海资料掘金营,微信deep3321