惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

SecWiki News
SecWiki News
I
InfoQ
The Cloudflare Blog
人人都是产品经理
人人都是产品经理
博客园 - Franky
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
博客园_首页
罗磊的独立博客
V
V2EX
李成银的技术随笔
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
True Tiger Recordings
Vercel News
Vercel News
Cyberwarzone
Cyberwarzone
Cisco Talos Blog
Cisco Talos Blog
F
Fox-IT International blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
M
Microsoft Research Blog - Microsoft Research
Know Your Adversary
Know Your Adversary
爱范儿
爱范儿
The Register - Security
The Register - Security
G
Google Developers Blog
The Hacker News
The Hacker News
Malwarebytes
Malwarebytes
S
Securelist
博客园 - 三生石上(FineUI控件)
Jina AI
Jina AI
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
S
SegmentFault 最新的问题
博客园 - 叶小钗
F
Fortinet All Blogs
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
博客园 - 聂微东
T
Threatpost
博客园 - 【当耐特】
D
Docker
P
Privacy & Cybersecurity Law Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
G
GRAHAM CLULEY
V
Visual Studio Blog
C
Cisco Blogs
IT之家
IT之家
S
Security Archives - TechRepublic
Latest news
Latest news
阮一峰的网络日志
阮一峰的网络日志

陈少文的网站

容器化部署 Hermes Agent 部署 JuiceFS CSI Driver 使用 A2A Gateway 打通多 OpenClaw Loggie 部署与配置 OpenClaw 运维 - 让飞轮转起来 你也可以这样落地 AI Agent - SOPS 篇 AGFS 文件系统性能测试 面向 AI Agent 的文件系统 - AGFS OpenViking 使用与 OpenClaw 集成 如何远程给OpenClaw发送消息 容器化部署 OpenClaw 使用 Skills 和 MCP 扩展 OpenClaw OpenClaw 安装与配置 LVM 日常运维 MinIO 基础设施选型与优化 容器部署 ClickHouse 容器化部署 Redis 容器部署中间件 容器部署多节点 FoundationDB 及运维 使用 HAProxy 代理 MinIO 及性能测试 多机多盘 MinIO 集群在不同纠删码配置下的性能测试 多机多盘 minio 集群不同纠删码配置在 IPoIB 下的性能测试 MinIO 多节点多盘部署与运维 Cursor 之下,何以立足 你也可以这样落地 AI Agent - MCP 篇 阿里云 eRDMA 测试及 PD 分离应用部署 你也可以这样落地 AI Agent - 运维事件篇 常见的几种 LLM Agent 架构 你也可以这样落地 AI Agent - 案例篇 ext4、xfs、zfs、btrfs 在 RAID6 下的性能测试 RAID 下 ZFS 运维操作 RAID 下 XFS 运维操作 RAID 下 Btrfs 运维操作 xfs 在各种 RAID 下的性能测试 RAID 存储技术 使用 LLaMA-Factory 微调 Qwen3 模型 vLLM 部署 PD 分离应用 使用 lmcache 能显著改善模型推理的 TTFT 什么是 Prefix Cache NVIDIA RTX 5090 推理测试 什么是模型量化 Kubernetes 基础环境要求 如何升级 Kubernetes 节点的 cgroup 版本 在服务器上使用 claude-code 常用 NPU 运维及故障处理 NVIDIA DCGM 使用指南 如何清理僵尸进程 使用 VLLM Benchmark 进行模型性能测试 眼看他拔地起,眼看他化作泥 - KubeSphere 在 Kubernetes 集群部署 Dragonfly history 命令使用 AI 相关论文 在服务器上使用 Gemini CLI Ascend DMI 工具使用指南 Kubernetes 下开源的 GPU 虚拟化项目 FoundationDB 数据备份与恢复 认知觉醒 给 Node Exporter 添加抓取凭证 部署 smokeping-prober 探测网络质量 Opscli 支持 MCP 提供 Cline\Cursor 集成 kube-proxy 异常导致节点上的 Pod 无法访问 Service 为什么 NFS Over RDMA 比 NFS 的 FIO 大块读性能好很多 3FS 关键技术和设计 DeepSeek 3FS 运维指南 容器化部署 DeepSeek 3FS 存储系统 3FS 的一些性能测试 在 Kubernetes 中使用 Fluid 挂载 3FS 存储及性能测试 NFS Over RDMA kubectl logs 无法查看 Pod 日志报错 NotFound 使用 Dante 提供 SOCKS5 转发 使用 Calico 限制 Pod 的带宽 分布式计算框架 Ray 以 Qwen 为例,学习大模型的结构 NVIDIA 环境变量配置 Ascend 环境变量配置 Fluid 下的 Juicefs 企业版维护 使用 vLLM 进行模型推理 使用 Nerdctl 构建多架构镜像 使用 vLLM 应用验证推理节点 AI 应用开发技术栈 在 Kubernetes 部署 Jumpserver 跳板机 使用 Ops 项目查看并监控集群事件 使用 Fluid 和 S3FS 对接 S3 存储及性能测试 使用 Fluid 对接 S3 存储及性能测试 使用 TensorBoard 可视化 PyTorch 训练过程 使用 PyTorch 在 MNIST 数据集训练模型 Ubuntu 切换指定版本的内核 MPI 通信原语及 Python 编程使用 Ops 发布 v1.0.0 版本 常见的几种网络拓扑结构 SR-IOV 技术 InfiniBand 网络及常用命令 使用 Fluid 对接 OBS 存储及性能测试 使用 Iceberg 和 Spark 在 Kubernetes 上处理数据 GPU 主机如何开启 GDS 什么是 Token 什么是 FLOPs 什么是 PD 分离 Kubernetes 下的 DLRover 工作流程分析 NVIDIA GPU 核心与架构演进史
RDMA 技术
2024-11-05 · via 陈少文的网站

