第358篇:HPC 高性能计算网络 InfiniBand 基础

关键词:InfiniBand、HPC、RDMA、Subnet Manager、Fabric Manager


一、案例背景

某超级计算中心升级HPC集群,从传统的以太网RoCE网络迁移到InfiniBand(IB)网络。IB网络以其超低时延(<1μs)、超高吞吐(400Gbps/NDR)和原生RDMA支持,成为HPC领域的首选互联技术。本次案例记录IB网络从规划到部署的全过程。

项目规模: - 计算节点:512台(每台2×AMD EPYC + 8×NVIDIA A100) - IB网络:400Gbps NDR(第四代) - IB交换机:24台(Spine 8台 + Leaf 16台) - 拓扑:两级Fat-Tree

二、需求分析与方案设计

2.1 InfiniBand vs 以太网对比

特性 InfiniBand (NDR) RoCEv2 (200G)
时延 <0.5μs <2μs
单端口速率 400Gbps 200Gbps
RDMA 原生支持 基于IP
流控 RNR/Receiver Flow Control PFC
拥塞控制 DCQCN ECN+DCQCN
管理 Subnet Manager 无统一管理
成本 高 中
生态 HPC/AI专用 通用

2.2 IB网络架构

IB网络架构 - 图示

2.3 IB核心概念

概念 说明 类比
HCA (Host Channel Adapter) IB网卡,类似以太网的NIC NIC
QP (Queue Pair) 通信队列对,类似TCP连接 TCP Connection
GID (Global Identifier) 全局标识符,类似IP地址 IP Address
LID (Local Identifier) 本地标识符,由SM分配 MAC Address
Subnet Manager IB网络管理器,分配LID和配置路由 类似SDN Controller
Partition Key (PKEY) 分区密钥,实现网络隔离 类似VLAN
MAD (Management Datagram) 管理数据报,SM通信协议 类似NETCONF

2.4 InfiniBand vs 以太网 RoCEv2 选型分析

选择InfiniBand的核心考量:

考量维度 InfiniBand优势 RoCEv2劣势 影响
时延 <0.5μs(硬件队列管理) 2-5μs(需经OS协议栈) 小消息密集型应用(分子动力学)差异显著
消息率 150M msg/s 50M msg/s MPI小消息场景IB性能3倍
拥塞控制 硬件BECN(Backward ECN) 软件DCQCN IB拥塞控制确定性更强
自适应路由 原生支持,SM动态计算 ECMP静态 IB自动规避拥塞路径
错误恢复 硬件重传(应用无感知) 需要上层重传 IB减少应用层检查点开销
管理 Subnet Manager统一管控 分散配置 IB排错效率更高

成本-效益评估: - IB网卡+交换机成本约为同等规格以太网的2-3倍 - 但对于HPC场景,IB可减少30%+的GPU闲置等待时间 - 按512节点集群计算,IB投资回收期约18个月(考虑GPU利用率的提升)

三、技术细节与实施过程

3.1 Subnet Manager部署

# 在管理节点安装OpenSM(开源Subnet Manager)
# CentOS/RHEL
yum install opensm

# 配置OpenSM
cat > /etc/opensm.conf << 'EOF'
base_lid 1
guid_partition_table 0xffff:0x0000
default_pkey_table 0x8001:0xffff
system_image_guid 0x0000000000000001
bms_max_completer_path 1
enable_mcast_loopback 1
enable_spl 1
enable_dcqn 1          # 启用DCQCN拥塞控制
dcqn_iw 1048576         # 初始拥塞窗口
dcqn_cep 1              # CEP参数
EOF

# 启动OpenSM
systemctl enable opensm
systemctl start opensm

# 验证SM状态
ibstatus
# Caia_NDR_00:
#   CA type: IB
#   Number of ports: 64
#   Firmware version: 2.44.2000
#   Hardware version: 0x...
#   Subnet manager: Active  <-- SM正常

3.2 IB交换机配置

# 通过Fabric Manager配置IB交换机
# 1. 设置交换机GUID和描述
ibswitchset -e 0x00c0dd02xxxxxx desc="IB-Leaf-01"

# 2. 配置端口速率(确保400Gbps)
ibportinfo -l 16 -p 1
# GID Prefix: fe80:0000:0000:0000::/64
# PortState: Active
# PhysicalState: Polling
# LinkWidthEffective: X16  <-- 16 lane = 400Gbps
# LinkSpeedEffective: 400  <-- 400Gbps

