当前位置: 首页 > news >正文

关于远程直接内存访问技术 RDMA 的高性能架构设计介绍 | 龙蜥技术

编者按:传统以太网方案存在系统调用消耗大量时间、增加数据传输延时、对 CPU 造成很重的负担三个缺点,而 RDMA 技术可以解决以上三个缺点。那 RDMA 究竟是什么?它的方案的设计思路是什么?今天,浪潮信息驱动工程师刘伟带大家深入理解 RDMA 技术的基本原理,交流在工程上的设计思路。本文整理自龙蜥大讲堂 83 期,以下为本次分享内容:

01  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)队列的形式存在。左图展示了 WQ 和 WQE 的关系,以及它们和以太网方案中队列和描述符功能的比较。

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 资源保证多线程并发。

图片

02  浪潮 iRDMA 方案简介

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

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

图片

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

图片

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

关于直播课件及视频回放获取方式:

【PPT 课件获取】:关注微信公众号(OpenAnolis),回复“龙蜥课件” 即可获取。有任何疑问请随时咨询龙蜥助手—小龙(微信:openanolis_assis)。

【视频回放】:视频回放可在龙蜥视频号(账号:龙蜥社区_小龙)或龙蜥官网 https://openanolis.cn/video 查看。

—— 完 ——

相关文章:

关于远程直接内存访问技术 RDMA 的高性能架构设计介绍 | 龙蜥技术

编者按:传统以太网方案存在系统调用消耗大量时间、增加数据传输延时、对 CPU 造成很重的负担三个缺点,而 RDMA 技术可以解决以上三个缺点。那 RDMA 究竟是什么?它的方案的设计思路是什么?今天,浪潮信息驱动工程师刘伟带…...

【Boost搜索引擎项目】

文章目录 一、项目流程二、项目展示 一、项目流程 1.编写数据去标签模块–parser.cc 将去标签之后干净文档以title\3content\3url\ntitle\3content\3url\n格式放入同一文件中。 2.建立索引模块–index.hpp 读取处理好的行文本文件进行分词、权重计算等操作,在内存中…...

JVM入门篇-JVM的概念与学习路线

JVM入门篇-JVM的概念与学习路线 什么是 JVM 定义 Java Virtual Machine - java 程序的运行环境(java 二进制字节码的运行环境) 好处 一次编写,到处运行自动内存管理,垃圾回收功能数组下标越界检查多态 比较 jvm jre jdk 常…...

“程序员求职攻略:IT技术岗面试的必备技巧“

文章目录 每日一句正能量前言分享面试IT公司的小技巧IT技术面试有哪些常见的问题?分享总结遇到过的面试题后记 每日一句正能量 人活一世,不在乎朋友多少,不问财富几车,关键看在你最困难的时候,是否有一个伸出援手的人&…...

回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测

回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测 目录 回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现WOA-ELM鲸鱼算法优化极限学习机多输入回归预测&#…...

方法的定义和格式

方法 什么是方法? 方法是程序中最小的执行单元 定义:把一些代码打包在一起,该过程称为方法 实际开发过程中,什么时候用到方法: 重复的代码,具有独立功能的代码可以抽取到方法中 实际开发中,方…...

【Linux】进程篇(补):简易 shell 的实现(进程深刻理解、内建命令的使用)