1. 什么是 RDMA

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

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

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

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

三者之间的对比如下:

特性TCPDMARDMA
CPU 占用较高(通常 10-40% 以上)较低(<10%,依赖于实现)极低(通常在 1% 以下)
延迟10-100 微秒数微秒(内存传输)亚微秒到单微秒级
带宽效率1-10 Gbps(视网络条件而定)最高可达 100 Gbps(与总线速率相关)100-400 Gbps(依赖于 RDMA 网卡型号,如 RoCE、InfiniBand)
适用场景通用网络传输本地内存或设备间数据传输高性能网络传输
硬件要求需要 DMA 控制器需要 RDMA 网卡(如 InfiniBand 或 RoCE)

2. RDMA 通信过程

RDMA 使用队列的机制进行数据通信,其基本通信单位是 QP(Queue Pairs,队列对)。一个 QP 由一个 SQ(Send Queue,发送队列)和一个 RQ(Receive Queue,接收队列)构成。

大致的通信过程如下

  1. HOST 提交工作请求 WR(Work Request,工作请求),将 WR 放到工作队列 WQ(Work Queue,工作队列)
  2. RDMA 硬件消费 WQE 中的 WR,进行数据传输
  3. RDMA 硬件消费完成后,产生 CQE(Completion Queue Entry,完成队列条目),将 CQE 放入 CQ (Completion Queue,完成队列)队列中,等待 HOST 消费
  4. HOST 从 CQ 中消费 WC (Work Completion,工作完成)

3. RDMA 技术实现

3.1 InfiniBand

由 InfiniBand Trade Association(IBTA)在 1999 年提出,旨在为高性能计算(HPC)和大规模数据中心提供高带宽、低延迟的连接,主要由英特尔、NVIDIA、Mellanox(现为英伟达子公司)、IBM 等推动,广泛应用于超级计算机和企业级存储解决方案。

InfiniBand 已成为数据中心和 HPC 的标准之一,支持多种协议(如 RDMA 和 NVMe over Fabrics),并逐渐向 AI 和机器学习领域扩展。

InfiniBand 具有高带宽(可达 400Gbps)、低延迟(微秒级)、支持大规模扩展、具备先进的流量管理和质量服务(QoS)特性。

3.2. iWARP

由 IETF 的 RDMA Working Group 在 2000 年提出,旨在通过现有的 TCP/IP 网络实现 RDMA,主要由英特尔、Cisco、Broadcom 等公司推动,尤其在云计算和虚拟化环境中应用广泛。

