四、网络配置与优化:InfiniBand、RoCE、VPC 网络设计,MTU 与流控

网络,可以说是 HPC 云环境的高速公路。路修得不够宽、不够平,车就跑不起来。这一章,我们聊聊怎么规划这条“高速公路”。

我这些年经手过不少集群,坦白讲,大多数性能瓶颈其实都卡在网络这儿。CPU 算力堆上去了,GPU 也到位了,结果一跑分布式训练,节点间的通信延迟直接把算力“吃掉”一大截。所以,网络配置与优化,是 HPC 质控里绕不开的硬骨头。

4.1 三大网络方案选型:IB 还是 RoCE,抑或 VPC?

目前主流的 HPC 网络方案有三种:InfiniBand (IB)、RoCE (RDMA over Converged Ethernet)、以及云原生 VPC。选哪个,取决于你的业务场景和预算。

我个人习惯把 IB 比喻成 HPC 的“专用超车道”,RoCE 是“升级过的国道”,而 VPC 就是云上的“智能导航路网”。

特性 InfiniBand (IB) RoCE (RoCEv2) 云原生 VPC (如 EFA)
传输层 专用 IB 链路层 基于 UDP (以太网) 虚拟化 Overlay 网络
延迟 < 1.5μs(节点内) ~ 3-5μs ~ 10-20μs(典型值)
带宽 200Gbps/400Gbps (HDR/NDR) 100Gbps/200Gbps 100Gbps (云提供商限定)
成本 高(专用硬件) 中(兼容标准以太网) 中低(随用随付)
适用场景 高并发 MPI、超大规模 AI 训练 中小集群、混合 RDMA 需求 云端弹性伸缩、传统 TCP 迁移

避坑指南:我曾见过一家公司为了省钱,20 个节点的集群全上了 RoCE。结果跑了两个星期,频繁丢包,性能比 TCP 还差。后来排查发现,他们的交换机根本没开 PFC(优先级流控)。说白了,RoCE 对交换机的要求并不比 IB 低多少。

4.2 VPC 网络设计:Underlay 与 Overlay 的博弈

在云环境里,VPC 设计直接决定了网络拓扑的灵活性和性能。核心在于如何平衡 Underlay(物理网络)和 Overlay(虚拟网络)的关系。

我建议遵循以下原则:

  1. 弹性 IP 与直通模式:千万别给 HPC 节点配 NAT 实例。直接用弹性 IP + 专有网络,减少 NAT 带来的转发延迟和 CPU 开销。
  2. 单个 VPC vs. 多个 VPC:如果是百节点以内的集群,一个 VPC 足够。异地多活或跨可用区时,才考虑 VPC Peering 或 Transit Gateway。你想想看,跨 VPC 通信多一次隧道封装,延迟就多一跳。
  3. RDMA 需要独立子网:云平台通常在 VPC 内部划出一个 RDMA 子网,用于 EFA 或 SR-IOV 直通。这个子网不经过虚拟交换机,直接挂载物理网卡。

技巧:在阿里云或 AWS 上创建 HPC 集群时,记得选择“计算优化型”或“GPU 计算型”实例,并勾选“弹性网卡 RDMA”选项。否则,默认的 VPC 网络连 RDMA 的边都摸不着。

4.3 InfiniBand 配置:从网卡到子网管理器

IB 网络的核心在于“通道适配”和“子网管理器”。

  • 硬件层:确保所有节点安装了兼容的 HCA(主机通道适配器),如 Mellanox ConnectX 系列。
  • 驱动与固件:同一个集群,必须统一驱动和固件版本。
  • 子网管理器:必须有一台节点作为主管理器,负责路径计算和负载均衡。

配置 IB 的基本步骤:

# 1. 安装驱动程序
sudo yum install -y mlnx-ofed-kernel-dkms mlnx-ofed-user

# 2. 启动 OpenSM 子网管理器(在管理节点上)
sudo systemctl enable opensmd
sudo systemctl start opensmd

# 3. 检查 IB 链路状态
ibstatus

# 4. 查看 IB 网络中所有活动的节点
ibnetdiscover | grep -E "Switch|HCA"

# 5. 配置分区键(PKey),用于隔离流量
sudo ibsysstat -p

