InfiniBand 与 RDMA 网络深度解析

深入讲解 InfiniBand 网络架构、RDMA 操作类型、RoCEv2 与原生 IB 对比、性能调优及 MPI over RDMA 实践。

1. InfiniBand 架构概览

InfiniBand (IB) 是为 HPC 和数据中心设计的高性能互连技术,核心优势在于低延迟(亚微秒级)、高带宽(当前 NDR 达 400Gb/s)以及内核旁路(Kernel Bypass)。其基本拓扑单元由三类设备构成:

组件全称功能描述
HCAHost Channel Adapter终端节点上的 IB 网卡,提供 verbs 接口
TCATarget Channel Adapter较少使用,面向 I/O 设备(如存储)
SwitchIB Switch支持直通转发,无阻塞交换,亚微秒交换延迟

典型的 Fat-Tree 或 Dragonfly+ 拓扑将数百至数万个计算节点通过多级 IB 交换机互联。HCA 通过 PCIe 挂载到主机,网卡上的 RDMA 引擎直接操作应用虚拟地址,无需 CPU 参与数据搬运。

    Node A (HCA) ──┐
                   ├── Switch L1 ── Switch L2 ── ... ── Node Z (HCA)
    Node B (HCA) ──┘
                   PCIe  ←→  HCA  ←→  IB Link (QSFP-DD)

2. RDMA 操作类型

RDMA(远程直接内存访问)允许一台主机直接读写远端主机的内存,全程无需操作系统介入。IB Verbs API 定义了四种核心双边/单边操作:

2.1 Send/Recv(双边操作)

发送方显式发送,接收方预先投递 receive buffer。语义与传统套接字类似,但延迟更低。

2.2 RDMA Write(单边写)

本地 HCA 直接写入远端内存,远端 CPU 不参与。适合日志追加、 checkpoint 落盘、分布式缓存写回。

2.3 RDMA Read(单边读)

本地 HCA 从远端内存拉取数据,无需远端任何感知。常用于 NVMe-oF、分布式键值存储的读取路径。

2.4 Atomic 操作

Compare-and-Swap (CAS) 和 Fetch-and-Add (FAA) 提供硬件级原子语义,用于构建分布式锁、无锁队列和一致性协议。

// RDMA Write 流程伪代码 (libibverbs)
struct ibv_send_wr wr = {};
wr.opcode = IBV_WR_RDMA_WRITE;        // 或 IBV_WR_RDMA_READ
wr.wr.rdma.remote_addr = rctx->remote_buf_addr;
wr.wr.rdma.rkey       = rctx->remote_rkey;
wr.sg_list = &sge;
wr.num_sge = 1;

// Post 到 Send Queue,HCA 硬件异步完成
ibv_post_send(qp, &wr, &bad_wr);
// 通过 Completion Queue 获取 CQE 确认完成
ibv_poll_cq(cq, 1, &wc);

单边/双边选择原则

  • 大批量、周期性数据搬运优先 RDMA Write/Read,消除远端 CPU 负载。
  • 控制消息、事件通知、请求-响应场景仍适合 Send/Recv。
  • 原子操作仅在一致性协议需要时使用,带宽开销远高于普通读写。

3. RoCEv2 vs 原生 InfiniBand

特性RoCEv1RoCEv2原生 IB
L3 协议Ethernet Layer 2UDP/IP (Layer 3)IB 原生网络层
可路由性否(同网段)是(跨子网/跨机房)否(需子网管理器)
拥塞控制PFC/ECN 必选ECN + 拥塞通知内置基于信用的 Credit 机制
网卡普通 RDMA NIC普通 RDMA NIC专用 IB HCA
交换机RDMA-aware 以太网RDMA-aware 以太网IB Switch
典型延迟~1.5μs~2μs~0.6μs

RoCEv2 基于 UDP 封装,解决了 RoCEv1 的跨网段限制,但引入了 PFC 死锁拥塞传播 等以太网固有问题。数据中心部署 RoCEv2 时,务必启用 ECN(Explicit Congestion Notification)DCQCN(Datacenter Quantized Congestion Notification) 算法。