# 3. 配置PKEY(分区)
ibpkey -l 16 -m add 0x8001 compute-partition
ibpkey -l 16 -m add 0x8002 storage-partition

# 4. 配置SL到VL映射(服务质量)
ibsetport -l 16 -p 1 vl_arb_mask=0x00000001  # 优先级配置

3.3 HCA配置

# 计算节点HCA配置
# 查看HCA状态
ibv_devices
# device              node GUID
# ------             ---------
# mlx5_0              0x00c0dd17xxx0001
# mlx5_1              0x00c0dd17xxx0002

# 配置HCA参数
# 启用RDMA
mlxconfig -d /dev/mxl5_0 set SYMMETRIC_PAYLOAD布局=1
mlxconfig -d /dev/mxl5_0 set NUM_PORTS=2

# 配置GID(Global Identifier)
ibmodify -e 0x00c0dd17xxx0001 set GID[1]=2001:db8:hpc::1/64

# 验证RDMA性能
ib_write_bw -d mlx5_0 -i 1 -F -t 60
# ------------------------------
#                       TX Bytes:    120000000000
#                       TX Bandwidth:    15999 Mb/sec  <-- 单端口~160Gbps(双端口320Gbps)
#                       Total TX time:   7.50 sec
# ------------------------------

3.4 DCQCN(拥塞控制)配置

# DCQCN是InfiniBand的拥塞控制协议
# 在计算节点配置

# 设置Congestion Notification参数
mlxconfig -d /dev/mlx5_0 set CNP_RATE_LIMIT=1
mlxconfig -d /dev/mlx5_0 set DC_CN_BN=1

# 设置RTT(Round Trip Time)
perftest -d mlx5_0 -F --rtt=1000  # 1000ns

# 验证DCQCN
ibdiag -t cnp -v
# 检查CNP(Congestion Notification Packet)计数

四、实战故障排查案例

4.1 案例:IB Subnet Manager主备切换故障

故障背景: HPC集群运行两周后,管理员对主SM执行升级。升级完成后发现部分计算节点的IB端口处于Down状态,MPI作业全部失败。

故障时间线:

案例:IB Subnet Manager主备切换故障 - 图示

完整排查步骤:

# 步骤1:检查SM状态
$ ibstatus
Caia_NDR_00:
  CA type: IB
  Number of ports: 64
  Firmware version: 2.44.2000
  Subnet manager: Active
  SM state: Up
  # SM状态为Active,但部分端口Down

# 步骤2:检查端口状态
$ ibportinfo -l 16 -p 1
GID Prefix:     fe80:0000:0000:0000::/64
Base Lid:       16
LMC:            0
Max VN:         0
SM LID:         1
SM Cover:       Y
SM GUID:        0x00c0dd02xxxxxxx2  ← 注意:SM GUID指向备SM
State:          Active (4)
Physical state: LinkUp (5)
Rate:           400 (400Gbps)

$ ibportinfo -l 48 -p 1
GID Prefix:     fe80:0000:0000:0000::/64
Base Lid:       48
State:          Down (1)  ← 端口Down!
Physical state: LinkDown (0)
# → Leaf-03的端口48处于Down状态

# 步骤3:查看SM日志
$ tail -f /var/log/opensm.log
07/08 02:15:33 [INFO]  Subnet Manager started (standby)
07/08 02:15:34 [INFO]  Primary SM detected, entering standby
07/08 02:15:45 [INFO]  Primary SM lost, becoming active
07/08 02:15:46 [WARN]  Partition table mismatch: expected 0x8001, got 0x8000
07/08 02:15:46 [ERROR] Failed to configure port LID 48, PKEY 0x8001 not found
07/08 02:15:47 [ERROR] Port LID 48 transitioned to Down state
# → 根因:备SM的PKEY表与主SM不一致

# 步骤4:对比主备SM配置
# 主SM配置:
$ cat /etc/opensm.conf
base_lid 1
guid_partition_table 0xffff:0x0000
default_pkey_table 0x8001:0xffff  ← 管理分区
default_pkey_table 0x8002:0x7fff  ← 计算分区

# 备SM配置:
$ cat /etc/opensm.conf
base_lid 1
guid_partition_table 0xffff:0x0000
default_pkey_table 0x8000:0xffff  ← 错误!应该是0x8001
# → 备SM的PKEY 0x8001被配置成了0x8000

