第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

解读步骤:

  1. 看主版本:28 → ConnectX-6 Dx系列
  2. 看次版本:36 → 功能较新,包含RoCE v2增强
  3. 看构建号:1000 → 第1000次构建,比较成熟
  4. 看分支:GA → 正式发布版,可以用于生产

结论:这个固件版本适合生产环境,功能完整,稳定性有保障。

4.6 版本号常见误区

我见过不少新手犯这些错,你注意避开:

  • 误区一:认为版本号越大越好。其实,EA版本的版本号可能比GA版本大,但稳定性差远了。
  • 误区二:忽略Build号。Build号不同,可能修复了不同的bug。我曾经因为没注意Build号,升级后反而引入了新问题。
  • 误区三:混用不同分支的固件。比如一台机器用GA,另一台用Hotfix,结果集群通信异常。

重要提醒:升级固件前,一定要确认所有节点的固件版本一致。不一致的版本会导致网络性能下降,甚至通信中断。

4.7 知识体系图

下面这张图,帮你理清本章的核心逻辑:

固件版本号解读知识体系 固件版本号 编码规则 Major.Minor.Build 版本分支 GA / EA / Hotfix 查看方法 ibstat / mlxconfig Major:架构变更 重大升级 Minor:功能更新 协议改进 Build:补丁迭代 bug修复 GA:正式版 生产环境 EA:体验版 测试环境 Hotfix:紧急修复 特定bug ibstat 快速查看 mlxconfig 查看分支 ibv_devinfo 批量查看 核心:版本号 = 硬件型号 + 功能迭代 + 稳定性

这张图把版本号解读的三个核心维度串起来了。你对照着看,思路会更清晰。


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