rdma不是软件,而是一种应用插件技术,RDMA技术全称远程直接内存访问,就是为了解决网络传输中服务器端数据处理的延迟而产生的。它将数据直接从一台计算机的内存传输到另一台计算机,无需双方操作系统的介入。
这允许高吞吐、低延迟的网络通信,尤其适合在大规模并行计算机集群中使用。RDMA通过网络把资料直接传入计算机的存储区,将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响,这样就不需要用到多少计算机的处理能力。
它消除了外部存储器复制和上下文切换的开销,因而能解放内存带宽和CPU周期用于改进应用系统性能。
RDMA工作原理
普通网卡集成了支持硬件校验的功能,并对软件进行了改进,从而减少了发送数据的拷贝量,但无法减少接收数据的拷贝量,而这部分拷贝量要占用CPU 的大量计算周期。普通网卡的工作过程,先把收到的数据包缓存到系统上,数据包经过处理后,相应数据被分配到一个TCP连接。
以上内容参考 百度百科-RDMA
姓名:周肇星;学号:22011110028;学院:通信工程学院
部分素材取自 https://zhuanlan.zhihu.com/p/138874738
【嵌牛导读】RDMA技术全称远程直接数据存取,就是为了解决网络传输中服务器端数据处理的延迟而产生的。RDMA通过网络把资料直接传入计算机的存储区,将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响,这样就不需要用到多少计算机的处理功能。它消除了外部存储器复制和上下文切换的开销,因而能解放内存带宽和CPU周期用于改进应用系统性能。本专题将针对RDMA技术进行介绍!
【嵌牛鼻子】计算机网络,高性能网络,RDMA
【嵌牛提问】读完本文,对RDMA技术的概况有所认识了吗?
【嵌牛正文】
InfiniBand specification R1.3, Chapter3, 3.6.1, Page 126【描述零拷贝的优势】
DMA(直接内存访问)是一种能力,允许在计算机主板上的外部设备(PCIe设备)直接把数据发送到内存中去,数据搬运不需要CPU的参与
传统内存访问需要通过CPU进行数据Copy来移动数据,通过CPU将内存中的Buffer1移动到Buffer2中
DMA模式:可以同DMA Engine之间通过硬件将数据从Buffer1移动到Buffer2,而不需要操作系统CPU的参与,大大降低了CPU Copy的开销
在“节点A给节点B发消息”这一传输过程中:
A节点在用户空间中的内存数据,需要经过CPU拷贝到内核空间的缓冲区中,才可以被网卡访问,这期间数据会经过软件实现的TCP/IP协议栈,加上各层头部和校验码。网卡通过DMA拷贝内核中的数据到网卡内部的缓冲区中,进行处理后通过物理链路发送给对端
节点B收到数据后,会进行相反的过程:从网卡内部缓冲区中,将数据通过DMA拷贝到内存内核空间的缓冲区中,然后CPU会通过TCP/IP协议栈对其进行解析,将数据取出来拷贝到用户空间中
RDMA( Remote Direct Memory Access )意为远程直接地址访问,通过RDMA,本端节点可以“直接”访问远端节点的内存。所谓直接,指的是可以像访问本地内存一样,绕过传统以太网复杂的TCP/IP网络协议栈读写远端内存,而这个过程对端是不感知的,而且这个读写过程的大部分工作是由硬件而不是软件完成的
在使用了RDMA技术时,两端的CPU几乎不用参与数据传输过程(只参与控制面):
节点A的网卡直接从内存的用户空间通过DMA拷贝数据到内部存储空间,然后硬件进行各层报文的组装后,通过物理链路发送到对端网卡
节点B的RDMA网卡收到数据后,剥离各层报文头和校验码,通过DMA将数据直接拷贝到用户空间内存中
浅谈 Linux下的零拷贝机制
由于Linux等操作系统将内存划分为用户空间和内核空间,在传统的Socket通信流程中CPU需要多次把数据在内存中来回拷贝。而通过RDMA技术,我们可以直接访问远端已经注册的内存区域
无需处理器处理数据的复制传输,使得不涉及内核介入,因而能够提供高带宽、低延迟通信。用户可以直接通过QP传输内存缓冲区中的数据。此外,R_Keys&L_Keys提供的保护消除了操作系统验证数据传输的需要。因此,操作系统可以允许从用户模式发布WQE、绕过操作系统,从而消耗更少的指令周期
从Linux系统上看,除了引导系统的BIN区,整个内存空间主要被分成两个部分:内核空间(Kernel space)、用户空间(User space)。用户空间和内核空间的空间、操作权限以及作用都是不一样的
内核空间是Linux自身使用的内存空间,主要提供给程序调度、内存分配、连接硬件资源等程序逻辑使用
用户空间则是提供给各个进程的主要空间,用户空间不具有访问内核空间资源的权限,因此如果应用程序需要使用到内核空间的资源,则需要通过系统调用来完成:从用户空间切换到内核空间,然后在完成相关操作后再从内核空间切换回用户空间
案例为将系统中磁盘上的文件发送到远端
传统的I/O操作进行了4次用户空间与内核空间的上下文切换,以及4次数据拷贝,其中4次数据拷贝中包括了2次DMA拷贝和2次CPU拷贝
指的是IO(数据)流程可以绕过内核,即在用户层就可以把数据准备好并通知硬件准备发送和接收。避免了系统调用和上下文切换的开销
Cardona_Towards_Hyperscale_High_v1.pdf
因此传统的TCP/IP存在的问题主要是:I/O Bottleneck瓶颈问题
RDMA的分层模型分成两部分"控制通路"和“数据通路”
控制通路需要进入内核态准备通信所需的内存资源,而数据通路指的是实际数据交互过程中的流程
RDMA中SEND-RECV流程:
数据收发绕过了内核并且数据交换过程并不需要CPU参与,报文的组装和解析是由硬件完成的
指的是可以在远端节点CPU不参与通信的情况下(当然要持有访问远端某段内存的“钥匙”才行)对内存进行读写,这实际上是把报文封装和解析放到硬件中做了。而传统的以太网通信,双方CPU都必须参与各层报文的解析,如果数据量大且交互频繁,对CPU来讲将是一笔不小的开销,而这些被占用的CPU计算资源本可以做一些更有价值的工作
异步接口
异步事件:RDMA在I/O操作过程中并不阻塞相关线程,TCP/IP却是阻塞方式
此处所说的阻塞,是指TCP将数据发送到内核缓冲区是阻塞的
消息基于事务(Message based transactions) ,数据被处理为离散消息而不是流,消除了TCP/IP中应用程序将流切割为不同消息/事务的需求
分散/聚合条目:读取多个内存缓冲区的数据,作为一个流发送(聚合),或接受一个流数据写入到多个内存缓冲区(分散)
RDMA协议
开启rdma文件共享:但是这个并不局限也是可控的,如果我们进行开发过程中, 就会在内核的库函数文件目录。
InfiniBand(IB):从一开始就支持RDMA的新一代网络协议。由于这是一种新的网络技术,因此需要支持该技术的网卡和交换机。
RDMA过融合以太网(RoCE):即RDMA over Ethernet, 允许通过以太网执行RDMA的网络协议。这允许在标准以太网基础架构(交换机)上使用RDMA,只不过网卡必须是支持RoCE的特殊的NIC。
RDMA 的工作过程如下:
1)当一个应用执行RDMA 读或写请求时,不执行任何数据复制.在不需要任何内核内存参与的条件下, RDMA 请求从运行在用户空间中的应用中发送到本地NIC( 网卡)。
2) NIC 读取缓冲的内容,并通过网络传送到远程NIC。
3) 在网络上传输的RDMA 信息包含目标虚拟地址、内存钥匙和数据本身.请求完成既可以完全在用户空间中处理(通过轮询用户级完成排列) ,或者在应用一直睡眠到请求完成时的情况下通过内核内存处理.RDMA 操作使应用可以从一个远程应用的内存中读数据或向这个内存写数据。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)