1. InfiniBand 架构概览
InfiniBand (IB) 是为 HPC 和数据中心设计的高性能互连技术,核心优势在于低延迟(亚微秒级)、高带宽(当前 NDR 达 400Gb/s)以及内核旁路(Kernel Bypass)。其基本拓扑单元由三类设备构成:
| 组件 | 全称 | 功能描述 |
|---|---|---|
| HCA | Host Channel Adapter | 终端节点上的 IB 网卡,提供 verbs 接口 |
| TCA | Target Channel Adapter | 较少使用,面向 I/O 设备(如存储) |
| Switch | IB 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
| 特性 | RoCEv1 | RoCEv2 | 原生 IB |
|---|---|---|---|
| L3 协议 | Ethernet Layer 2 | UDP/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_devinfo、ib_write_bw、ib_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>
常见问题排查:
ibv_devinfo报错no devices found:检查驱动加载lsmod | grep mlx5,确认 PCIe 设备枚举正常。- 带宽远低于标称值:检查 PCIe 链路宽度与速率(Gen4 x16 需求),确认 NUMA 亲和性。
- 拥塞导致长尾延迟:监控交换机端口计数器(
perfquery),确认无 PFC 风暴。
RDMA 网络是当代 HPC 集群的神经中枢。从 IB HCA 的 verbs 编程到底层 MPI 的透明加速,深入理解 RDMA 语义与调优手段,才能将 InfiniBand 的硬件潜力充分发挥。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。