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

推荐订阅源

Cloudbric
Cloudbric
Schneier on Security
Schneier on Security
V2EX - 技术
V2EX - 技术
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
O
OpenAI News
S
Security @ Cisco Blogs
Scott Helme
Scott Helme
Security Archives - TechRepublic
Security Archives - TechRepublic
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
WordPress大学
WordPress大学
云风的 BLOG
云风的 BLOG
T
Threatpost
Hacker News: Ask HN
Hacker News: Ask HN
Microsoft Azure Blog
Microsoft Azure Blog
Know Your Adversary
Know Your Adversary
博客园 - 三生石上(FineUI控件)
A
About on SuperTechFans
Forbes - Security
Forbes - Security
NISL@THU
NISL@THU
Security Latest
Security Latest
G
Google Developers Blog
D
Docker
T
Threat Research - Cisco Blogs
N
Netflix TechBlog - Medium
C
CERT Recently Published Vulnerability Notes
H
Help Net Security
B
Blog
Martin Fowler
Martin Fowler
N
News and Events Feed by Topic
Simon Willison's Weblog
Simon Willison's Weblog
Hacker News - Newest:
Hacker News - Newest: "LLM"
L
Lohrmann on Cybersecurity
Y
Y Combinator Blog
PCI Perspectives
PCI Perspectives
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
Project Zero
Project Zero
爱范儿
爱范儿
Cisco Talos Blog
Cisco Talos Blog
博客园 - 聂微东
Hugging Face - Blog
Hugging Face - Blog
人人都是产品经理
人人都是产品经理
V
Vulnerabilities – Threatpost
P
Proofpoint News Feed
Cyberwarzone
Cyberwarzone
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
TaoSecurity Blog
TaoSecurity Blog
N
News | PayPal Newsroom
Recorded Future
Recorded Future

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19) 使用 Velero 备份 Kubernetes 集群 Kubernetes Cheat Sheet 开发 Tips(18) 如何构建一个 Java 工程 开发 Tips(17) KubeSpray 安装 Kubernetes 报错 ip in ansible_all_ipv4_addresses 基于 Kubernetes 和 Jenkins 搭建自动化测试系统 在 Kubernetes 上动态创建 Jenkins Slave 使用 Jenkins 进行服务拨测 开发 Tips(16) Kubernetes 签发 Ingress 证书及日常故障运维 Kubernetes 中 Deployment 的基本操作 Kubernetes 中的证书 如何使用 KubeBuilder 开发一个 Operator Kubernetes 1.6.0 安装问题汇总 镜像管理工具 -- Harbor 开发 Tips(15) Docker 如何拉取镜像 开发 Tips(14) 使用 Helm 安装 harbor 开发 Tips(13) 使用 S2I 构建云原生应用 在 Kubernetes 中使用 emptyDir、hostPath、localVolume 开发 Tips(12) 开发 Tips(11) 代码质量分析工具 SonarQube 使用 Kubeadm 安装 Kubernetes 集群 一起来学 Go --(4)常用函数 Kubernetes 中的 Ceph Kubernetes 之 Volumes Kubernetes 之 Labels、Selectors 开发 Tips(10) 开源正在重构商业模式 Kubernetes 之网络 Kubernetes 之 API 使用 Helm 和 Operator 快速部署 Prometheus Kubernetes 复杂有状态应用管理框架 -- Operator Kubernetes 的包管理器 -- Helm 一起来学 Go --(3)Go Modules 如何一步一步地优化博客方案 kubectl 实用指南 Kubernetes 中的基本概念 搭建远程 Kubernetes 开发环境 大公司和小公司的 ToB 思路 开发 Tips(9) Go 入门指南 一起来学 Go --(2)数据与逻辑结构 如何预防 Web 富文本中的 XSS 攻击 django-xss-cleaner 云工作时代 一起来学 Go --(1)背景与特点 SaaS 开发团队的不同阶段 你不知道的 Git 使用技巧 输出既服务 微服务设计 继续奔跑 开发 Tips(8) 从账户安全到二次验证 Django 性能之数据库查询优化 Django 性能之分库分表 敏捷开发之研发流程 打造一致性的团队 开发 Tips(7) Pytest 进阶学习之 Mock PaaS 部署之 buildpack Go 开发配置 领域输出才是 PaaS 的核心竞争力 Pytest 入门学习 开发 Tips(6) 如何使用 Jenkins、Docker、GitLab 搭建 Django 自动化部署流程
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
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

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