首页 > 系统相关 >RDMA远程直接内存访问

RDMA远程直接内存访问

时间:2023-08-23 10:02:47浏览次数:42  
标签:VB RNIC 存储 RDMA 内存 WQ WQE 远程


RDMA(RemoteDirect Memory Access)技术全称远程直接内存访问,就是为了解决网络传输中服务器端数据处理的延迟而产生的。它将数据直接从一台计算机的内存传输到另一台计算机,无需双方操作系统的介入。这允许高吞吐、低延迟的网络通信,尤其适合在大规模并行计算机集群中使用。RDMA通过网络把资料直接传入计算机的存储区,将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响,这样就不需要用到多少计算机的处理能力。它消除了外部存储器复制和上下文切换的开销,因而能解放内存带宽和CPU周期用于改进应用系统性能。

RDMA远程直接内存访问_数据

RDMA操作细节

       RDMA提供了基于消息队列的点对点通信,每个应用都可以直接获取自己的消息,无需操作系统和协议栈的介入。
       消息服务建立在通信双方本端和远端应用之间创建的Channel-IO连接之上。当应用需要通信时,就会创建一条Channel连接,每条Channel的首尾端点是两对Queue Pairs(QP)。每对QP由Send Queue(SQ)和Receive Queue(RQ)构成,这些队列中管理着各种类型的消息。QP会被映射到应用的虚拟地址空间,使得应用直接通过它访问RNIC网卡。除了QP描述的两种基本队列之外,RDMA还提供一种队列Complete Queue(CQ),CQ用来知会用户WQ上的消息已经被处理完。

       RDMA提供了一套软件传输接口,方便用户创建传输请求Work Request(WR),WR中描述了应用希望传输到Channel对端的消息内容,WR通知QP中的某个队列Work Queue(WQ)。在WQ中,用户的WR被转化为Work Queue Element(WQE)的格式,等待RNIC的异步调度解析,并从WQE指向的Buffer中拿到真正的消息发送到Channel对端。

RDAM单边操作 (RDMA READ)

READ和WRITE是单边操作,只需要本端明确信息的源和目的地址,远端应用不必感知此次通信,数据的读或写都通过RDMA在RNIC与应用Buffer之间完成,再由远端RNIC封装成消息返回到本端。

对于单边操作,以存储网络环境下的存储为例,数据的流程如下:
1.   首先A、B建立连接,QP已经创建并且初始化。
2.   数据被存档在B的buffer地址VB,注意VB应该提前注册到B的RNIC (并且它是一个Memory Region) ,并拿到返回的local key,相当于RDMA操作这块buffer的权限。
3.   B把数据地址VB,key封装到专用的报文传送到A,这相当于B把数据buffer的操作权交给了A。同时B在它的WQ中注册进一个WR,以用于接收数据传输的A返回的状态。
4.   A在收到B的送过来的数据VB和R_key后,RNIC会把它们连同自身存储地址VA到封装RDMA READ请求,将这个消息请求发送给B,这个过程A、B两端不需要任何软件参与,就可以将B的数据存储到A的VA虚拟地址。
5.   A在存储完成后,会向B返回整个数据传输的状态信息。

单边操作传输方式是RDMA与传统网络传输的最大不同,只需提供直接访问远程的虚拟地址,无须远程应用的参与其中,这种方式适用于批量数据传输。

RDMA 单边操作 (RDMA WRITE)

对于单边操作,以存储网络环境下的存储为例,数据的流程如下:
1.   首先A、B建立连接,QP已经创建并且初始化。
2.   数据remote目标存储buffer地址VB,注意VB应该提前注册到B的RNIC(并且它是一个Memory Region),并拿到返回的local key,相当于RDMA操作这块buffer的权限。
3.   B把数据地址VB,key封装到专用的报文传送到A,这相当于B把数据buffer的操作权交给了A。同时B在它的WQ中注册进一个WR,以用于接收数据传输的A返回的状态。
4.   A在收到B的送过来的数据VB和R_key后,RNIC会把它们连同自身发送地址VA到封装RDMA WRITE请求,这个过程A、B两端不需要任何软件参与,就可以将A的数据发送到B的VB虚拟地址。
5.   A在发送数据完成后,会向B返回整个数据传输的状态信息。
单边操作传输方式是RDMA与传统网络传输的最大不同,只需提供直接访问远程的虚拟地址,无须远程应用的参与其中,这种方式适用于批量数据传输。

RDMA 双边操作 (RDMA SEND/RECEIVE)

 RDMA中SEND/RECEIVE是双边操作,即必须要远端的应用感知参与才能完成收发。在实际中,SEND/RECEIVE多用于连接控制类报文,而数据报文多是通过READ/WRITE来完成的。
