UCX 官方文档和 InfiniBand 架构知识整理

InfiniBand (IB) 与 UCX 知识汇总

整理自有道云笔记,结合专业知识补充完善。


目录

  1. [InfiniBand 基础概念](#InfiniBand 基础概念)
  2. [UCX (Unified Communication X) 框架](#UCX (Unified Communication X) 框架)
  3. [UCX 传输层 (Transport Layer)](#UCX 传输层 (Transport Layer))
  4. [UCX 关键环境变量](#UCX 关键环境变量)
  5. [MPI 与 IB/UCX 的集成](#MPI 与 IB/UCX 的集成)
  6. [SLURM + PMIx 配置 IB/UCX](#SLURM + PMIx 配置 IB/UCX)
  7. [IB 网卡管理与维护](#IB 网卡管理与维护)
  8. [RDMA 连通性测试](#RDMA 连通性测试)
  9. [IB 性能测试工具](#IB 性能测试工具)
  10. [IB 性能调优](#IB 性能调优)
  11. [RoCE 网络](#RoCE 网络)
  12. IPoIB (IP over InfiniBand)
  13. [NUMA 绑定与进程亲和性](#NUMA 绑定与进程亲和性)
  14. 常见问题排查

1. InfiniBand 基础概念

1.1 什么是 InfiniBand

InfiniBand (IB) 是一种高性能、低延迟的串行通信标准,广泛用于 HPC(高性能计算)和 AI 训练集群。它提供了:

  • 高带宽:HDR(200 Gbps)、NDR(400 Gbps)、XDR(800 Gbps)
  • 低延迟:亚微秒级端到端延迟
  • RDMA 支持:远程直接内存访问,零拷贝传输
  • 硬件卸载:协议处理由 HCA(Host Channel Adapter)完成,减少 CPU 开销

发展历程与行业背景

InfiniBand 技术起源于 1999 年由 Compaq、Intel、Microsoft 等公司发起的 InfiniBand Trade Association (IBTA)。最初目标是替代 PCI 总线,后来演变为高性能互连标准。关键里程碑:

时间 里程碑
2001 IBTA 发布 1.0 规范,SDR 10 Gbps
2003 Top500 榜单首次出现 IB 互联的超级计算机
2005 Mellanox 推出首个商用 InfiniHost HCA
2010 QDR (40 Gbps) 成为 HPC 主流
2014 FDR (56 Gbps) 广泛部署
2016 EDR (100 Gbps) 进入市场
2019 HDR (200 Gbps) 随 DGX-2 等 AI 系统普及
2021 NDR (400 Gbps) 发布,NVIDIA 收购 Mellanox 后加速整合
2024 XDR (800 Gbps) 规格确定,面向下一代 AI 集群

为什么 IB 在 AI 时代重新崛起

随着大模型训练对通信带宽的需求呈指数级增长,InfiniBand 凭借其原生 RDMA 支持、亚微秒级延迟和硬件级拥塞控制,成为 AI 训练集群的首选互联方案。NVIDIA DGX SuperPOD、Microsoft Azure ND 系列等顶级 AI 基础设施均采用 IB 作为骨干网络。据 Top500 统计,2024 年 11 月榜单中超过 50% 的超级计算机使用 InfiniBand 互联,在百亿亿次(Exascale)系统中占比更高。

1.2 IB 网络拓扑

组件 说明
HCA (Host Channel Adapter) IB 网卡,安装在计算节点上
Switch IB 交换机,常见厂商 Mellanox/NVIDIA
SM (Subnet Manager) 子网管理器,负责 LID 分配和路由表
Cable 铜缆(短距离)或光缆(长距离),如 QSFP56/QSFP-DD

1.3 IB 速率演进

速率等级 单端口带宽 信号编码
SDR 10 Gbps 8B/10B
DDR 20 Gbps 8B/10B
QDR 40 Gbps 8B/10B
FDR 56 Gbps 64B/66B
EDR 100 Gbps 64B/66B
HDR 200 Gbps PAM4
NDR 400 Gbps PAM4
XDR 800 Gbps PAM4

1.4 IB 协议栈

复制代码
┌─────────────────────────────────┐
│        应用层 (MPI/NCCL)        │
├─────────────────────────────────┤
│       UCP (UCX Protocol)        │  ← 高级通信协议
├─────────────────────────────────┤
│       UCT (UCX Transport)       │  ← 传输层抽象
├──────────────┬──────────────────┤
│  RC/UD/DC    │   TCP/SHM/...   │  ← 传输层实现
├──────────────┴──────────────────┤
│    Verbs API (libibverbs)       │  ← 内核/用户态接口
├─────────────────────────────────┤
│    HCA Hardware (mlx5)          │  ← 网卡硬件
└─────────────────────────────────┘

2. UCX (Unified Communication X) 框架

2.1 什么是 UCX

UCX 是一个开源的通信框架,由 Mellanox(现 NVIDIA)主导开发,旨在为 HPC、AI、存储等场景提供统一的高性能通信接口。

2.2 UCX 架构

UCX 分为三层:

层次 全称 功能
UCS Unified Communication Services 基础服务层(内存管理、线程池、数据结构)
UCT Unified Communication Transport 传输层抽象,屏蔽底层网络差异
UCP Unified Communication Protocol 高层通信协议(tag match、RMA、AM、stream)

2.3 UCX 通信模型

复制代码
应用层 (MPI / NCCL / UCC)
        │
        ▼
     UCP  ──── 高级 API:ucp_tag_send, ucp_rma_put, ucp_am_send
        │
        ▼
     UCT  ──── 传输抽象:uct_ep_put, uct_ep_am_short, uct_ep_get
        │
   ┌────┴────┬────────┬────────┐
   ▼         ▼        ▼        ▼
  RC         UD       DC       TCP/SHM/...
 (可靠连接) (无连接) (动态连接) (TCP/共享内存)

2.4 UCX 安装与编译

bash 复制代码
# 从源码编译
git clone https://github.com/openucx/ucx.git
cd ucx
./autogen.sh
./configure --prefix=/opt/ucx \
            --with-cuda=/usr/local/cuda \
            --with-verbs \
            --with-rdmacm \
            --enable-mt
make -j$(nproc)
make install

# 验证安装
ucx_info -v

3. UCX 传输层 (Transport Layer)

3.1 传输层对照表

传输层 全称 特点 适用场景 UCX 实现
rc Reliable Connection 面向连接、可靠传输、基于 RDMA CM 需要高可靠性和数据完整性的大消息传输 rc_verbs / rc_mlx5
ud Unreliable Datagram 无连接、不可靠、基于 Datagram 对可靠性要求不高,追求低延迟和高吞吐(如控制消息、小消息广播) ud_verbs / ud_mlx5
dc Dynamic Connection 动态连接管理,按需建立/断开连接 大规模集群(数千节点),减少连接数开销 dc_mlx5
tcp TCP 基于 TCP/IP 的传输 IB/RoCE 不可用时的回退方案 tcp
sm/shm Shared Memory 同节点进程间共享内存通信 同一物理节点内的 MPI 进程通信 posix / sysv / xpmem / knem / cma
self Self 同进程内通信 同一进程内的线程通信 self

3.2 传输层选择建议

bash 复制代码
# 推荐:IB 网络下最常用的组合
export UCX_TLS=self,sm,rc
# self: 同进程通信
# sm:   同节点共享内存
# rc:   跨节点 RDMA 可靠连接

# 大规模集群(>1000 节点)推荐
export UCX_TLS=self,sm,dc
# dc 可以减少连接数,避免 QP 资源耗尽

# 混合模式(兼容 RoCE 和 IB)
export UCX_TLS=self,sm,rc,ud

# 强制仅使用 IB
export UCX_TLS=ib

3.3 rc vs dc vs ud 对比

特性 rc (Reliable Connection) dc (Dynamic Connection) ud (Unreliable Datagram)
连接方式 静态预建立 按需动态建立 无连接
可靠性 保证有序可靠交付 保证有序可靠交付 不保证交付
QP 资源消耗 高(每对一QP) 低(共享 QP) 低(单个 QP)
延迟 略高(需建连) 最低
可扩展性 差(N² QP)
消息大小限制 受 MTU 限制
典型使用 默认首选 大规模集群 控制消息/心跳

4. UCX 关键环境变量

4.1 传输层控制

变量 说明 示例
UCX_TLS 指定使用的传输层 export UCX_TLS=self,sm,rc
UCX_NET_DEVICES 指定使用的网络设备 export UCX_NET_DEVICES=mlx5_0:1,mlx5_2:1
UCX_IB_GID_INDEX 指定 IB GID 索引(RoCE v2 通常设为 3) export UCX_IB_GID_INDEX=3
UCX_IB_SL 指定 Service Level(0-15) export UCX_IB_SL=0
UCX_IB_TC 指定 Traffic Class export UCX_IB_TC=8

4.2 性能调优参数

变量 说明 推荐值
UCX_IB_INLINE 内联发送的小消息大小(字节) 8 (HDR) / 16 (NDR)
UCX_IB_RC_FC_ENABLE 启用流控 y(默认开启)
UCX_IB_RETRY_COUNT 重试次数 13(默认)
UCX_IB_TIMEOUT 超时值(log2) 20(约 4 秒)
UCX_IB_ROCE_DSCP RoCE DSCP 优先级 46 (EF)
UCX_MAX_EAGER_LANES 多轨道急切发送 2(多 HCA 时)
UCX_MAX_RNDV_LANES 多轨道 Rendezvous 2(多 HCA 时)
UCX_RNDV_THRESH 切换 eager/rendezvous 的阈值 8192(默认)

4.3 调试参数

bash 复制代码
# 启用 UCX 日志
export UCX_LOG_LEVEL=debug          # 可选: trace, debug, info, warn, error
export UCX_LOG_LEVEL=data           # 数据层面日志
export UCX_LOG_FILE=/tmp/ucx_%p.log # 日志文件(%p = PID)

# 启用 IB 统计
export UCX_IB_STATS=1

# 打印 UCX 配置
ucx_info -c

5. MPI 与 IB/UCX 的集成

5.1 HPC-X MPI(Mellanox 优化版)

bash 复制代码
# 基础使用:指定 IB 设备和传输层
mpirun -np 128 --hostfile xaa --allow-run-as-root \
  -x UCX_NET_DEVICES=mlx5_0:1 \
  -x UCX_TLS=ib \
  hostname

# 查看 IB 网卡挂载的 NUMA 节点
hwloc-ls

# 绑定 NUMA 节点运行
mpirun -np 2 --allow-run-as-root \
  -H compute3:1,compute4:1 \
  numactl --cpunodebind=2 --membind=2 ./osu_bibw

mpirun -np 4 --allow-run-as-root \
  --hostfile nodelist \
  numactl --cpunodebind=2 --membind=2 ./osu_alltoall

hostfile 示例:

复制代码
compute1:1
compute2:1
compute3:1
compute4:1

5.2 Intel MPI

bash 复制代码
# 使用 OFI 传输 + UCX
mpirun -np 64 \
  -genv I_MPI_FABRICS ofi \
  -genv UCX_TLS rc \
  -machinefile xaf \
  hostname

# Intel MPI 绑定核心
mpirun -np 16 -host node1 numactl -N 0,1 ./program : \
  -np 16 -host node2 numactl -N 0,1 ./program : \
  -np 16 -host node3 numactl -N 0,1 ./program : \
  -np 16 -host node4 numactl -N 0,1 ./program

5.3 mpirun 进程绑定

bash 复制代码
# 关键参数说明
--map-by ppr:18:node      # 每个节点启动 18 个进程
--map-by socket:pe=4      # 每个 socket 分配 4 个核心
--report-bindings          # 打印进程绑定的详细信息
--bind-to core             # 绑定到核心(默认)
--bind-to numa             # 绑定到 NUMA 节点
--rank-by slot             # 按 slot 排序 rank

# 完整示例
mpirun -np 18 \
  --map-by ppr:18:node \
  --report-bindings \
  /public/software/benchmarks_for_test/osu_hpcx_v2.4.0/libexec/osu-micro-benchmarks/mpi/collective/osu_alltoall \
  -m 2:200000000

5.4 Intel MPI 绑核脚本(按节点名动态绑定)

bash 复制代码
#!/bin/bash
# 获取当前节点名称
node=$(hostname -s)

# 根据节点名称设置 numactl 参数
if [[ $node == "node1" ]]; then
  numactl -N 0,1 "$@"
elif [[ $node == "node2" ]]; then
  numactl -N 0,1 "$@"
else
  numactl -N 0,1 "$@"
fi

6. SLURM + PMIx 配置 IB/UCX

6.1 PMIx 直接连接配置

bash 复制代码
# 启用 PMIx 直接连接(绕过 PMIx 服务器的中转)
export SLURM_PMIX_DIRECT_CONN="true"
# 指示 SLURM 组件使用直接连接的方式建立 MPI 进程之间的通信

# 启用 UCX 直接连接
export SLURM_PMIX_DIRECT_CONN_UCX="true"
# 指示 PMIx 在可能的情况下使用 UCX,走 IB 网络直接连接

# 启用早期直接连接
export SLURM_PMIX_DIRECT_CONN_EARLY="true"
# 指示 MPI 作业在启动早期就尝试建立直接连接

# 指定 UCX 传输层
export UCX_TLS=self,dc
# self: 优先同一节点内进程/线程数据传输
# dc:   直接连接或动态链接

# 指定网络设备
export UCX_NET_DEVICES=mlx5_0:1

6.2 srun 指定 IB/UCX

bash 复制代码
# srun 运行 MPI 作业
srun -N 4 -n 128 \
  --mpi=pmix_v3 \
  -x UCX_TLS=self,sm,rc \
  -x UCX_NET_DEVICES=mlx5_0:1 \
  ./my_mpi_program

6.3 SLURM 作业脚本示例

bash 复制代码
#!/bin/bash
#SBATCH -J ib_test
#SBATCH -N 4
#SBATCH -n 128
#SBATCH --gres=gpu:8
#SBATCH -p compute

# IB/UCX 环境变量
export UCX_TLS=self,sm,rc
export UCX_NET_DEVICES=mlx5_0:1,mlx5_2:1
export UCX_IB_GID_INDEX=3

# PMIx 直接连接
export SLURM_PMIX_DIRECT_CONN="true"
export SLURM_PMIX_DIRECT_CONN_UCX="true"

# 运行
srun --mpi=pmix_v3 ./my_application

7. IB 网卡管理与维护

7.1 IB 服务管理

bash 复制代码
# 启动/重启 IB 驱动
/etc/init.d/openibd restart
# 或
systemctl restart openibd

# 检查子网管理器状态
systemctl status opensm

# 查看 IB 设备列表
ibstat
ibv_devices
ibv_devinfo

7.2 查看 IB 网口信息

bash 复制代码
# 查看 IB 网口与以太网口的映射关系
ibdev2netdev
# 输出示例:mlx5_0 port 1 ==> enp193s0f0np0 (Up)

# 查看 IB 设备详细信息
ibstat mlx5_0
# 查看端口状态、速率、LID、GID 等

# 查看 IB 端口 GID 表
show_gids
# 或
ibv_devinfo -d mlx5_0 -v | grep GID

7.3 刷写 IB 固件

bash 复制代码
# 使用 flint 工具刷固件
flint -d mlx5_0 -y -i /root/firmware.bin b

# 查看当前固件版本
flint -d mlx5_0 q

# 刷写完成后重置 IB 卡
mlxfwreset -d mlx5_0 -y reset

7.4 IB 网卡配置

bash 复制代码
# 关闭 IB 网卡宽松排序(提升小消息性能)
mlxconfig -d mlx5_0 -y s PCI_WR_ORDERING=0

# 查看所有 IB 网卡配置
mlxconfig -d mlx5_0 q

# 设置 IB 端口速率模式
mlxconfig -d mlx5_0 -y s LINK_TYPE_P1=1   # 1=IB, 2=ETH

# 重启后生效
mlxfwreset -d mlx5_0 -y reset

7.5 强制关机(紧急情况)

bash 复制代码
# 紧急强制重启(慎用!)
echo b > /proc/sysrq-trigger

8. RDMA 连通性测试

8.1 udaddy --- 测试 RDMA 基本连通性

基于 C/S 模式,测试同一组内不同交换机下的两个 RoCE 端口 RDMA 网络互通性。

bash 复制代码
# 服务端(监听)
udaddy -b 11.11.11.3

# 客户端(连接)
udaddy -s 11.11.11.3 -f 11.11.11.5

8.2 rping --- 测试跨交换机 RDMA 连通性

基于 C/S 模式,测试跨组交换机的两个 RoCE 端口网络互通性(类似 ICMP ping 的 RDMA 版本)。

bash 复制代码
# 服务端
rping -s -C 10 -v -a 11.11.11.3

# 客户端
rping -c -a 11.11.11.3 -I 11.11.11.5 -C 10 -v

参数说明:

  • -s:服务端模式
  • -c:客户端模式
  • -C <count>:发送次数
  • -v:详细输出
  • -a <addr>:服务端地址
  • -I <addr>:客户端源地址

8.3 ibping --- IB 层 ping

bash 复制代码
# 服务端
ibping -S

# 客户端
ibping -G <dest_GID>
# 或
ibping -L <dest_LID>

9. IB 性能测试工具

9.1 ib_write_bw --- IB 带宽测试

测试多机之间网卡传输速率。

bash 复制代码
# 服务端(主节点)
ib_write_bw --ib-dev=mlx5_1 --connection=RC --qp=32

# 客户端(工作节点)
ib_write_bw --ib-dev=mlx5_1 <server_ip> \
  --CPU-freq \
  --report_gbits \
  --duration=10 \
  --connection=RC \
  --mtu=4096 \
  --qp=32 \
  --size=65536

常用参数:

参数 说明
--ib-dev=<dev> 指定 IB 设备
--connection=<type> 连接类型:RC, UC, UD, XRC, DCINI, DCT
--qp=<num> QP 数量
--size=<bytes> 消息大小
--mtu=<bytes> MTU 大小:256, 512, 1024, 2048, 4096
--duration=<sec> 测试持续时间
--report_gbits 以 Gbit/s 报告带宽
--CPU-freq 打印 CPU 频率

其他 ib_* 测试工具:

bash 复制代码
ib_write_lat      # 写延迟测试
ib_read_bw        # 读带宽测试
ib_read_lat       # 读延迟测试
ib_send_bw        # 发送带宽测试
ib_send_lat       # 发送延迟测试
ib_atomic_bw      # 原子操作带宽测试
ib_atomic_lat     # 原子操作延迟测试

9.2 ucx_perftest --- UCX 层性能测试

bash 复制代码
# 单节点启动服务端
ucx_perftest -t tag_bw -d mlx5_0

# 另一节点启动客户端连接
ucx_perftest -t tag_bw -d mlx5_0 <server_ip>
选项 说明
-t <test> 测试类型:tag_bw, tag_lat, ucp_am_bw, ucp_am_lat, uct_am_short, allreduce
-s <size> 消息大小(字节)
-n <iterations> 迭代次数
-D <duration> 测试持续时间(秒)
-x <warmup> 预热次数(默认 10)
-b <buffer> 缓冲区大小(字节)
-d <device> 网络设备(如 mlx5_0:1
-c <mode> 通信模式(active / passive
-T <threads> 线程数

9.3 OSU Micro-Benchmarks

bash 复制代码
# 点对点带宽
mpirun -np 2 --hostfile hosts numactl --cpunodebind=2 --membind=2 ./osu_bw

# 点对点延迟
mpirun -np 2 --hostfile hosts numactl --cpunodebind=2 --membind=2 ./osu_latency

# 双向带宽
mpirun -np 2 --hostfile hosts numactl --cpunodebind=2 --membind=2 ./osu_bibw

# 集合通信
mpirun -np 128 --hostfile hosts ./osu_alltoall
mpirun -np 128 --hostfile hosts ./osu_allreduce

9.4 mlnx_perf --- Mellanox 性能监控

bash 复制代码
# 查看 IB 网口流量
mlnx_perf -i enp193s0f0np0 | grep -i rdma

# 查看 IB 端口统计
mlnx_perf -i ib1

# 查看所有端口
mlnx_perf -a

10. IB 性能调优

10.1 系统级调优

bash 复制代码
# 关闭 CPU 节能模式
echo performance > /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

# 关闭中断均衡
systemctl stop irqbalance

# 设置 hugepage(大页内存)
echo 32768 > /proc/sys/vm/nr_hugepages
mount -t hugetlbfs hugetlbfs /dev/hugepages

# 关闭 IOMMU(测试环境)
# 在 /etc/default/grub 中添加 intel_iommu=off

# 关闭 SELinux
setenforce 0

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

10.2 IB 网络调优

bash 复制代码
# 启用 Adaptive Routing(自适应路由)
mlxconfig -d mlx5_0 -y s ADAPTIVE_ROUTING=1

# 设置拥塞控制算法(DCQCN)
# 在交换机端口和 HCA 上都需要配置
cma_roce_mode -d mlx5_0 -m 2   # RoCE v2

# 调整 QP 超时
export UCX_IB_TIMEOUT=22

# 调整重试次数
export UCX_IB_RETRY_COUNT=7

# 启用 GPUDirect RDMA(GPU 集群)
export UCX_IB_GPU_DIRECT_RDMA=y

10.3 多轨道 IB(多 HCA)

bash 复制代码
# 使用多个 IB 设备
export UCX_NET_DEVICES=mlx5_0:1,mlx5_2:1
export UCX_IB_PCI_BW=mlx5_0:100Gbs,mlx5_2:100Gbs

# 多轨道传输
export UCX_MAX_EAGER_LANES=2
export UCX_MAX_RNDV_LANES=2

10.4 NUMA 感知调优

bash 复制代码
# 查看 NUMA 拓扑
numactl -H
hwloc-ls
lstopo

# 查看 IB 网卡的 NUMA 节点
cat /sys/class/infiniband/mlx5_0/device/numa_node

# 绑定到 IB 网卡所在的 NUMA 节点
numactl -N <numa_node> -m <numa_node> ./my_program

11. RoCE 网络

11.1 什么是 RoCE

RoCE (RDMA over Converged Ethernet) 是在以太网上运行 RDMA 的协议:

版本 说明 特点
RoCE v1 基于以太网二层 不可路由,限同一 VLAN
RoCE v2 基于 UDP/IP 可路由,跨子网,主流方案

11.2 RoCE 与 InfiniBand 对比

特性 InfiniBand RoCE v2
网络类型 IB 专用网络 以太网
协议栈 IB 协议 UDP/IP + RDMA
交换机组网 IB 交换机 以太网交换机(需 PFC/ECN)
可扩展性 强(SM 管理) 中等
成本 高(专用硬件) 较低(复用以太网)
GID_INDEX 不适用 需要配置(通常为 3)

11.3 RoCE 配置要点

bash 复制代码
# 设置 RoCE 模式为 v2
cma_roce_mode -d mlx5_0 -m 2

# 配置 GID INDEX
export UCX_IB_GID_INDEX=3

# 配置 DSCP 优先级(DCQCN 拥塞控制)
export UCX_IB_ROCE_DSCP=46
export UCX_IB_TC=8

# 交换机端需要配置
# 1. PFC (Priority Flow Control) - 无损以太网
# 2. ECN (Explicit Congestion Notification) - 拥塞通知
# 3. DCQCN - 数据中心量化拥塞通知

11.4 RoCE 连通性检查

bash 复制代码
# 检查 RDMA 设备
ibv_devices
ibv_devinfo

# 检查 RoCE 模式
cma_roce_mode -d mlx5_0

# 检查 GID 表
show_gids
# RoCE v2 的 GID 格式类似 IPv4 地址

# 测试 RDMA 连通
udaddy -b <local_ip>         # 服务端
udaddy -s <server_ip> -f <local_ip>  # 客户端

rping -s -C 10 -v -a <local_ip>      # 服务端
rping -c -a <server_ip> -I <local_ip> -C 10 -v  # 客户端

12. IPoIB (IP over InfiniBand)

12.1 什么是 IPoIB

IPoIB 是在 InfiniBand 网络上封装 IP 数据包的协议,让传统的 TCP/IP 应用可以直接在 IB 网络上运行。

优点

  • 兼容性好,无需修改应用
  • 部署简单

缺点

  • 性能远低于 RDMA(有内核协议栈开销)
  • 延迟高(需要经过 Linux 网络栈)

12.2 IPoIB 模式

模式 说明 性能
datagram 无连接,每个包独立处理 较低延迟,适合小消息
connected 面向连接,建立可靠通道 较高带宽,适合大消息
bash 复制代码
# 切换 IPoIB 模式
echo datagram > /sys/class/net/ib0/mode
# 或
echo connected > /sys/class/net/ib0/mode

# 查看当前模式
cat /sys/class/net/ib0/mode

# 配置 IPoIB 接口
ip addr add 192.168.1.100/24 dev ib0
ip link set ib0 up

12.3 RDMA vs IPoIB 性能对比

场景 RDMA (原生) IPoIB
延迟 ~1 μs ~10-30 μs
带宽 接近线速 约为线速的 50-70%
CPU 占用 极低(硬件卸载) 较高(内核栈处理)
适用场景 MPI、NCCL、存储 SSH、NFS、管理网络

13. NUMA 绑定与进程亲和性

13.1 为什么 NUMA 绑定重要

在多路服务器上,CPU 和内存分为多个 NUMA 节点。如果 MPI 进程运行在离 IB 网卡较远的 NUMA 节点上,数据需要经过 QPI/UPI 互联总线,增加延迟。

13.2 NUMA 拓扑查看

bash 复制代码
# 查看 NUMA 拓扑
numactl -H
# 输出示例:
# available: 4 nodes (0-3)
# node 0 cpus: 0 1 2 ... 23
# node 0 size: 192000 MB
# node distances:
# node   0   1   2   3
#   0:  10  21  31  31
#   1:  21  10  31  31

# 查看 IB 网卡挂载位置
cat /sys/class/infiniband/mlx5_0/device/numa_node

# 图形化查看
hwloc-ls
lstopo

13.3 绑定策略

bash 复制代码
# 方式一:numactl 绑定
numactl --cpunodebind=2 --membind=2 ./my_program

# 方式二:taskset 绑定到特定核心
taskset -c 48-71 ./my_program

# 方式三:mpirun 绑定
mpirun -np 24 --map-by numa --report-bindings ./my_program

# 方式四:按节点脚本绑定
#!/bin/bash
node=$(hostname -s)
if [[ $node == "node1" ]]; then
  numactl -N 0,1 "$@"
elif [[ $node == "node2" ]]; then
  numactl -N 0,1 "$@"
fi

14. 常见问题排查

14.1 IB 端口状态异常

bash 复制代码
# 检查端口状态
ibstat mlx5_0
# 正常状态:State: Active, Physical state: LinkUp

# 如果端口 Down
/etc/init.d/openibd restart
systemctl restart opensm

# 检查线缆
ibdiagnet    # Mellanox 网络诊断工具

14.2 UCX 传输层选择失败

bash 复制代码
# 查看 UCX 可用传输层
ucx_info -d

# 查看 UCX 选择的传输层
export UCX_LOG_LEVEL=info
# 运行程序后查看日志

# 强制指定传输层
export UCX_TLS=self,sm,rc

14.3 MPI 进程无法建立连接

bash 复制代码
# 检查防火墙
systemctl status firewalld
iptables -L

# 检查 SSH 免密
ssh compute2 hostname

# 检查 hostfile
cat hostfile

# 使用 verbose 模式
mpirun -np 2 --hostfile hosts -x UCX_LOG_LEVEL=debug ./program

14.4 带宽不达标

排查清单:

  1. 确认 IB 速率协商正确:ibstat 检查 rate
  2. 确认 NUMA 绑定:进程要跑在 IB 网卡所在 NUMA 节点
  3. 确认 MTU:ib_write_bw --mtu=4096
  4. 检查交换机端口速率
  5. 检查线缆质量
  6. 关闭节能模式
  7. 使用 ib_write_bw / ucx_perftest 隔离网络层问题

14.5 常用诊断命令速查

命令 用途
ibstat IB 端口状态
ibv_devices IB 设备列表
ibv_devinfo IB 设备详细信息
ibdev2netdev IB 到以太网映射
show_gids GID 表
hwloc-ls / lstopo NUMA 拓扑
numactl -H NUMA 节点信息
mlnx_perf Mellanox 性能计数器
ucx_info -v UCX 版本和配置
ucx_info -d UCX 可用传输层
flint IB 固件管理
mlxconfig IB 网卡配置
mlxfwreset IB 网卡重置
ibdiagnet 网络诊断
cma_roce_mode RoCE 模式设置
相关推荐
快乐肚皮1 小时前
【无标题】
服务器·网络·tcp/ip
装不满的克莱因瓶2 小时前
学习 LLM 的函数回调及格式化输出,让 LLM 拥有更强的能力
人工智能·ai·大模型·llm·agent·智能体
lifallen2 小时前
第六章 MCP:把能力接入协议化
人工智能·ai·语言模型·ai编程
zhangfeng11333 小时前
车载gpu 飞地 只保存密钥 不保存 权重 Orin确实有TEE安全飞地(TSEC/OP-TEE)
服务器·网络·人工智能·安全·transformer·芯片
飞Link3 小时前
【TCP\UDP与可靠传输】UDP 的“简单粗暴”和它真正适用的场景
网络·网络协议·tcp/ip·udp
CoderJia程序员甲3 小时前
GitHub 热榜项目 - 周榜(2026-06-06)
ai·大模型·llm·github
Z-D-K3 小时前
考验AI的“自我和意识“-AI对《红楼梦》后40回的改写(16)
人工智能·ai·aigc·交互·agi
weixin_520649873 小时前
通信与TCP核心知识
服务器·网络·tcp/ip
财经资讯数据_灵砚智能3 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年6月6日
大数据·人工智能·python·ai·信息可视化·自然语言处理·灵砚智能