RDMA 技术分析
一、概述
1. 什么是 RDMA
RDMA(Remote Direct Memory Access,远程直接内存访问)是一种为了解决网络传输中服务器端数据处理延迟而产生的技术。
2. 核心特性
A. 传统 TCP/IP 传输
数据经过网络堆栈,再经过网卡发送,接收端接收后,按照序列号组装数据。
B. DMA 传输
可以直接在设备和内存之间传输数据,不需要经过网络堆栈。
C. RDMA 传输
可以实现跨节点的 DMA 数据传输。
3. 技术对比
| 特性 | TCP | DMA | RDMA |
|---|---|---|---|
| CPU 占用 | 较高(通常 10-40% 以上) | 较低(<10%,依赖于实现) | 极低(通常在 1% 以下) |
| 延迟 | 10-100 微秒 | 数微秒(内存传输) | 亚微秒到单微秒级 |
| 带宽效率 | 1-10 Gbps(视网络条件而定) | 最高可达 100 Gbps(与总线速率相关) | 100-400 Gbps(依赖于 RDMA 网卡型号,如 RoCE、InfiniBand) |
| 适用场景 | 通用网络传输 | 本地内存或设备间数据传输 | 高性能网络传输 |
| 硬件要求 | 无 | 需要 DMA 控制器 | 需要 RDMA 网卡(如 InfiniBand 或 RoCE) |
二、RDMA 通信过程
1. 基本概念
RDMA 使用队列的机制进行数据通信,其基本通信单位是 QP(Queue Pairs,队列对)。一个 QP 由一个 SQ(Send Queue,发送队列)和一个 RQ(Receive Queue,接收队列)构成。
2. 通信流程
graph LR
A[HOST] -->|提交 WR| B[工作队列 WQ]
B -->|消费 WQE| C[RDMA 硬件]
C -->|产生 CQE| D[完成队列 CQ]
D -->|消费 WC| A3. 详细步骤
- HOST 提交工作请求 WR(Work Request,工作请求),将 WR 放到工作队列 WQ(Work Queue,工作队列)
- RDMA 硬件消费 WQE 中的 WR,进行数据传输
- RDMA 硬件消费完成后,产生 CQE(Completion Queue Entry,完成队列条目),将 CQE 放入 CQ(Completion Queue,完成队列)队列中,等待 HOST 消费
- HOST 从 CQ 中消费 WC(Work Completion,工作完成)
三、RDMA 技术实现
1. InfiniBand
A. 背景
由 InfiniBand Trade Association(IBTA)在 1999 年提出,旨在为高性能计算(HPC)和大规模数据中心提供高带宽、低延迟的连接,主要由英特尔、NVIDIA、Mellanox(现为英伟达子公司)、IBM 等推动,广泛应用于超级计算机和企业级存储解决方案。
B. 应用现状
InfiniBand 已成为数据中心和 HPC 的标准之一,支持多种协议(如 RDMA 和 NVMe over Fabrics),并逐渐向 AI 和机器学习领域扩展。
C. 技术特性
- 高带宽:可达 400Gbps
- 低延迟:微秒级
- 支持大规模扩展
- 具备先进的流量管理和质量服务(QoS)特性
2. iWARP
A. 背景
由 IETF 的 RDMA Working Group 在 2000 年提出,旨在通过现有的 TCP/IP 网络实现 RDMA,主要由英特尔、Cisco、Broadcom 等公司推动,尤其在云计算和虚拟化环境中应用广泛。
B. 应用现状
iWARP 在企业网络中得到一定应用,尤其是在传统以太网架构下的 RDMA 需求,逐渐被市场认可,但竞争力相对较弱。
C. 技术特性
- 兼容性强:可在现有以太网基础设施上运行
- 支持 TCP/IP 协议,降低了 RDMA 的部署门槛
- 适用于中小型数据中心
3. RoCE (RDMA over Converged Ethernet)
A. 背景
由 IBM 和其他公司在 2008 年提出,旨在将 RDMA 整合到以太网环境中,通过 DCB 技术实现高效的数据传输,主要由 Mellanox(现为英伟达)、Cisco、Intel 等公司推动,逐渐在数据中心和云计算环境中普及。
B. 协议版本
- RoCE v1:以太网链路层协议
- RoCEv2:构筑于 UDP/IPv4 或 UDP/IPv6 协议之上,能组建更大的网络
C. 技术特性
相较于 InfiniBand,RoCE 的优势在于可以在现有以太网基础设施上运行,能够降低部分的硬件成本,但也很难达到 InfiniBand 成本的 50% 以下。
四、Ascend 下的 RDMA
1. 硬件架构
Atlas 800 的 RDMA 依赖于 RoCE 网卡。一个 Board 上四个 SF216D-H 网卡,每个 SF216D-H 有两个 200GE 网卡。每个网卡连接一张 NPU 卡,用于组网。
华为 Altas 800 集群组网时,通过一个外部交换机将各个 NPU 卡连接起来,组成一个参数面的网络。由于每个交换机的网卡是有限的,如果需要更大的网络就需要借助 Spine-Leaf 网络拓扑。
2. 常用配置命令
A. 设置 IP 地址和掩码
hccn_tool -i 0 -ip -s address 10.52.11.2 netmask 255.255.255.0参数说明:
- -i:指定卡的编号
B. 设置 RoCE 网卡默认网关
hccn_tool -i 0 -gateway -s gateway 10.52.11.1C. 设置网络检测对象
hccn_tool -i 0 -netdetect -s address 10.52.11.1这个 IP 主要用来设置检测网络状态,一般设置为网段内的网关地址。
D. 使能 TLS
for i in {0..7}; do hccn_tool -i $i -tls -s enable 0; done3. 常用检测命令
A. 查看组网 IP
cat /etc/hccn.conf或者
for i in {0..7}; do hccn_tool -i $i -ip -g; doneB. 检查单节点内网卡 IP 的连通性
for i in {0..7};do hccn_tool -i $i -net_health -g;doneC. 查看通信端口连接状态
for i in {0..7};do hccn_tool -i ${i} -link -g;doneD. 卡健康状态
for i in {0..7};do npu-smi info -t health -i $i -c 0;doneE. ECC
for i in {0..7};do npu-smi info -t ecc -i $i;doneF. PCI
lspci |grep d804. 常用组网命令
A. 查看光模块状态
for i in {0..7};do hccn_tool -i ${i} -optical -g;doneB. 查询 TLS 状态
for i in {0..7}; do hccn_tool -i $i -tls -g; done |grep switchC. 测试连通性
export ADDRESS=10.52.41.10
for i in {0..7}; do hccn_tool -i $i -ping -g address ${ADDRESS} ; doneD. 两节点全连接测试
获取对端 IP:
echo "ADDRESSES=$(grep -oP '^address_\d+=\K[\d.]+' /etc/hccn.conf | paste -sd,)"获取 ADDRESSES 变量设置在另外一台主机后执行:
IFS=',' read -ra ADDR_ARRAY <<< "$ADDRESSES"
for addr in "${ADDR_ARRAY[@]}"; do
echo "testing ${addr}"
for i in {0..7}; do
hccn_tool -i $i -ping -g address ${addr} ;
done
done5. 测试跨机带宽
A. 获取接收端卡的 IP
hccn_tool -i 0 -ip -g
# 输出示例:ipaddr:10.52.11.3 netmask:255.255.255.0B. 接收端执行
hccn_tool -i 0 -roce_test reset
hccn_tool -i 0 -roce_test ib_send_bw -s 4096000 -n 1000 -tcpC. 发送端执行
hccn_tool -i 0 -roce_test reset
hccn_tool -i 0 -roce_test ib_send_bw -s 4096000 -n 1000 address 10.52.41.20 -tcp