双节点InfiniBand网络配置与性能问题排查全流程

文档:双节点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)
  • 初始症状:
    1. ibstat 命令显示链路Active,但无法看到PKey(分区密钥)表的分配。
    2. 直接运行nccl-testsib_write_bw等RDMA应用时,程序挂起或连接失败。
  • 排查与诊断:
    1. 配置子网管理器 (OpenSM): 创建 /etc/opensm/opensm.conf/etc/opensm/partitions.conf 文件,定义了默认分区PKey为0x7fff
    2. 发现工具链异常: 即使opensm在前台运行并显示进入MASTER状态,客户端的ibstat工具依然不显示PKey。进一步使用saquery查询同样失败,报错SA_ERR_REQ_INVALIDPermission denied
    3. 突破性验证: 绕过有问题的诊断工具,直接配置IPoIB(IP over InfiniBand)并使用ping命令测试。ping测试成功,证明了底层PKey已经生效,网络在逻辑上是连通的。
  • 阶段性结论: 系统自带的infiniband-diags工具集(ibstat, saquery)在该OFED版本或系统环境下存在显示Bug或不兼容问题,其输出结果不可信。ping通IPoIB地址是验证基础连通性的金标准
阶段二:RDMA性能瓶颈问题 (CPU频率)
  • 初始症状:
    1. ib_write_bw原生RDMA测试可以连通,但带宽仅有约3200 MiB/s,远低于100Gb/s(约12500 MiB/s)的理论值。
    2. iperf3在IPoIB上测试,带宽也只有约26 Gbit/s。
  • 排查与诊断:
    1. 发现关键警告: ib_write_bw的输出中明确给出了警告: Conflicting CPU frequency values detected... CPU Frequency is not max.
    2. 定位根本原因: 使用cpupower frequency-info命令验证,发现CPU在测试期间始终运行在最低的节能频率(如800MHz)。
  • 阶段性结论: CPU性能成为RDMA网络的瓶颈。由于CPU未能进入高性能模式,导致其向网卡“喂”数据的速度远跟不上网卡的处理速度,造成了性能的巨大损失。
阶段三:平台稳定性问题 (高频下连接失败)
  • 初始症状:
    1. 尝试使用stress工具或cpupower命令强制CPU进入高性能模式。
    2. CPU频率成功拉升后,所有基于TCP Socket的RDMA连接工具(ib_write_bw默认模式, iperf3)均无法建立连接,报错Connection refusedUnable to init the socket connection
  • 排查与诊断:
    1. 排除资源争抢: 使用“先拉高频率,再停止压力,立刻测试”的两步法,问题依旧,排除了是stress工具本身争抢资源。
    2. 定位至平台层: 确认了问题是“只要CPU处于高频状态,TCP Socket功能就会异常”。这表明问题源于硬件或固件层面的不稳定性。
  • 阶段性结论: 主机平台(主板BIOS、供电)在CPU高频运行时存在不稳定性,导致内核网络协议栈功能异常。

4. 最终诊断结论

InfiniBand硬件(网卡、线缆)和软件(OFED驱动、OpenSM)均工作正常。所有问题的根源在于消费级主机平台(B660I主板)与高性能CPU(i7-12700K混合架构)的组合,在应用于严苛的RDMA网络负载时,出现了兼容性和稳定性问题。 BIOS固件过旧,且其电源管理策略过于保守和复杂,无法为CPU和高速I/O设备提供一个稳定、可预测的高性能运行环境。


5. 标准化操作流程(从零到一的正确步骤)

第一部分:硬件与BIOS层配置 (地基)

  1. 更新BIOS: 访问主板官网,将BIOS更新到最新稳定版本。这是解决平台稳定性的最重要一步。
  2. 加载优化默认值: 进入BIOS,加载Load Optimized Defaults
  3. 配置“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)。

第二部分:操作系统层验证

  1. 验证CPU状态: 重启进入Linux后,执行 sudo cpupower frequency-set -g performance,然后用 watch -n 1 cpupower frequency-info 确认CPU频率能稳定在高性能状态。这是进行下一步的前提
  2. 验证内存锁定: 确认 ulimit -l 的输出为 unlimited。如不是,需修改 /etc/security/limits.conf并重新登录。
  3. 关闭防火墙: 为排除干扰,测试时可临时禁用防火墙 sudo ufw disable

第三部分:InfiniBand网络配置

  1. 安装驱动: 安装NVIDIA OFED。
  2. 配置并运行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
  3. 配置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,必须能通。
  2. 原生RDMA带宽:
    • 服务端: ib_write_bw -d mlx5_0
    • 客户端: ib_write_bw -d mlx5_0 10.0.2.3
    • 预期带宽应 > 11000 MiB/s。
  3. 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
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