RDMA 技术分析

一、概述

1. 什么是 RDMA

RDMA(Remote Direct Memory Access,远程直接内存访问)是一种为了解决网络传输中服务器端数据处理延迟而产生的技术。

2. 核心特性

A. 传统 TCP/IP 传输

数据经过网络堆栈,再经过网卡发送,接收端接收后,按照序列号组装数据。

B. DMA 传输

可以直接在设备和内存之间传输数据,不需要经过网络堆栈。

C. RDMA 传输

可以实现跨节点的 DMA 数据传输。

3. 技术对比

特性TCPDMARDMA
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| A

RDMA通信流程

3. 详细步骤

  • 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.1

C. 设置网络检测对象

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; done

3. 常用检测命令

A. 查看组网 IP

cat /etc/hccn.conf

或者

for i in {0..7}; do hccn_tool -i $i -ip -g; done

B. 检查单节点内网卡 IP 的连通性

for i in {0..7};do hccn_tool -i $i -net_health -g;done

C. 查看通信端口连接状态

for i in {0..7};do hccn_tool -i ${i} -link -g;done

D. 卡健康状态

for i in {0..7};do npu-smi info -t health -i $i -c 0;done

E. ECC

for i in {0..7};do npu-smi info -t ecc -i $i;done

F. PCI

lspci |grep d80

4. 常用组网命令

A. 查看光模块状态

for i in {0..7};do hccn_tool -i ${i} -optical -g;done

B. 查询 TLS 状态

for i in {0..7}; do hccn_tool -i $i -tls -g; done |grep switch

C. 测试连通性

export ADDRESS=10.52.41.10
for i in {0..7}; do hccn_tool -i $i -ping -g address ${ADDRESS} ; done

D. 两节点全连接测试

获取对端 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
done

5. 测试跨机带宽

A. 获取接收端卡的 IP

hccn_tool -i 0 -ip -g
# 输出示例:ipaddr:10.52.11.3 netmask:255.255.255.0

B. 接收端执行

hccn_tool -i 0 -roce_test reset
hccn_tool -i 0 -roce_test ib_send_bw -s 4096000 -n 1000 -tcp

C. 发送端执行

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

五、参考资料


参考资料

  1. RDMA 技术 - 陈少文的网站
  2. CANN商用版 8.0.RC3 集合通信用户指南
最后修改:2026 年 01 月 18 日
如果觉得我的文章对你有用,请随意赞赏