选择建议

  • 新建 HPC 集群且追求极致延迟 → 原生 IB (NVIDIA Quantum / ConnectX-7)。
  • 现有以太网基础设施改造、云环境多租户隔离 → RoCEv2。

4. 性能调优

4.1 MTU 配置

IB 支持 256B / 512B / 1024B / 2048B / 4096B MTU。大消息(如 MPI 聚合通信、大数组 RDMA Write)应使用 4096B MTU,减少报文分片开销;小消息场景可适当降低以避免尾部填充浪费。

4.2 PKEY (Partition Key)

PKEY 实现子网内的逻辑隔离,类似于 VLAN,用于多租户环境下的安全域划分。MPI 作业启动时需确保各节点 PKEY 一致,否则 QP 无法建立连接。检查命令:

# 查看 PKEY 表
cat /sys/class/infiniband/mlx5_0/ports/1/pkeys/*

# 默认 PKEY 0xffff 为完整成员,0x7fff 为限制性分区

4.3 拥塞控制

原生 IB 使用基于信用的链路层流控(Link-Level Credit),天然避免丢包。RoCEv2 则需部署 DCQCN:

# Enable ECN on mlx5 NIC
echo 1 > /sys/class/net/ib0/ecn/roce_np/enable
echo 1 > /sys/class/net/ib0/ecn/roce_rp/enable

# Enable PFC for lossless Ethernet
mlnx_qos -i ib0 --pfc 0,0,0,1,0,0,0,0  # Priority 3 启用 PFC

4.4 中断聚合与 CPU 亲和性

RDMA 的优势在于旁路内核,但仍需处理 Completion Queue 事件。将 CQ 中断绑定到特定 NUMA 节点上的 CPU,可减少跨 NUMA 抖动:

# IRQ affinity 设置
irqbalance stop
set_irq_affinity_bynode.sh 0  # 绑定到 Node 0

5. MPI over RDMA

现代 MPI 实现(Open MPI、MPICH、Intel MPI)在底层自动利用 RDMA 语义:

MPI 语义底层 IB/RDMA 映射
MPI_Send / MPI_Recv(小消息)IB Send/Recv, eager 协议
MPI_Send / MPI_Recv(大消息)RDMA Read/Write, rendezvous 协议
MPI_Bcast / MPI_Allreduce自适应:IBA 多播或基于 RDMA 的 reduce-scatter
MPI_Win_* (One-sided)直接映射到 RDMA Write/Read/Atomic

MPI 环境调优参数(Open MPI + UCX):

export UCX_TLS=rc,sm  # 优先使用 RC 传输 + 共享内存
export UCX_NET_DEVICES=mlx5_0:1
export OMPI_MCA_btl=^openib  # 禁用较慢的 openib BTL,使用 UCX
export OMPI_MCA_pml=ucx

6. OFED 配置要点

MLNX_OFED 驱动是 NVIDIA IB 网卡的官方软件栈,安装后提供 ibv_devinfoib_write_bwib_read_lat 等诊断工具:

# 检查 HCA 状态
ibv_devinfo -d mlx5_0

# 带宽测试(服务端/客户端)
ib_write_bw -d mlx5_0 --ibport 1
ib_write_bw -d mlx5_0 <server_ip> --ibport 1

# 延迟测试
ib_read_lat -d mlx5_0
ib_read_lat <server_ip>

常见问题排查

  1. ibv_devinfo 报错 no devices found:检查驱动加载 lsmod | grep mlx5,确认 PCIe 设备枚举正常。
  2. 带宽远低于标称值:检查 PCIe 链路宽度与速率(Gen4 x16 需求),确认 NUMA 亲和性。
  3. 拥塞导致长尾延迟:监控交换机端口计数器(perfquery),确认无 PFC 风暴。

RDMA 网络是当代 HPC 集群的神经中枢。从 IB HCA 的 verbs 编程到底层 MPI 的透明加速,深入理解 RDMA 语义与调优手段,才能将 InfiniBand 的硬件潜力充分发挥。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「hpc」更多文章

  1. Slurm 集群调度系统深度解析与实战
  2. Roofline 性能模型:判定性能瓶颈与优化方向
  3. ROCm HIP GPU 编程实战