文章目录 makefilemybash.c 代码逻辑框架(重要的是,边写边查!) 命令行提示符,fflush 刷新显示获取 输入的 有效字符串,定义一个字符数组,用 fgets 从键盘上获取(注意处理命令行输入…...

django Ajax--前后端数据交互

一.Django的Ajax和JavaScript的Ajax Django的Ajax和JavaScript的Ajax实质上是指同一种技术,即异步JavaScript和XML(Asynchronous JavaScript and XML)。它允许在不刷新整个页面的情况下,通过前后端之间的异步交互来获取或发送数据…...

【嵌入式学习笔记】嵌入式入门1——GPIO

1.什么是GPIO General Purpose Input Output,即通用输入输出端口,简称GPIO,作用是负责采集外部器件的信息或者控制外部器件工作,即输入输出。 2.STM32 GPIO简介 2.1.GPIO特点 不同型号,IO口数量可能不一样&#x…...

[SQL挖掘机] - 多表连接: union

介绍: sql中的union是用于合并两个或多个select语句的结果集的操作符。它将多个查询的结果合并成一个结果集,并自动去除重复的行。请注意,union操作要求被合并的查询返回相同数量和类型的列。 用法: union的基本语法如下: select_stateme…...

AI面试官:SQL Server数据库(三)

AI面试官:SQL Server数据库(三) 当涉及到.NET工程师中关于SQL Server数据库的面试题时,主要考察候选人的数据库知识、SQL查询能力、数据库设计和优化等方面。 文章目录 AI面试官:SQL Server数据库(三)31. 数据库并发控制是什么?数据库有哪些常见的并发控制机制?32. 什…...

python刑事案卷图片转pdf

分两步,第一步是转图片,第二步是合并。 # -*- coding: utf-8 -*- import glob,os from PIL import Imagedef convert_to_pdf(path):# 打开图片文件img Image.open(path)# 将图片转换为 PDF,并保存到同名文件pdf_path os.path.splitext(path…...

vue使用driver.js完成页面引导的功能

需求:给客户做一个页面引导,教客户怎么做 效果: driverjs官方文档 一.安装driver.js # Using npm npm install driver.js# Using pnpm pnpm install driver.js# Using yarn yarn add driver.js 二.在自己需要引导的页面上引入driver.js i…...

学习中遇到的好博客

c日志工具之——log4cpp ECU唤醒的本质就是给ECU供电。 小文件:零拷贝技术 传输大文件:异步 IO 、直接 IO:如何高效实现文件传输:小文件采用零拷贝、大文件采用异步io直接io (123条消息) Linux网络编程 | 彻底搞懂…...

在CSDN学Golang云原生(Kubernetes集群安全)

一,ABAC授权模式 Kubernetes ABAC(Attribute-Based Access Control)授权模式是一种基于属性的访问控制模型,它可以根据用户或组的属性决定是否允许他们访问 Kubernetes 集群中的资源。 在使用 ABAC 授权模式时,管理员…...

浅谈深度神经网络

Deep neural networks are completely flexible by design, and there really are no fixed rules when it comes to model architecture. -- David Foster 前言 神经网络 (neural network) 受到人脑的启发,可模仿生物神经元相互传递信号。神经网络就是由神经元组成…...

『C语言初阶』第六章-操作符详解

前言 今天小羊又来为铁汁们更新C语言初阶的操作符详解,我们在平时写代码时总会写到一些算术操作符和赋值操作符,可是当铁汁们遇到其他的操作符时,就会望而却步,甚至写出一些bug,所以这期我给铁汁们带来新鲜出炉的操作…...

企业知识文档管理+群晖nas安全云存储

企业知识管理系统,利用软件系统或其他工具的企业管理方法,利用软件系统或其他工具,对组织中大量的有价值的方案、策划、成果、经验等知识进行分类存储和管理,积累知识资产避免流失,促进知识的学习、共享、培训、再利用…...

​《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(9)-Fiddler如何设置捕获Https会话​

1.简介 由于近几年来各大网站越来越注重安全性都改成了https协议,不像前十几年前直接是http协议直接裸奔在互联网。还有的小伙伴或者童鞋们按照上一篇宏哥的配置都配置好了,想大展身手抓一下百度的包,结果一试傻眼了,竟然毛都没有…...

对比CahtGPT Bard Claude2对中文的理解

对比CahtGPT Bard Claude2对中文的理解 今天简单测试了一下目前这三个很火的模型对中文的理解能力 简单问题 鲁迅和周树人的关系 Bard CahtGPT Claude 介绍一下平凡的世界这本书 Bard CahtGPT...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

C++ 基础特性深度解析

目录 引言 一、命名空间(namespace) C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用(reference)​ C 中的引用​ 与 C 语言的对比​ 四、inline(内联函数…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...

动态规划-1035.不相交的线-力扣(LeetCode)

一、题目解析 光看题目要求和例图,感觉这题好麻烦,直线不能相交啊,每个数字只属于一条连线啊等等,但我们结合题目所给的信息和例图的内容,这不就是最长公共子序列吗?,我们把最长公共子序列连线起…...