写点什么

高性能网络通信架构 RDMA 的设计与实现

刘伟

  • 2023-08-01
    北京
  • 本文字数:1803 字

    阅读完需:约 6 分钟

高性能网络通信架构RDMA的设计与实现

传统以太网方案存在系统调用消耗大量时间、数据复制增加传输延时、数据包的封装和解析对 CPU 造成很重的负担三个缺点,而 RDMA 技术可以解决以上三个缺点。那 RDMA 究竟是什么?RDMA 方案的设计思路是什么?

RDMA 技术的软件架构与设计思路

RDMA 和传统网络方案的比较

 

传统以太网方案存在三个缺点:send/sendto 等系统调用导致 CPU 在用户态和内核态之间切换,消耗大量时间;发送过程中需要 CPU 把数据从用户空间复制到内核空间(接收时反向复制),增加了数据传输延时;需要 CPU 全程参与数据包的封装和解析,在数据量大时将对 CPU 将造成很重的负担。

 

RDMA 技术可以解决上述三个问题:首先,其在数据传输过程中没有系统调用;然后,在系统内存内部做到零拷贝,省掉了数据在用户空间和内核空间之间拷贝的步骤。最后,把数据包的封装和解析交由网卡硬件来做,降低了 CPU 负载。

RDMA 协议类型

 

RDMA 指的是一种远程直接内存访问技术。具体到协议层面,它主要包含了 Infiniband(IB),RDMA over Converged Ethernet(RoCE)和 Internet Wide Area RDMA Protocol(iWARP)三种协议。三种协议都符合 RDMA 标准,共享相同的上层用户接口(Verbs),只是在不同层次上有一些差别。

RDMA 软件架构

 

RDMA 的软件架构按层次可分成两部分,即 rdma-core 和内核 RDMA 子系统,分别运行在 Linux 系统中的用户态和内核态。整个软件架构适用于所有类型的 RDMA 网卡,不管网卡硬件执行了哪种 RDMA 协议(Infiniband/RoCE/iWARP)。



RDMA 基本元素和操作类型

 

WQE(Work Queue Element,工作队列元素)的作用类似于以太网方案中收发队列里的描述符(Desc) 。其中包含了软件希望硬件去做的任务类型(远程读、远程写、发送还是接收等)以及任务的详细信息(数据所在的内存地址、数据长度和访问密钥等)。

 

WQ(Work Queue,工作队列)类似于以太网方案中的发送/接收队列,WQ 里面可以容纳很多 WQE,这些 WQE 在 WQ 中以先进先出(FIFO)队列的形式存在。

 

QP 是一个发送工作队列和一个接受工作队列的组合,这两个队列分别称为 SQ(Send Queue)和 RQ(Receive Queue)。SQ 和 RQ 都是一种 WQ。SQ 专门用来存放发送任务,RQ 专门用来存放接收任务。在一次 SEND-RECV 流程中,发送端需要把表示一次发送任务的 WQE 放到 SQ 里面(这种操作称为 Post Send)。同样的,接收端需要把表示一次接收任务的 WQE 放到 RQ 里面(称为 Post Receive),这样硬件才知道收到数据之后放到内存中的哪个位置。在 RDMA 技术中,通信的基本主体或对象是 QP,而不是节点。对于每个节点来说,每个进程都可以申请和使用若干个 QP,而每个本地 QP 可以“连接到”一个远端的 QP。每个节点的每个 QP 都有一个唯一的编号,称为 QPN(Query Pair Number),通过 QPN 可以唯一确定一个节点上的 QP。

 

CQ 意为完成队列(Completion Queue)。跟 WQ 中含有很多 WQE 类似,CQ 这个队列中也有很多元素,叫做 CQE(Completion Queue Element)。可以认为 CQE 跟 WQE 是相反的概念。如果 WQE 是软件下发给硬件的任务,CQE 就是硬件完成任务之后返回给软件的“完成报告”。每个 CQE 都包含某个 WQE 的完成信息。

 

RDMA WRITE 操作是一端应用主动写入远端内存的行为,除了准备阶段,远端 CPU 不需要参与,也不感知何时有数据写入、数据在何时接收完毕。所以这是一种单端操作。需要注意的是,操作发起端的应用程序是通过虚拟地址来读写远端内存的,上层应用可以非常方便的对其进行操作。实际的虚拟地址—物理地址的转换是由 RDMA 网卡完成的。



RDMA 方案的设计思路

 

下图中横向箭头表示的是某应用程序执行的步骤。每个步骤中下行的箭头和方框表示当前这个步骤的简要实现流程。



RDMA 实现方案的设计思路中比较重要的三点:初始化和配置等低频操作可以进入内核态执行;数据传输等高频操作旁路内核;独立的 QP、CQ 资源保证多线程并发。



