文章目录[隐藏]
文档:双节点InfiniBand网络配置与性能问题排查全流程
版本: 1.0
日期: 2025年7月13日
作者: Gemini & test
1. 最终目标
搭建一个由两台主机组成的100Gb/s InfiniBand网络,并使用NCCL(NVIDIA Collective Communications Library)工具验证其RDMA(远程直接内存访问)通信性能,为深度学习或高性能计算(HPC)应用做准备。
2. 系统环境
- CPU: Intel Core i7-12700K (P-Core + E-Core 混合架构)
- 主板: PC Farm B660I (消费级ITX主板)
- 网卡: NVIDIA ConnectX-6 Dx 100Gb/s InfiniBand HCA
- 连接方式: 两台主机通过IB线缆点对点直连
3. 核心问题演进与诊断(排错历程)
阶段一:基础连通性问题 (PKey & Subnet Manager)
- 初始症状:
ibstat
命令显示链路Active
,但无法看到PKey(分区密钥)表的分配。- 直接运行
nccl-tests
或ib_write_bw
等RDMA应用时,程序挂起或连接失败。
- 排查与诊断:
- 配置子网管理器 (OpenSM): 创建
/etc/opensm/opensm.conf
和/etc/opensm/partitions.conf
文件,定义了默认分区PKey为0x7fff
。 - 发现工具链异常: 即使
opensm
在前台运行并显示进入MASTER
状态,客户端的ibstat
工具依然不显示PKey。进一步使用saquery
查询同样失败,报错SA_ERR_REQ_INVALID
或Permission denied
。 - 突破性验证: 绕过有问题的诊断工具,直接配置IPoIB(IP over InfiniBand)并使用
ping
命令测试。ping
测试成功,证明了底层PKey已经生效,网络在逻辑上是连通的。
- 配置子网管理器 (OpenSM): 创建
- 阶段性结论: 系统自带的
infiniband-diags
工具集(ibstat
,saquery
)在该OFED版本或系统环境下存在显示Bug或不兼容问题,其输出结果不可信。ping
通IPoIB地址是验证基础连通性的金标准。
阶段二:RDMA性能瓶颈问题 (CPU频率)
- 初始症状:
ib_write_bw
原生RDMA测试可以连通,但带宽仅有约3200 MiB/s,远低于100Gb/s(约12500 MiB/s)的理论值。iperf3
在IPoIB上测试,带宽也只有约26 Gbit/s。
- 排查与诊断:
- 发现关键警告:
ib_write_bw
的输出中明确给出了警告:Conflicting CPU frequency values detected... CPU Frequency is not max.
- 定位根本原因: 使用
cpupower frequency-info
命令验证,发现CPU在测试期间始终运行在最低的节能频率(如800MHz)。
- 发现关键警告:
- 阶段性结论: CPU性能成为RDMA网络的瓶颈。由于CPU未能进入高性能模式,导致其向网卡“喂”数据的速度远跟不上网卡的处理速度,造成了性能的巨大损失。
阶段三:平台稳定性问题 (高频下连接失败)
- 初始症状:
- 尝试使用
stress
工具或cpupower
命令强制CPU进入高性能模式。 - CPU频率成功拉升后,所有基于TCP Socket的RDMA连接工具(
ib_write_bw
默认模式,iperf3
)均无法建立连接,报错Connection refused
或Unable to init the socket connection
。
- 尝试使用
- 排查与诊断:
- 排除资源争抢: 使用“先拉高频率,再停止压力,立刻测试”的两步法,问题依旧,排除了是
stress
工具本身争抢资源。 - 定位至平台层: 确认了问题是“只要CPU处于高频状态,TCP Socket功能就会异常”。这表明问题源于硬件或固件层面的不稳定性。
- 排除资源争抢: 使用“先拉高频率,再停止压力,立刻测试”的两步法,问题依旧,排除了是
- 阶段性结论: 主机平台(主板BIOS、供电)在CPU高频运行时存在不稳定性,导致内核网络协议栈功能异常。
4. 最终诊断结论
InfiniBand硬件(网卡、线缆)和软件(OFED驱动、OpenSM)均工作正常。所有问题的根源在于消费级主机平台(B660I主板)与高性能CPU(i7-12700K混合架构)的组合,在应用于严苛的RDMA网络负载时,出现了兼容性和稳定性问题。 BIOS固件过旧,且其电源管理策略过于保守和复杂,无法为CPU和高速I/O设备提供一个稳定、可预测的高性能运行环境。
5. 标准化操作流程(从零到一的正确步骤)
第一部分:硬件与BIOS层配置 (地基)
- 更新BIOS: 访问主板官网,将BIOS更新到最新稳定版本。这是解决平台稳定性的最重要一步。
- 加载优化默认值: 进入BIOS,加载
Load Optimized Defaults
。 - 配置“HPC模式”:
- 禁用节能: 禁用
Intel SpeedStep
和所有CPU C-States
(包括Enhanced C-states),并将C-State Limit
设为C0/C1
。 - 禁用E-Cores: 为HPC场景,建议禁用所有
E-Cores
(能效核心),只使用P-Cores。 - 关闭自动睿频: 禁用
Turbo Boost
等所有自动超频/调频技术。 - 解除功耗墙: 禁用
Power Limit 1/2
。 - (可选)固定电压频率: 为追求极致稳定,可使用
Override Mode
设定一个固定的核心电压(如1.25V)和倍频(如45x)。
- 禁用节能: 禁用
第二部分:操作系统层验证
- 验证CPU状态: 重启进入Linux后,执行
sudo cpupower frequency-set -g performance
,然后用watch -n 1 cpupower frequency-info
确认CPU频率能稳定在高性能状态。这是进行下一步的前提。 - 验证内存锁定: 确认
ulimit -l
的输出为unlimited
。如不是,需修改/etc/security/limits.conf
并重新登录。 - 关闭防火墙: 为排除干扰,测试时可临时禁用防火墙
sudo ufw disable
。
第三部分:InfiniBand网络配置
- 安装驱动: 安装NVIDIA OFED。
- 配置并运行OpenSM:
- 在一台节点上创建
/etc/opensm/opensm.conf
,内容为:partition_config_file /etc/opensm/partitions.conf
- 创建
/etc/opensm/partitions.conf
,内容为:Default=0x7fff,ipoib,defmember=full:ALL=full;
- 在前台启动OpenSM以便观察日志:
sudo /usr/sbin/opensm
- 在一台节点上创建
- 配置IPoIB: 在两个节点上为IB接口(如
ibp7s0
)配置不同IP地址。- 节点1:
sudo ip addr add 10.0.2.2/24 dev ibp7s0 && sudo ip link set dev ibp7s0 up
- 节点2:
sudo ip addr add 10.0.2.3/24 dev ibp7s0 && sudo ip link set dev ibp7s0 up
- 节点1:
第四部分:测试与验证
- 基础连通性: 在节点1上
ping 10.0.2.3
,必须能通。 - 原生RDMA带宽:
- 服务端:
ib_write_bw -d mlx5_0
- 客户端:
ib_write_bw -d mlx5_0 10.0.2.3
- 预期带宽应 > 11000 MiB/s。
- 服务端:
- NCCL应用性能:
- 运行
mpirun
命令进行all_reduce_perf
测试,预期busbw
应接近12.5 GB/s。mpirun -np 4 -H 10.0.2.2:2,10.0.2.3:2 \ --mca btl self,openib \ --mca pkey 0x7fff \ -x NCCL_DEBUG=INFO \ -x NCCL_SOCKET_IFNAME=ibp7s0 \ ~/nccl-tests/build/all_reduce_perf -b 8 -e 1G -f 2 -g 1
- 运行