Mellanox/NVIDIA 网卡 MFT(Mellanox Firmware Tools) 在 Ubuntu 上的完整安装指南。
0. 前置依赖
安装 MFT 前,需要确保系统已安装编译内核模块所需的依赖:
bash
sudo apt update
sudo apt install -y gcc make dkms linux-headers-$(uname -r)
1. 下载安装
打开官网:
选择合适的链接:

先下载 debian 系的安装包,100MB 左右:
bash
wget https://www.mellanox.com/downloads/MFT/mft-4.36.0-147-x86_64-deb.tgz
解压:
bash
tar zxf ./mft-4.36.0-147-x86_64-deb.tgz
一目了然:
看文件夹中的内容,无脑地先执行
bash
sudo ./old-mft-uninstall.sh
接着执行:
bash
sudo ./install.sh

2. 应用示例:

学习更多功能和应用方式:
点击打开 User Manual
3. ConnectX-5 常用命令速查
| 命令 | 作用 |
|---|---|
sudo mst start |
启动 MST 服务 |
sudo mst status |
查看 MST 设备状态 |
ls /dev/mst/ |
列出所有 MST 设备节点 |
sudo flint -d /dev/mst/mt4119_pciconf0 q |
查询固件版本、GUID、PSID 等信息 |
sudo mlxconfig -d /dev/mst/mt4119_pciconf0 q |
查询网卡当前配置 |
sudo mlxconfig -d /dev/mst/mt4119_pciconf0 set LINK_TYPE_P1=2 |
将端口 1 设为 Ethernet 模式(2=Eth, 1=IB) |
sudo mlxconfig -d /dev/mst/mt4119_pciconf0 set SRIOV_EN=1 NUM_OF_VFS=16 |
开启 SR-IOV |
sudo mlxlink -d /dev/mst/mt4119_pciconf0 |
查看物理层链路状态(速率、FEC、误码等) |
ConnectX-5 的 MST 设备名通常为
mt4119_pciconf0(双端口卡会有mt4119_pciconf0.1)。如果机器上的 网卡设备名不同,以mst status输出为准。
4. 与 MLNX_OFED 的关系
- MFT 是独立的固件管理工具包,不依赖 MLNX_OFED 驱动。
- 如果已经安装了
MLNX_OFED_LINUX-24.10,MFT 理论上会随 OFED 一起安装;但如果执行mst提示找不到命令,说明组件缺失或未正确加载,单独按上述步骤安装 MFT 即可覆盖。
安装完成后,我们就可以用 mlxconfig 配置网卡工作模式(IB/Eth)、用 flint 刷写固件、用 mlxlink 排查物理链路问题了。
5. 光路数据统计
对于 QSFP28 AOC 光纤链路,逻辑接口的包数 ≠ 物理层实际走光纤的帧数。要确认"真正通过光纤收发"的数据量,需要看 Mellanox 物理层(PHY)计数器。
5.1. 查看物理层光纤收发帧数(最准确)
bash
sudo ethtool -S <interface> | grep -E 'phy|fec|pcs'
ConnectX-5 的关键 PHY 计数器:
| 计数器 | 含义 |
|---|---|
rx_packets_phy |
物理层接收帧总数(含以太网帧间隙、前导码) |
tx_packets_phy |
物理层发送帧总数 |
rx_bytes_phy |
物理层接收字节总数 |
tx_bytes_phy |
物理层发送字节总数 |
rx_crc_errors_phy |
物理层 CRC 错误(光纤信号质量指标) |
rx_in_range_len_errors_phy |
物理层长度错误 |
rx_symbol_errors_phy |
物理层编码错误(AOC 链路质量差时增长) |
fec_corrected_blocks |
FEC 纠错块数 |
fec_uncorrected_blocks |
FEC 无法纠错的块数(>0 说明链路质量严重恶化) |
示例命令:
bash
IFACE=eth0
echo "=== 逻辑层 ==="
ethtool -S $IFACE | grep -E 'rx_packets:|tx_packets:|rx_bytes:|tx_bytes:'
echo "=== 物理层(光纤实际收发) ==="
ethtool -S $IFACE | grep -E 'phy|fec'
5.2. 查看每 Lane(光纤通道)的详细计数
QSFP28 AOC 内部有 4 条光纤通道(4 lanes)。用 mlxlink 可以查看每条 lane 的误码和状态:
bash
sudo mlxlink -d /dev/mst/mt4119_pciconf0 --show_counters
输出中会包含:
- Raw counters:原始物理层计数
- Per lane BER:每条 lane 的误码率
- PCS/FEC counters:PCS 层和 FEC 层的纠错统计
如果你看到 fec_uncorrected_blocks 不为 0,说明光纤链路质量有问题,部分包在物理层就丢了,逻辑层 rx_dropped 可能不体现。
5.3. 一键脚本:对比逻辑层 vs 物理层光纤帧数
针对你的双 CX5 平台,下面脚本自动遍历所有 mlx5 接口,对比逻辑层和 PHY 层计数:
bash
#!/bin/bash
# save as: mlx_fiber_stats.sh
echo "========================================"
echo " Mellanox CX5 光纤链路收发统计"
echo " Time: $(date)"
echo "========================================"
for iface in $(ls /sys/class/net/ | grep -E 'eth|ib'); do
# 确认是 mlx5 设备
driver=$(ethtool -i $iface 2>/dev/null | awk '/driver:/{print $2}')
if [ "$driver" != "mlx5_core" ]; then
continue
fi
echo ""
echo ">>> 接口: $iface"
echo "--- 逻辑层(内核协议栈视角) ---"
cat /sys/class/net/$iface/statistics/rx_packets | awk '{printf " RX packets: %s\n", $1}'
cat /sys/class/net/$iface/statistics/tx_packets | awk '{printf " TX packets: %s\n", $1}'
cat /sys/class/net/$iface/statistics/rx_bytes | awk '{printf " RX bytes: %s\n", $1}'
cat /sys/class/net/$iface/statistics/tx_bytes | awk '{printf " TX bytes: %s\n", $1}'
echo "--- 物理层(光纤实际收发,含开销) ---"
ethtool -S $iface 2>/dev/null | grep -E 'phy' | sed 's/^/ /'
echo "--- 链路质量(FEC/误码) ---"
ethtool -S $iface 2>/dev/null | grep -E 'fec|crc|symbol_error' | sed 's/^/ /'
done
echo ""
echo "========================================"
echo " 说明:"
echo " rx_packets_phy / tx_packets_phy = 光纤实际收发的帧数"
echo " 若 phy 计数为 0 而逻辑层有包,说明问题在网卡内部"
echo " 若 phy 计数 > 逻辑层,差值为以太网帧间隙/前导码/FEC 开销"
echo "========================================"
运行:
bash
chmod +x mlx_fiber_stats.sh
sudo ./mlx_fiber_stats.sh
5.4. 关键判断逻辑
| 场景 | 解读 |
|---|---|
rx_packets > 0, rx_packets_phy = 0 |
逻辑层有统计但物理层无帧,不可能,通常说明接口未 Up 或统计未刷新 |
rx_packets_phy > rx_packets |
正常。PHY 层包含以太网前导码(8B)、帧间隙(12B)、FEC 开销 |
rx_packets_phy = 0, 链路 Up |
对端未发流量,或 AOC 光纤单向故障 |
fec_uncorrected_blocks > 0 |
光纤链路质量差,有包在物理层丢失且无法恢复 |
rx_crc_errors_phy 持续增长 |
AOC 光纤或光模块问题,需更换 |
5.5. 生成流量验证
如果你需要主动发包来验证光纤通道是否通:
bash
# 在 A 机(服务端)
iperf3 -s
# 在 B 机(客户端,通过 CX5 + AOC 连接)
iperf3 -c <对端IP> -t 10 -i 1
然后同时运行上面的统计脚本,观察 tx_packets_phy 和 rx_packets_phy 是否同步增长。