iWARP 在企业网络中得到一定应用,尤其是在传统以太网架构下的 RDMA 需求,逐渐被市场认可,但竞争力相对较弱。

iWARP 兼容性强(可在现有以太网基础设施上运行)、支持 TCP/IP 协议,降低了 RDMA 的部署门槛,适用于中小型数据中心。

3.3. RoCE (RDMA over Converged Ethernet)

由 IBM 和其他公司在 2008 年提出,旨在将 RDMA 整合到以太网环境中,通过 DCB 技术实现高效的数据传输,主要由 Mellanox(现为英伟达)、Cisco、Intel 等公司推动,逐渐在数据中心和云计算环境中普及。

RoCE 有两个版本 RoCE v1 协议是一个以太网链路层协议,RoCEv2 协议构筑于 UDP/IPv4 或 UDP/IPv6 协议之上,能组建更大的网络。

相较于 InfiniBand,RoCE 的优势在于可以在现有以太网基础设施上运行,能够降低部分的硬件成本,但也很难达到 InfiniBand 成本的 50% 一下。

4. Ascend 下的 RDMA

Atlas 800 的 RDMA 依赖于 RoCE 网卡,如下图:

一个 Board 上四个 SF216D-H 网卡,每个 SF216D-H 有两个 200GE 网卡。每个网卡连接一张 NPU 卡,用于组网。

华为 Altas 800 集群组网时,通过一个外部交换机将各个 NPU 卡连接起来,组成一个参数面的网络。由于每个交换机的网卡是有限的,如果需要更大的网络就需要借助 Spine-Leaf 网络拓扑。

4.1 常用配置命令

  • 设置 IP 地址和掩码
1
hccn_tool -i 0 -ip -s address 10.52.11.2 netmask 255.255.255.0

-i 指定卡的编号。

  • 设置 Roce 网卡默认网关
1
hccn_tool -i 0  -gateway -s gateway 10.52.11.1
  • 设置网络检测对象
1
hccn_tool -i 0 -netdetect -s address 10.52.11.1

这个 IP 主要用来设置检测网络状态,一般设置为网段内的网关地址。

  • 使能 TLS
1
for i in {0..7}; do hccn_tool -i $i -tls -s enable 0; done

4.2 常用检测命令

  • 查看组网 IP
1
cat /etc/hccn.conf

或者

1
for i in {0..7}; do hccn_tool -i $i -ip -g; done
  • 检查单节点内网卡 IP 的连通性
1
for i in {0..7};do hccn_tool -i $i -net_health -g;done
  • 查看通信端口连接状态
1
for i in {0..7};do hccn_tool -i ${i} -link -g;done
  • 卡健康状态
1
for i in {0..7};do npu-smi info -t health -i $i -c 0;done
  • ECC
1
for i in {0..7};do npu-smi info -t ecc -i $i;done
  • pci
1
lspci |grep d80

4.3 常用组网命令

  • 查看光模块状态
1
for i in {0..7};do hccn_tool -i ${i} -optical -g;done
  • 查询 tls 状态
1
for i in {0..7}; do hccn_tool -i $i -tls -g; done |grep switch
  • 测试连通性
1
2
export ADDRESS=10.52.41.10
for i in {0..7}; do hccn_tool -i $i -ping -g address ${ADDRESS} ; done
  • 两节点全连接测试
1
echo "ADDRESSES=$(grep -oP '^address_\d+=\K[\d.]+' /etc/hccn.conf | paste -sd,)"

获取 ADDRESSES 变量设置在另外一台主机。

1
2
3
4
5
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

4.4 测试跨机带宽

  • 获取接收端卡的 IP
1
2
3
4
hccn_tool -i 0 -ip -g

ipaddr:10.52.11.3
netmask:255.255.255.0
  • 接收端
1
2
hccn_tool -i 0 -roce_test reset
hccn_tool -i 0 -roce_test ib_send_bw -s 4096000 -n 1000 -tcp
  • 发送端
1
2
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

5. 一些资料

CANN商用版 8.0.RC3 集合通信用户指南 01