# 步骤5:修复备SM配置
$ cat > /etc/opensm.conf << 'EOF'
base_lid 1
guid_partition_table 0xffff:0x0000
default_pkey_table 0x8001:0xffff
default_pkey_table 0x8002:0x7fff
system_image_guid 0x0000000000000001
enable_dcqn 1
dcqn_iw 1048576
EOF

# 步骤6:重启备SM
$ systemctl restart opensm

# 步骤7:验证端口恢复
$ ibstatus | grep -A5 "Caia_NDR"
Caia_NDR_00:
  ...
  Subnet manager: Active
  ...
$ ibportinfo -l 48 -p 1
State:          Active (4)
Physical state: LinkUp (5)
Rate:           400 (400Gbps)
# ✓ 端口已恢复

# 步骤8:验证MPI作业
$ mpirun -np 4 --hostfile hosts hostname
cn-001
cn-002
cn-003
cn-004
# ✓ MPI作业正常

预防措施: 1. 主备SM配置必须通过配置文件管理(Ansible/Salt),禁止手工修改 2. 每次SM配置变更后,立即验证主备配置一致性 3. 建立SM配置比对自动化脚本,每日检查

4.2 性能基准测试

测试工具 测试项 目标值 实测值
ib_write_bw 单流带宽 320Gbps 318Gbps
ib_write_lat 单流时延 <0.5μs 0.42μs
osu_mbw MPI带宽 300Gbps 295Gbps
osu_latency MPI时延 <1μs 0.8μs
HPL 线性代数 50TFlops 48.5TFlops

4.3 常见问题与解决

问题 现象 根因 解决方案
Link Down 端口无法Up 光模块不兼容 更换QSFP-DD光模块
LID冲突 SM分配LID失败 Subnet过大 分割Subnet或增加LID范围
PKEY缺失 QP无法创建 PKEY未配置 添加PKEY到交换机
DCQCN丢包 拥塞时大量丢包 DCQCN参数不当 调整IW/CEP参数
SM切换 SM故障后业务中断 无备用SM 部署主备SM

4.4 监控告警配置

# 使用ibstat监控IB状态
ibstat -l 16 -p 1
# Port info of LID 16
#     State: Active (4)
#     Physical state: LinkUp (5)
#     Rate: 400 (400Gbps)
#     Link layer: InfiniBand

# 配置告警脚本
cat > /opt/ib_monitor.sh << 'EOF'
#!/bin/bash
# 检查所有端口状态
for switch in $(ibswitchinfo | grep "Switch" | awk '{print $2}'); do
    for port in $(seq 1 64); do
        status=$(ibportinfo $switch -p $port 2>/dev/null | grep "State:" | awk '{print $2}')
        if [ "$status" != "Active" ]; then
            echo "ALERT: Switch $switch Port $port is $status" | mail -s "IB Port Alert" admin@hpc.local
        fi
    done
done
EOF

# 定时执行
crontab -e
# */5 * * * * /opt/ib_monitor.sh

五、经验总结

序号 经验类别 经验内容 适用场景
1 拓扑设计 Fat-Tree拓扑提供无阻塞带宽,适合HPC全互联场景 HPC网络
2 Subnet Manager SM必须部署主备,确保高可用 IB管理
3 PKEY规划 PKEY实现网络隔离,按业务划分分区 安全隔离
4 DCQCN DCQCN参数需要根据实际拓扑调优 拥塞控制
5 光模块 IB光模块必须与交换机兼容,采购时注意型号 硬件兼容
6 性能测试 部署后必须使用标准工具进行性能基准测试 验收测试
7 监控体系 IB网络需要专门的监控工具,SNMP不适用 运维监控
8 文档管理 IB网络配置(LID、GID、PKEY)必须详细记录 文档管理
9 人员培训 IB网络运维人员需要专门的培训 人员准备
10 成本评估 IB网络成本高,需评估ROI 投资评估

思考

  1. InfiniBand的Subnet Manager与以太网的SDN Controller在功能定位上有何异同?
  2. 当HPC集群规模扩展到10000节点以上时,IB网络的Subnet Manager会成为瓶颈吗?如何解决?
  3. 随着RoCEv2性能不断提升,InfiniBand在HPC领域的优势是否正在缩小?未来趋势如何?

下篇预告:第359篇:400G 数据中心网络升级项目案例