对于双边操作为例,主机A向主机B(下面简称A、B)发送数据的流程如下:
1.   首先,A和B都要创建并初始化好各自的QP,CQ
2.   A和B分别向自己的WQ中注册WQE,对于A,WQ=SQ,WQE描述指向一个等到被发送的数据;对于B,WQ=RQ,WQE描述指向一块用于存储数据的Buffer。
3.   A的RNIC异步调度轮到A的WQE,解析到这是一个SEND消息,从Buffer中直接向B发出数据。数据流到达B的RNIC后,B的WQE被消耗,并把数据直接存储到WQE指向的存储位置。
4.  AB通信完成后,A的CQ中会产生一个完成消息CQE表示发送完成。与此同时,B的CQ中也会产生一个完成消息表示接收完成。每个WQ中WQE的处理完成都会产生一个CQE。
双边操作与传统网络的底层Buffer Pool类似,收发双方的参与过程并无差别,区别在零拷贝、Kernel Bypass,实际上对于RDMA,这是一种复杂的消息传输模式,多用于传输短的控制消息。

 

 

RDMA远程直接内存访问_数据_02

标签:VB,RNIC,存储,RDMA,内存,WQ,WQE,远程
From: https://blog.51cto.com/u_16234093/7199338

相关文章

  • C语言数组(3)--- 一维数组的内存存储
    一.引入我们前面已经介绍了一维数组的创建以及使用,下面我们来探究一下一维数组在内存中的存储#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(void){ intarr[]={1,2,3,4,5,6,7,8,9,10}; intsz=sizeof(arr)/sizeof(arr[0]); for(inti=0;i<sz;i++......
  • 远程桌面的命令行工具实现方式
    一.主要技术  1.rathole端口转发工具,服务端运行在公网,客户端运行在目标机上;  2.windows系统(目标机)安装sshd服务;安装方法参考网址:win10安装openssh失败,使用离线安装包  3.在windows系统上运行Cygwin(在windows系统上运行linux命令)......
  • 使用 Python ssh 远程登陆服务器的最佳方案
    在使用Python写一些脚本的时候,在某些情况下,我们需要频繁登陆远程服务去执行一次命令,并返回一些结果。在shell环境中,我们是这样子做的。sshpass-p${passwd}ssh-p${port}-l${user}-oStrictHostKeyChecking=noxx.xx.xx.xx"ls-l"然后你会发现,你的输出有很多你并不......
  • 【译】未来预测:远程办公或将引领下一个十年的工作趋势!
    在21世纪的背景下,就业前景的不确定性日益加剧。鉴于科技进步的脚步迅速和社会经济环境的变动,预测未来十年的职业趋势无疑是一项充满挑战的任务。另一方面,依据现行模式和预期,我们也有能力构建出一些趋势和预测。以下,我将针对其中的部分趋势进行探讨,并对近期的就业情况做出预测。自......
  • 分布式光伏储能系统远程监控运维解决方案
    行业背景随着经济发展对于能源需求的不断提升,光伏发电作为一种重要的可再生清洁能源,受到国家和企业的重点关注。光伏发电是将太阳能转换为电能的过程,其输出功率“靠天吃饭”,容易受到太阳辐射强度、温度等环境因素影响,具有波动性、间歇性、不稳定性等特性。多地开始要求分布式新能源......
  • 远程代码执行漏洞
    远程代码执行:RemoteCodeExecute同样的道理,因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。不管是使用了代码执行的函数,还是使用了不安全的反序列化等等。因此,如果需要给前端用户提供操作类的API接口,一定需要对接口输入的内......
  • OS(七):存储器管理之内存管理方式
    1、连续分配方式连续分配方式:为用户程序分配一个连续的内存空间。连续分配有4种方式,分别为单一连续分配、固定分区分配、动态分区分配及动态重定位分配。1.1、单一连续分配作用与单用户、单任务操作系统。内存被分为系统区和用户区,系统区供OS使用,通常放在......
  • 2023-08-22 git remote -v 为空 ==》为空意味着没有你该仓库没有远程仓库地址
    我想给新建的项目A创建一个版本库,so,我gitinit,然后我用gitremote-v查看,回车然后就为空了,百度了一下,说是没有你该仓库没有远程仓库地址;我还以为会链接到我其他的仓库去,看来不会,so,我在github创建了一个远程仓库,然后用gitremote-v链接到该仓库;即gitremote-v远程仓库地址;回车......
  • 变速器装配生产线如何实现远程监控和智能运维
    变速器又称变速箱,是用来改变发动机转速和转矩的装置,是汽车制造业的重要部件之一。随着自动化控制系统的发展,越来越多的变速器厂商实现自动化生产,包含零部件切削、装配、密封、注油、贴标等过程,从而替代人工实现高效率的生产,并降低成本支出。 变速器装配生产线包括压装机、拧紧机、......
  • SQL Server因设置最大内存太小导致无法启动的解决方案
    首先是    在服务器上发现SQLServer占用内存过大,128G服务器内存它占用高达100多G。于是就去找解决方案,找了几篇文章发现都是通过修改SQLServer服务器最大内存让其释放占用内存,如图所示,我把最大内存修改为128MB。发现问题    然后我就发现我的SQLServer服务无......