什么是RDMA
RDMA(Remote Direct Memory Access)技术全称远程直接数据存取,就是为了解决网络传输中服务器端数据处理的延迟而产生的。RDMA通过网络把资料直接传入计算机的存储区,将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响,这样就不需要用到多少计算机的处理功能。它消除了外部存储器复制和文本交换操作,因而能解放内存带宽和CPU周期用于改进应用系统性能。
RDMA的理解
-
1.传统意义上的DMA
直接内存访问(DMA) 方式,是一种完全由硬件执行I/O交换的工作方式.在这种方式中, DMA 控制器从CPU 完全接管对总线的控制,数据交换不经过CPU ,而直接在内存和110 设备之间进行.DMA工作时,由DMA 控制器向内存发出地址和控制信号,进行地址修改,对传送字的个数计数,并且以中断方式向CPU 报告传送操作的结束。
使用DMA 方式的目的是减少大批量数据传输时CPU 的开销.采用专用DMA 控制器(DMAC) 生成访存地址并控制访存过程.优点有操作均由硬件电路实现,传输速度快;CPU 基本不干预,仅在初始化和结束时参与, CPU 与外设并行工作,效率高。
-
2.RDMA工作原理
目前,普通网卡集成了支持硬件校验和的功能,并对软件进行了改进,从而减少了发送数据的拷贝量,但无法减少接收数据的拷贝量,而这部分拷贝量要占用CPU 的大量计算周期.普通网卡的工作过程如下:先把收到的数据包缓存到系统上,数据包经过处理后,相应数据被分配到一个TCP 连接;然后,接收系统再把主动提供的TCP 数据同相应的应用程序联系起来,并将数据从系统缓冲区拷贝到目标存储地址.这样,制约网络速率的因素就出现了:应用通信强度不断增加和主机CPU 在内核与应用存储器间处理数据的任务繁重使系统要不断追加主机CPU 资源,配置高效的软件并增强系统负荷管理.问题的关键是要消除主机CPU 中不必要的频繁数据传输,减少系统间的信息延迟。
RDMA 是通过网络把资料直接传入计算机的存储区,将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响,这样就不需要用到多少计算机的处理功能.它消除了外部存储器复制和文本交换操作,因而能腾出总线空间和CPU 周期用于改进应用系统性能. 目前通用的做法需由系统先对传入的信息进行分析与标记,然后再存储到正确的区域.整体结构如图所示。
RDMA 的工作过程如下:
1)当一个应用执行RDMA 读或写请求时,不执行任何数据复制.在不需要任何内核内存参与的条件下, RDMA 请求从运行在用户空间中的应用中发送到本地NIC( 网卡)。
2) NIC 读取缓冲的内容,并通过网络传送到远程NIC。
3) 在网络上传输的RDMA 信息包含目标虚拟地址、内存钥匙和数据本身.请求完成既可以完全在用户空间中处理(通过轮询用户级完成排列) ,或者在应用一直睡眠到请求完成时的情况下通过内核内存处理.RDMA 操作使应用可以从一个远程应用的内存中读数据或向这个内存写数据。
4) 目标NIC 确认内存钥匙,直接将数据写人应用缓存中.用于操作的远程虚拟内存地址包含在RDMA 信息中。
-
3.RDMA申零拷贝技术
零拷贝网络技术使NIC 可以直接与应用内存相互传输数据,从而消除了在应用内存与内核内存之间复制数据的需要.内核内存旁路使应用无需执行内核内存调用就可向NIC 发送命令.在不需要任何内核内存参与的条件下, RDMA 请求从用户空间发送到本地NIC,并通过网络发送给远程NIC ,这就减少了在处理网络传输流时内核内存空间与用户空间之间环境切换的次数.RDMA 中的零拷贝技术主要实现方法如图所示。
在上图中,右边是传统TCP/IP 协议以及普通网卡进行的通信操作过程.很明显,当应用层想从网卡获得数据报文时需要经过2 个缓冲区和正常TCPIIP 协议钱,其中由软中断负责从第一个接收队列缓冲区读取数据报文,再拷贝到MSGBuff 中,最后由应用层通过系统调用将数据报文读到用户态.而左边则是利用RDMA来实现的零拷贝过程,规则如下:
1) RDMA 及其LLP( Lower Layer Protocol)可以在NIC 上实现(称为RNIC)。
2) 在1)中所说的2 种实现都是经过以下步骤:将收发的数据缓存到一个已经标记好的存储空间中,然后根据LLP 和RDMA 双方协商的规则直接将此存储空间映射到应用空间,这样就减少了传统实现方法中的至少2次内存拷贝,即实现零拷贝.其中细线表示数据流动方向,其实标记缓存就是通过RDMA 直接映射成为用户缓存空间的。
RDMA的构成
如上图为RDMA 的构成,RDMA的实现由RDMA、DDP 、MPA3 种协议共间实现,构成了iWARP协议族,用来保证高速网络的互操作性。RDMA 层用于将RMDA 读、写及Send 操作消息转化成RDMA 消息,并将RDMA 消息传送至DDP(Direct Data Placement)层,DDP应将RDMA消息分段封装成DDP 数据包转发到下层Marker-based,Protocol-data-unit-A1igned (MPA)层, MPA 层将DDP 数据包插入标识符,长度及CRC 校验,构成MPA 数据段。TCP 层负责对TCP 数据段进行调度,确保发包能够顺利到达目标位置。IP 层则在数据包中增加必要的网络路由数据信息。
RDMA数据操作方法
RDMA 协议为远端直接数据缓存提供7 种类型的控制操作.除了远端缓冲区读取操作之外,每一种RDMA 控制操作都只产生一个对应的RDMA 消息。
1)Send: 发送操作使用Send 消息将发送方应用的数据直接发送到数据接收方应用尚未明确声明的缓冲区中.故Send 消息使用的是DDP 的无标记的缓冲区数据传递模型,将上层应用消息传递到接收方应用的元标记队列式缓冲区中。
2) Send with Invalidate: 在Send 基础上,加了一个导航标记Stag. 当该消息缓存在Stag 所指定对端应用缓冲区中,并将消息到达通知传达给接收方应用后,接收方应用就再不允许发送方应用介人该缓冲区,直到接收方应用重新声明该缓冲区可用后才可以供发送方应用继续使用。
3) Send with Solicited Event (Send with SE): 该消息用来将发送方应用的数据直接发送到数据接收方应用的无标记队列式缓冲区中,具备Send 所有的功能同时增加对消息的反馈。
4) Send with Solicited Event and Invalidate (Send with SE and Invalidate): 该消息所对应的操作是将发送方应用的数据直接发送到数据接收方应用尚未明确声明的缓冲区中,具备Send with SE 所有的功能同时增加对消息的反馈。
5) Remote Direct Memory Access W出e: 对应于RDMA 写操作,用来将发送方应用的数据传递到接收方应用已声明的缓冲区中.在这个操作中,接收方应用事先应该己经分配出带标记的应用接收缓冲区,并允许发送方应用直接进行缓冲区写操作.同时,发送方应用还在声明中得到了上述缓冲区的位置、大小和相应的Stag 等信息.之后发送方应用开始发起RDMA 写操作,该操作使用DDP 的带标记的缓冲区数据传递模型,将发送方应用的消息直接传递到接收方应用所声明的带标记缓冲区中。
6) Remote Direct Memory Access Read: 对应于RDMA 读操作,将对端(对应于数据源)带标记应用缓冲区的数据传递到本地(对应于数据接收方)的带标记应用缓冲区.数据源的上层应用首先需要事先分配出带标记的应用缓冲区,并允许对该缓冲区内容直接进行读操作.同时,数据源上层应用还要将待声明的数据源缓冲区的位置、大小和相应的Stag 等信息传递到本地上层应用.数据接收方上层应用在得到上述声明后,分配相应的带标记应用缓冲区,开始从对端读取数据操作。
7) Terminate: 终止操作使用Terminate 消息将本地发生的错误信息通知给对端应用,以终止当前数据直接缓存操作.终止操作使用DDP 的元标记缓冲区模型将Terminate 传递到对端的无标记缓冲区。
==RDMA 在数据传输中的应用[3]==。
-
1.RDMA 的应用
RDMA 的优势在于可利用传统的网络硬件以TCP/IP 及以太网络标准来建立因特网RDMA 将被用来把小型服务器连接为一个群集可以处理现今一些十几颗处理器的高端服务器才能够处理的大型数据库如果把R D M A 及TOE 以及10GB 以太网络放在一起这是个相当吸引人的技术RDMA 正在迅速成为高速集群和服务器区域网的一种基本特性InfiniBand网络和实现虚拟接口架构的网络支持RDMA 应用于带传输卸载引擎网卡的RDMA over TCP/IP 正在开发之中采用RDMA 来获取高性能的协议包括Sockets Direct ProtocolSCSI RDMA Protocol SRP 和DirectAccess File System DAFS 采用RDMA 的通信库包括Direct AccessProvider Library DAPL MessagePassing Interface MPI 和VirtualInterface Provider Library VIPL运行分布式应用程序的集群是RDMA 能够大显身手的领域之一通过DAPL 或VIPL以及集群上运行的数据库软件来使用RDMA 可在相同的节点数目下获得更高的性能和更好的延展性使用MPI的集群科技运算应用程序通过支持互连RDMA 实现了低延迟时间低开销和高吞吐量这一结果也使它获得了巨大的性能提升其他初期的RDMA 应用还有通过D A F S 的远程文件服务器访问通过SRP 的存储设备访问RDMA 技术正在迅速成为高速集群系统和存储域网络的基本特征技术其中i W A R P /R D M A 是一类基本构造块此外还有iSER 它是用于RDMA 的iSCSI 扩展充分利用了R D M A 的功能RDMA 的其他早期应用包括通过D A F S 的远程文件服务器访问和通过SRP 的刀片服务器存储访问RDMA 正在迅速成为高速集群和服务器区域网的一种基本特性。
-
2. NAS 和SAN 中的应用
传统的直接连接存储DAS DirectAccess Storage 是以服务器为中心的存储结构这一存储体系结构存在容量限制连接距离有限不易于共享和管理等不可克服的缺点已经不能够满足网络时代的应用需求网络时代的到来使存储技术发生了巨大变化网络附加存储N A SNetwork Attatched Storage 存储区域网络S A N(Storage Area Network)既能为网络上的应用系统提供丰富快速简便的存储资源又能共享存储资源并对其实施集中管理成为当今理想的存储管理和应用模式NAS结构存在一些难以解决的问题如传输能力有限可扩展性有限数据备份能力有限并且不能对数据库服务提供有效的支持DAFS 把RDMA 的优点和N A S的存储能力集成在一起全部读写操作都直接通过RDMA 驱动器执行从而降低了网络文件协议所带来的系统负载今后的NAS 存储系统将采用DAFS 技术提高系统性能并且在性能和价格上与SAN 存储系统进行有力的竞争。
-
3.Infiniband
Infiniband的四大优点基于标准的协议10 GB/s 性能RDMA 和传输卸载优势在于R D M A 传输卸载高速度InfiniBand网络和采用虚拟接口架构的网络支持RDMA 使用具有传输卸载引擎的NIC 的RDMA over TCP/IP 支持Infiniband的服务器使用主机通道适配器HCA 把协议转换到服务器内部的PCI-X 或者PCI-Xpress 总线H C A 具有R D M A 功能有时也称之为内核旁路(Kernel Bypass)。
一个典型的基于RDMA应用的程序结构大致如下:
(1)得到设备清单,清单上的每一个设备都要有一个名字和一个全球唯一标识符(Globally Unique Identifier,简称GUID);
(2)根据名字或者GUID打开指定设备,并对设备的性能进行检查(包括共享的接收队列等);
(3)分配一个保护区域,以便存储信息,允许并限制用户只能与惟一的用户进行传递,其中包括地址处理,队列,内存区域,共享的接收队列;
(4)注册一个内存区;
(5)创建一个完成队列,一个完成队列包含对完成工作的要求,每个要求将在完成队列中产生一个队列完成事件,队列完成事件用来判读工作要求是否成功的完成了;
(6)创建一个队列,包含发送队列和接收队列。并进入准备发送状态;
(7)利用队列进行通讯,完成任务要求;
(8)进行清理,反序清除已创建的数据:删除队列,删除完成队列,注销内存区,释放保护区,关闭设备。