浪潮 iRDMA 方案的设计思路

 

iRDMA 是浪潮信息体系结构研究部利用自研 F10A FPGA 加速卡,基于 Linux 内核 IB 驱动架构和 rdma-core 开源协议栈,开发的一套 RDMA 网络加速平台,用户可在其基础上进行二次开发。

 

下面是它的软件模块框图:



我们使用 perftest 工具测试 iRDMA,并和 Mellanox ConnectX-4 Lx 10G 网卡做比较,带宽测试结果见下图。



总体来说 Mellanox 网卡比 iRDMA 带宽大一点,按比例看小 size 时比较明显。

作者介绍


刘伟,浪潮信息驱动工程师,著有《Linux 高性能网络详解:从 DPDK、RDMA 到 XDP》一书。

2023-08-01 17:398125

评论

发布
暂无评论
发现更多内容

跨平台应用开发进阶(三十):uni-app 实现集成火山视频直播服务

No Silver Bullet

uni-app 12月月更 服务集成 火山视频直播服务

推荐8个提高工作效率的IntelliJ插件

JAVA旭阳

Java IDEA

嘉为蓝鲸受邀出席汽车新智造数字行业峰会,助力构建数字时代竞争力!

嘉为蓝鲸

数字时代 自动化运维 嘉为蓝鲸

YonBuilder移动开发平台 AVM框架 数字滚动组件

YonBuilder低代码开发平台

开发者 前端 avm.js AVM

云原生时代的灰度发布有几种“姿势”?

嘉为蓝鲸

灰度发布 自动化运维 嘉为蓝鲸

手把手教你成为荣耀开发者:如何获取平台帮助及最新通知?

荣耀开发者服务平台

开发者 安卓 平台赋能 数智创新 honor 技术支持

Dubbo架构设计与源码解析(二) 服务注册

京东科技开发者

架构 dubbo spi 服务注册 Dubbo SPI

跨平台应用开发进阶(三十二) :AK/SK鉴权原理简介

No Silver Bullet

uni-app 12月月更 AK/SK鉴权

数据库原理及MySQL应用 | 实体联系模型

TiAmo

数据库 :MySQL 数据库 12月月更

教你如何轻松搞定云上打印管理

华为云开发者联盟

云计算 华为云 12 月 PK 榜 云打印

本年度软件供应链攻击事件回顾

SEAL安全

基础设施 第三方风险 软件供应链安全 软件供应链攻击 12 月 PK 榜

小游戏未来将在技术侧如何发展

Onegun

小游戏 小游戏开发

培训班学习完后就业前景怎么样

小谷哥

【开源项目】今天推荐一个很好的开源项目,一款新的编程语言——HVML

hvmlenvoy

GitHub 编程语言 开源项目

跨平台应用开发进阶(三十一) :uni-app实现覆盖原生控件导航栏和tabbar全屏弹窗

No Silver Bullet

uni-app 跨平台应用 12月月更 原生控件覆盖 全屏弹窗

HarmonyOS 3优化游戏续航,nova 6等老机型升级后游戏续航更持久

极客天地

如何使用轮播图在小程序内实现水平内容自动切换?

Towify

小程序 微信小程序 无代码 轮播图

可观测落地实践-从战略管理到工具落地

嘉为蓝鲸

可观测 自动化运维 嘉为蓝鲸

Wallys//AX200NGW,adapter card with one M.2 slot/DR2g41 Linux,WiFi-modules,4-miniPCIE-slot

wallysSK

AX200NGW

汽车行业:充分借力数据价值,推动数字化营销链路闭环

HarmonyOS SDK

HMS Core

港华燃气上线WeOps推动运维效能提升,托举业务智慧运行!

嘉为蓝鲸

运维 自动化运维 嘉为蓝鲸 #WeOps

什么是 Redis 持久化,如何理解?

千锋IT教育

Redis 6.0

如何用3D流体实现逼真水流效果?

HarmonyOS SDK

HMS Core

双旦来临,贾斯特里尼&布鲁克斯红酒为您多添一份情调

联营汇聚

YonBuilder移动开发平台AVM框架封装数据表格组件

YonBuilder低代码开发平台

开发者 前端 AVM

无效回表谁的锅?存储引擎:这事儿不赖我

小小怪下士

Java MySQL 程序员

什么是低代码?低代码平台能解决什么样的问题?

优秀

低代码 低代码平台

直播预约|阿里云EMR 2.0 重磅发布

阿里云大数据AI技术

大数据 阿里云 大数据 开源

如何制作一个实时在线显示评论?

Towify

微信小程序 编辑器 无代码

ArkUI,更高效的框架设计

HarmonyOS开发者

HarmonyOS

高性能网络通信架构RDMA的设计与实现_芯片与网络_InfoQ精选文章