个人总结的RDMA网络原理

个人总结的RDMA网络原理

一、基本知识
RDMA(Remote Direct Memory Access)技术全称远程直接内存访问,就是为了解决网络传输中客户端与服务器端数据处理的延迟而产生的。它将数据直接从一台计算机的内存传输到另一台计算机,无需双方操作系统的介入。这允许高吞吐、低延迟的网络通信,尤其适合在大规模并行计算机集群中使用。RDMA通过网络把资料直接传入计算机的内存中,将数据从一个系统快速移动到远程系统内存中,而不对操作系统造成任何影响,这样就不需要用到多少计算机的处理能力。它消除了数据包在用户空间和内核空间复制移动和上下文切换的开销,因而能解放内存带宽和CPU周期用于改进应用系统性能。(原始的TCP/IP通过封装数据包的形式,通过OS与协议栈进行解析、处理数据,主机开销变多
个人总结的RDMA网络原理
RDMA网络的三个显著特点:(1)低延时(2)低CPU开销(3)高带宽

二、RDMA技术
目前RDMA有三种不同的硬件实现。分别是InfiniBand、iWarp(internet Wide Area RDMA Protocol)、RoCE(RDMA over Converged Ethernet)。目前,大致有三类RDMA网络,分别是Infiniband、RoCE、iWARP。其中,Infiniband是一种专为RDMA设计的网络,从硬件级别保证可靠传输 , 而RoCE 和 iWARP都是基于以太网的RDMA技术,支持相应的verbs接口。从图中不难发现,RoCE协议存在RoCEv1和RoCEv2两个版本,主要区别:RoCEv1是基于以太网链路层来实现的RDMA协议(交换机需要支持PFC等流控技术,在物理层保证可靠传输),而RoCEv2是以太网TCP/IP协议中UDP层实现(RoCEv2的最大改进是支持IP路由)。从性能上,很明显Infiniband网络最好,但网卡和交换机是价格也很高,然而RoCEv2和iWARP仅需使用特殊的网卡就可以。RDMA网络目的就是把计算和存储分开了。
个人总结的RDMA网络原理
三、RDMA的工作过程与细节
RDMA 的工作过程如下:
(1)当一个应用执行RDMA 读或写请求时,不执行任何数据复制.在不需要任何内核内存参与的条件下,RDMA 请求从运行在用户空间中的应用中发送到本地NIC( 网卡)。
(2)NIC 读取缓冲的内容,并通过网络传送到远程NIC。
(3)在网络上传输的RDMA 信息包含目标虚拟地址、内存钥匙和数据本身请求,既可以完全在用户空间中处理(通过轮询用户级完成排列),又或者在应用一直睡眠到请求完成时的情况下通过系统中断处理。RDMA 操作使应用可以从一个远程应用的内存中读数据或向这个内存写数据。
(4)目标NIC 确认内存钥匙,直接将数据写人应用缓存中,用于操作的远程虚拟内存地址包含在RDMA 信息中。

RDMA操作细节
**RDMA提供了基于消息队列的点对点通信,每个应用都可以直接获取自己的消息,无需操作系统和协议栈的介入。**消息服务建立在通信双方的本地与远端应用之间创建的Channel-IO连接之上。当APP需要通信时,就会创建一条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对端。RDMA有单边读、单边写,双边操作。