注意事项:IB 环境里最忌讳的是“分区键不一致”。我曾经有一个集群,新加了几台机器后死活连不上,查了半天,原来是新机器的 PKey 和交换机定义的分区不匹配。

4.4 RoCE 调优:PFC、ECN 与 QoS

RoCE 虽然跑在以太网上,但性能全靠“无损”机制保障。没有 PFC 和 ECN,RoCE 就是一张普通的千兆网卡。

  • PFC(优先级流控):在交换机上启用,当接收缓存快满时,通知发送端暂停特定优先级的流量。
  • ECN(显式拥塞通知):交换机在包头上打标记,接收端感知后通知发送端降速。RoCEv2 必须配合 ECN 使用。
  • QoS 队列:为 RDMA 流量分配最高优先级队列,防止它与普通 TCP 流量争抢带宽。

警告:如果交换机不支持 PFC/E CN,建议索性不要用 RoCE,直接走 TCP 或 InfiniBand。RoCE 在半损网络下会疯狂重传,产生“吞没效应”,拖垮整个集群。

在 Linux 主机端的配置示例:

# 1. 启用 ECN(需要内核支持)
echo 1 > /proc/sys/net/ipv4/tcp_ecn

# 2. 设置 RDMA 设备优先级
mlxconfig -d /dev/mst/mt4123_pciconf0 set ROCE_MODE=2
mlxconfig -d /dev/mst/mt4123_pciconf0 set ROCE_PRIORITY=3

# 3. 验证 RoCE 是否正常工作
ib_write_bw -d mlx5_0 --report_gbits

4.5 MTU 与流控:被忽略的“隐形杀手”

很多人觉得 MTU 设成默认 1500 就行了。但在 HPC 网络里,这往往就是性能瓶颈的源头。

  • MTU 九千字节(Jumbo Frame):IB 和 RoCE 都强烈建议使用 9000 字节 MTU。同样的数据量,大帧能减少包数量、降低 CPU 中断开销。
  • 流控模式:TCP 使用滑动窗口,而 RDMA 依赖硬件级的“基于信用的流控”。
  • 缓冲区设置:网卡接收缓冲区太小,会导致丢包。

配置 MTU 的常用命令:

# 查看当前 MTU
ip link show eth0

# 修改 MTU 为 9000(需要端到端支持)
sudo ip link set dev eth0 mtu 9000

# 在 IB 设备上查看 MTU 限制
ibstat | grep MTU

个人经验:我曾经遇到过一个集群,所有节点都配了 9000 的 MTU,结果跑 MPI 作业时频繁超时。查了一整天,最后发现是交换机的一个端口 MTU 设成了 1500。这就是典型的“木桶效应”——一个端口低,整个集群性能都受影响。

4.6 网络质控检查清单

在交付集群前,我习惯用下面这套流程做一次“网络健康体检”:

检查项 命令/工具 预期结果
IB 链路状态 ibstatus 所有 HCA 处于 ACTIVE 状态
端到端延迟 ib_write_lat 节点间延迟 < 2μs
RoCE 丢包率 ethtool -S eth0 | grep rx_no_buffer 丢包为 0
MTU 一致性 ping -M do -s 8972 target_ip 不丢包、不分片
子网管理器健康 smctest -c 返回 OK

小技巧:在写测试脚本时,把每项检查的结果都记录到一个日志文件中。一旦出现问题,对比前后两次的日志,能快速定位到是哪个节点或哪个端口在漂移。我习惯把这个脚本叫做 hpc_net_qc.sh ,每次扩容或升级后都跑一遍。

#!/bin/bash
# 简易网络质控脚本片段
for node in $(cat nodes.txt); do
    echo "Checking $node..."
    latency=$(ssh $node "ib_write_lat -d mlx5_0 --report_gbits 2>&1 | tail -1 | awk '{print \$NF}'")
    echo "Latency on $node: $latency us"
done
HPC 网络质控核心流程 1. 网络方案选型 2. VPC/子网划分 3. 配置 MTU/流控 4. IB/RoCE 驱动调优 5. 执行质控检查清单 通过 → 交付生产环境

这套流程走下来,基本上可以把网络层面百分之九十的问题挡在门外。最后说一句:HPC 网络调优,没有银弹。IB、RoCE、VPC 各有各的脾气,关键是理解它们的底层机制,再根据你的场景去微调。别偷懒,每个字段都理解清楚了再动手。