InfiniBand 网络理论与实践
InfiniBand 网络理论与实践
术语定义
在深入了解 InfiniBand 技术之前,我们先列举一些关键术语:
| IB | |||
| RDMA | |||
| HCA | |||
| SM | |||
| QP | |||
| VL | |||
| SL | |||
| P_Key | |||
| LID | |||
| GUID | |||
| MTU | |||
| FEC | |||
| RoCE | |||
| OFED |
目录
• InfiniBand 网络理论与实践 • 术语定义 • 目录 • 1. InfiniBand 原理 • 1.1 InfiniBand 概述 • 1.2 核心技术特性 • 1.2.1 性能指标 • 1.2.2 带宽演进历史 • 1.3 架构原理 • 1.3.1 InfiniBand 分层协议模型 • 1.3.2 RDMA 技术 • 1.3.3 虚拟通道 (Virtual Lanes) • 1.4 网络拓扑 • 1.4.1 支持的拓扑结构 • 1.4.2 子网管理 • 1.5 与以太网和 RoCE 的对比 • 1.6 高可用与容错机制 • 2. InfiniBand 网卡 • 2.1 主要厂商和产品 • 2.1.1 NVIDIA (原 Mellanox) • 2.1.2 Intel • 2.1.3 其他厂商 • 2.2 网卡架构 • 2.2.1 硬件组件 • 2.2.2 软件栈 • 2.3 VPI 技术 • 2.3.1 Virtual Protocol Interconnect • 2.3.2 协议切换 • 2.4 性能特性 • 2.4.1 延迟优化 • 2.4.2 带宽优化 • 3. InfiniBand 网卡配置 • 3.1 驱动程序安装 • 3.1.1 Ubuntu/Debian 系统 • 3.1.2 CentOS/RHEL 系统 • 3.2 网络接口配置 • 3.2.1 IPoIB 配置 • 3.2.2 RoCE 配置 • 3.3 性能优化配置 • 3.3.1 系统参数优化 • 3.3.2 CPU 亲和性配置 • 3.3.3 内存大页配置 • 3.4 安全配置 • 3.4.1 防火墙配置 • 3.4.2 访问控制 • 4. InfiniBand 网卡相关命令 • 4.1 基础诊断命令 • 4.1.1 设备发现和状态查询 • 4.1.2 网络拓扑发现 • 4.1.3 连通性测试 • 4.2 性能监控命令 • 4.2.1 性能计数器 • 4.2.2 错误检查 • 4.2.3 链路状态和性能分析 • 4.3 配置管理命令 • 4.3.1 子网管理 • 4.3.2 虚拟化配置 • 4.3.3 固件管理 • 4.4 性能测试工具详解 • 4.4.1 带宽测试 (ib_write_bw) • 4.4.2 延迟测试 (ib_send_lat) • 4.4.3 RDMA 性能测试 • 4.4.4 多连接并发测试 • 4.4.5 性能基准和调优建议 • 4.5 故障排查命令 • 4.5.1 诊断脚本 • 4.5.2 日志分析 • 5. GPU 场景下 InfiniBand 网卡检查和测试 • 5.1 GPU 与 InfiniBand 集成 • 5.1.1 GPUDirect RDMA • 5.1.2 系统要求 • 5.2 环境检查和配置 • 5.2.1 GPU 环境检查 • 5.2.2 NCCL 环境配置 • 5.2.3 自动化检查脚本 • 5.3 性能测试 • 5.3.1 基础性能测试 • 5.3.2 NCCL 性能测试 • 5.3.3 自定义 NCCL 测试脚本 • 5.4 故障排查 • 5.4.1 常见问题和解决方案 • 5.4.2 性能调优建议 • 5.5 监控和维护 • 5.5.1 实时监控脚本 • 5.5.2 定期健康检查 • 6. 总结 • 6.1 关键要点 • 6.2 最佳实践建议 • 7. 推荐参考资料 • 7.1 官方文档和标准 • 7.2 开源社区资源 • 7.3 技术白皮书和研究论文 • 7.4 实用工具和脚本 • 7.5 培训和认证 • 7.6 社区支持
1. InfiniBand 原理
1.1 InfiniBand 概述
InfiniBand (IB) 是一种高性能、低延迟的网络互连技术,专为高性能计算 (HPC)、数据中心和企业级应用设计。InfiniBand 架构由 InfiniBand Trade Association (IBTA) 标准化,提供了比传统以太网更优越的性能特性。
1.2 核心技术特性
1.2.1 性能指标
根据 IBTA 规范,InfiniBand 提供以下性能特性:
• 高带宽: 支持从 2.5 Gbps (SDR) 到 600 Gbps (NDR) 的数据传输速率 • 超低延迟: 端到端延迟低至 0.5 微秒 • 高可靠性: 硬件级别的错误检测和纠正机制 • 可扩展性: 支持数万个节点的大规模集群部署
1.2.2 带宽演进历史
说明:
• 单通道速率: 每个物理通道的原始数据速率 • x4 链路: InfiniBand 标准链路配置,使用 4 个物理通道 • 有效带宽: 扣除编码开销后的实际可用带宽 • 编码效率: 8b/10b 编码效率为 80%,64b/66b 编码效率为 96.97%
数据来源: InfiniBand Trade Association (IBTA) 官方规范 v1.4/v1.5
1.3 架构原理
1.3.1 InfiniBand 分层协议模型
根据 InfiniBand Trade Association (IBTA) 架构规范,InfiniBand 采用分层架构设计,包含以下层次:
1. 物理层 (Physical Layer)
• 信号传输: 负责电气信号的编码、调制和传输 • 连接介质: 支持铜缆 (DAC/AOC) 和光纤 (SR4/LR4) 连接 • 链路训练: 自动协商速率、FEC (Forward Error Correction) 和通道参数 • 错误检测: 硬件级别的 BER (Bit Error Rate) 监控和纠正
• 可靠传输: 基于 ACK/NAK 机制的数据包确认和重传 • 流量控制: 基于信用 (Credit) 的端到端流控机制 • 虚拟通道: 支持最多 16 个 VL (Virtual Lanes) 实现 QoS 隔离 • 拥塞管理: 硬件级别的拥塞控制和避免机制
• 路由功能: 基于 LID (Local Identifier) 的包转发 • 子网管理: 通过 SMP (Subnet Management Packets) 进行拓扑发现 • 分区管理: 基于 P_Key (Partition Key) 的网络隔离 • 服务级别: SL (Service Level) 到 VL 的映射管理
• 队列对管理: QP (Queue Pairs) 的创建、连接和销毁 • RDMA 操作: 支持 Send/Receive、Read、Write、Atomic 操作 • 消息排序: 保证同一 QP 内消息的有序传输 • 错误恢复: 传输级别的超时和重传机制
1.3.2 RDMA 技术
Remote Direct Memory Access (RDMA) 是 InfiniBand 的核心特性,实现了应用程序间的直接内存访问:
核心特性:
• 零拷贝传输 (Zero Copy): 数据直接在应用程序内存间传输,无需内核缓冲区拷贝 • 内核旁路 (Kernel Bypass): 绕过操作系统内核,减少上下文切换开销 • 硬件卸载 (Hardware Offload): 网络协议处理由硬件完成,释放 CPU 资源 • 用户空间操作: 应用程序可直接操作网络硬件,无需系统调用
RDMA 操作类型:
1. Send/Receive: 双边操作,需要接收方预先准备接收缓冲区 2. RDMA Read: 单边操作,直接读取远程内存内容 3. RDMA Write: 单边操作,直接写入远程内存 4. Atomic Operations: 原子操作,支持 Compare-and-Swap、Fetch-and-Add 等
性能优势:
• 超低延迟: 端到端延迟可低至 0.5 微秒 • 高带宽利用率: 可达到理论带宽的 95% 以上 • 低 CPU 开销: CPU 利用率通常低于 5%
1.3.3 虚拟通道 (Virtual Lanes)
InfiniBand 支持多达 16 个虚拟通道,提供:
• 服务质量保证: 不同优先级的流量隔离 • 死锁避免: 通过虚拟通道避免网络死锁 • 带宽分配: 灵活的带宽管理和分配
1.4 网络拓扑
1.4.1 支持的拓扑结构
1. 点对点连接 (Point-to-Point)
• 直接连接两个设备,无需交换机 • 适用于小规模双节点配置 • 延迟最低,但扩展性有限
• 通过交换机连接多个设备 • 支持星型、环型等基础拓扑 • 适用于中小规模集群
典型 Fat Tree 配置示例:
Spine 层 (核心交换机)
├── Leaf 交换机 1 ── 服务器 1-18
├── Leaf 交换机 2 ── 服务器 19-36
└── Leaf 交换机 3 ── 服务器 37-54
配置: 36 端口 Leaf + 36 端口 Spine
Over-subscription: 2:1 (18 上行端口 vs 36 下行端口)• 高带宽、无阻塞的树形结构 • 1:1 Over-subscription: 上行带宽等于下行带宽,无阻塞 • 2:1 Over-subscription: 上行带宽为下行带宽的一半,常见配置 • 3:1 Over-subscription: 上行带宽为下行带宽的三分之一,经济型配置
• 多维网格拓扑,常用于超级计算机 • 2D Torus: 每个节点连接 4 个邻居 • 3D Torus: 每个节点连接 6 个邻居 • 提供多条路径,具备良好的容错性
1.4.2 子网管理
InfiniBand 网络需要子网管理器 (Subnet Manager, SM) 进行集中管理,OpenSM 是最常用的开源实现:
核心功能:
• 拓扑发现: 自动发现网络中的所有节点和链路 • LID 分配: 为每个端口分配唯一的 Local Identifier • 路由计算: 计算最优路径并配置转发表 • P_Key 管理: 配置分区密钥实现网络隔离 • VL 映射: 配置服务级别到虚拟通道的映射 • 故障处理: 检测链路故障并重新计算路由
OpenSM 部署模式:
1. 单 SM 模式 # 启动主 SM
sudo opensm -D 0x2c903000a0b1c2. 主备 SM 模式 (Master/Standby) # 主 SM (优先级 15)
sudo opensm -p 15 -D 0x2c903000a0b1c
# 备 SM (优先级 10)
sudo opensm -p 10 -D 0x2c903000a0b1d3. 多 SM 高可用模式
• 支持多个 SM 同时运行 • 自动选举机制确定 Master SM • 故障时自动切换,RTO < 30 秒
SM Failover 机制:
• 心跳检测: SM 之间定期交换心跳消息 • 优先级选举: 基于配置优先级选择 Master SM • 状态同步: Standby SM 保持网络状态同步 • 快速切换: 故障检测后 10-30 秒内完成切换
1.5 与以太网和 RoCE 的对比
RoCE (RDMA over Converged Ethernet) 特点:
• RoCE v1: 基于以太网 Layer 2,不可路由 • RoCE v2: 基于 UDP/IP,支持路由,应用更广泛 • 优势: 利用现有以太网基础设施,成本较低 • 劣势: 需要无损以太网,配置复杂,性能略低于原生 IB
数据来源: NVIDIA 技术白皮书和 IBTA 性能测试报告
1.6 高可用与容错机制
InfiniBand 网络提供多种容错机制确保高可用性:
自适应路由 (Adaptive Routing):
• 动态负载均衡: 根据链路负载自动选择最优路径 • 拥塞避免: 检测到拥塞时自动切换到备用路径 • 故障绕行: 链路故障时自动重新路由流量
冗余路径 (Redundant Paths):
• 多路径设计: Fat Tree 等拓扑提供多条等价路径 • 链路聚合: 多条物理链路聚合提高带宽和可靠性 • 故障隔离: 单点故障不影响整体网络连通性
虚拟通道容错:
• 死锁避免: 通过 VL 分配避免网络死锁 • 优先级保证: 关键流量使用专用 VL 确保服务质量 • 流量隔离: 不同应用使用不同 VL 避免相互影响
硬件级别容错:
• FEC (Forward Error Correction): 自动纠正传输错误 • 重传机制: 链路层自动重传丢失的数据包 • 信号完整性: 硬件级别的信号质量监控和调整
2. InfiniBand 网卡
2.1 主要厂商和产品
2.1.1 NVIDIA (原 Mellanox)
NVIDIA 是 InfiniBand 市场的领导者,占据约 80% 的市场份额:
ConnectX 系列:
• ConnectX-3: 支持 FDR (56 Gbps) • ConnectX-4: 支持 EDR (100 Gbps) • ConnectX-5: 支持 EDR,增强的 RDMA 功能 • ConnectX-6: 支持 HDR (200 Gbps) • ConnectX-7: 支持 NDR (400 Gbps)
BlueField DPU 系列:
• 集成 ARM 处理器的数据处理单元 • 支持网络、存储和安全卸载 • 适用于云原生和边缘计算场景
2.1.2 Intel
Intel 主要提供 Omni-Path Architecture (OPA) 解决方案:
• Omni-Path HFI: 100 Gbps 主机接口卡 • True Scale: 早期的 InfiniBand 产品线 • 主要面向 HPC 市场
2.1.3 其他厂商
• Marvell (原 QLogic): InfiniPath 系列 • Chelsio: iWARP 和 RoCE 解决方案
2.2 网卡架构
2.2.1 硬件组件
1. Host Channel Adapter (HCA)
• InfiniBand 网卡的核心组件 • 负责协议处理和 RDMA 操作 • 包含队列对 (Queue Pairs) 管理
• 连接主机系统的标准接口 • 支持 PCIe 3.0/4.0/5.0 • 通常使用 x8 或 x16 通道
• 管理板载内存和缓存 • 支持内存注册和保护 • 提供 DMA 引擎功能
2.2.2 软件栈
1. 固件 (Firmware)
• 低级别的硬件控制 • 协议栈实现 • 性能优化和错误处理
• 内核空间驱动 • 用户空间库 (libibverbs) • 管理工具和实用程序
2.3 VPI 技术
2.3.1 Virtual Protocol Interconnect
VPI 技术允许单一网卡支持多种协议:
• InfiniBand: 原生 IB 协议 • Ethernet: 标准以太网协议 • RoCE: RDMA over Converged Ethernet
2.3.2 协议切换
VPI 网卡可以根据网络环境动态切换协议:
# 查看当前协议
ibv_devinfo | grep link_layer
# 切换到以太网模式 (需要重启)
echo eth > /sys/class/infiniband/mlx5_0/ports/1/link_layer2.4 性能特性
2.4.1 延迟优化
• 硬件时间戳: 精确的延迟测量 • 零拷贝 DMA: 减少内存拷贝开销 • 中断合并: 优化中断处理
2.4.2 带宽优化
• 多队列支持: 并行处理多个连接 • 自适应路由: 动态负载均衡 • 拥塞控制: 硬件级别的流量管理
3. InfiniBand 网卡配置
3.1 驱动程序安装
3.1.1 Ubuntu/Debian 系统
方法一: 使用官方软件源:
# 更新软件包列表
sudo apt update
# 安装基础 InfiniBand 支持
sudo apt install -y infiniband-diags ibverbs-utils
sudo apt install -y libmlx5-1 libmlx4-1
sudo apt install -y libibverbs-dev librdmacm-dev
# 安装性能测试工具
sudo apt install -y perftest方法二: 安装 NVIDIA MLNX_OFED:
# 下载 MLNX_OFED (以 Ubuntu 22.04 为例)
wget https://www.mellanox.com/downloads/ofed/MLNX_OFED-5.8-1.0.1.1/MLNX_OFED_LINUX-5.8-1.0.1.1-ubuntu22.04-x86_64.tgz
# 解压安装包
tar -xzf MLNX_OFED_LINUX-5.8-1.0.1.1-ubuntu22.04-x86_64.tgz
cd MLNX_OFED_LINUX-5.8-1.0.1.1-ubuntu22.04-x86_64
# 安装所有组件
sudo ./mlnxofedinstall --all
# 重启系统使驱动生效
sudo reboot3.1.2 CentOS/RHEL 系统
# 安装基础软件包
sudo yum install -y infiniband-diags libibverbs-utils
sudo yum install -y perftest rdma-core
# 或使用 dnf (较新版本)
sudo dnf install -y infiniband-diags libibverbs-utils
sudo dnf install -y perftest rdma-core3.2 网络接口配置
3.2.1 IPoIB 配置
使用 Netplan (Ubuntu 18.04+):
# /etc/netplan/01-ib-config.yaml
network:
version:2
renderer:networkd
ethernets:
ib0:
addresses:
-192.168.100.10/24
gateway4:192.168.100.1
nameservers:
addresses:
-8.8.8.8
-8.8.4.4
mtu:65520
optional:true# 应用配置
sudo netplan apply
# 验证配置
ip addr show ib0
ping -I ib0 192.168.100.1传统网络配置:
# 手动配置 IB 接口
sudo ip linkset ib0 up
sudo ip addr add 192.168.100.10/24 dev ib0
sudo ip linkset ib0 mtu 65520
# 添加路由
sudo ip route add 192.168.100.0/24 dev ib03.2.2 RoCE 配置
当网卡工作在以太网模式时,需要配置 RoCE:
# 检查 Link Layer 类型
ibv_devinfo | grep link_layer
# 配置 RoCE v2 (推荐)
echo"RoCEv2" | sudotee /sys/class/infiniband/mlx5_0/ports/1/gid_attrs/types/3
# 启用流量控制
sudo ethtool -A eth0 rx on tx on
# 设置 Jumbo Frame
sudo ip linkset eth0 mtu 90003.3 性能优化配置
3.3.1 系统参数优化
# 网络缓冲区优化
echo'net.core.rmem_max = 134217728' | sudotee -a /etc/sysctl.conf
echo'net.core.wmem_max = 134217728' | sudotee -a /etc/sysctl.conf
echo'net.core.rmem_default = 67108864' | sudotee -a /etc/sysctl.conf
echo'net.core.wmem_default = 67108864' | sudotee -a /etc/sysctl.conf
# TCP 参数优化
echo'net.ipv4.tcp_rmem = 4096 87380 134217728' | sudotee -a /etc/sysctl.conf
echo'net.ipv4.tcp_wmem = 4096 65536 134217728' | sudotee -a /etc/sysctl.conf
# 应用配置
sudo sysctl -p3.3.2 CPU 亲和性配置
# 查看网卡的 NUMA 节点
cat /sys/class/infiniband/mlx5_0/device/numa_node
# 设置中断亲和性
echo 2 | sudotee /proc/irq/24/smp_affinity
# 绑定应用程序到特定 CPU
numactl --cpunodebind=0 --membind=0 your_application3.3.3 内存大页配置
# 配置大页内存
echo 1024 | sudotee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
# 永久配置
echo'vm.nr_hugepages = 1024' | sudotee -a /etc/sysctl.conf
# 挂载大页文件系统
sudomkdir -p /mnt/huge
sudo mount -t hugetlbfs nodev /mnt/huge3.4 安全配置
3.4.1 防火墙配置
# 允许 InfiniBand 子网管理流量
sudo ufw allow from 192.168.100.0/24 to any port 4789
# 允许 RDMA 通信端口
sudo ufw allow from 192.168.100.0/24 to any port 18515:185163.4.2 访问控制
# 配置 IB 分区
echo"0x8001" | sudotee /sys/class/infiniband/mlx5_0/ports/1/pkeys/1
# 设置设备权限
sudochown root:rdma /dev/infiniband/*
sudochmod 660 /dev/infiniband/*4. InfiniBand 网卡相关命令
4.1 基础诊断命令
4.1.1 设备发现和状态查询
# 列出所有 IB 设备
ibv_devices
# 显示设备详细信息
ibv_devinfo
# 显示设备状态摘要
ibstat
# 查看特定设备信息
ibv_devinfo -d mlx5_0
# 显示端口状态
ibportstate示例输出解析:
$ ibstat
CA 'mlx5_0'
CA type: MT4129
Number of ports: 1
Firmware version: 28.39.5050
Hardware version: 0
Node GUID: 0xa088c20300863a34
System image GUID: 0xa088c20300863a34
Port 1:
State: Active
Physical state: LinkUp
Rate: 200
Base lid: 113
LMC: 0
SM lid: 92
Capability mask: 0x2651e848
Port GUID: 0xa088c20300863a34
Link layer: InfiniBand