将晦涩难懂的技术讲的通俗易懂
分类: LINUX
2017-11-19 21:09:06
RDMA(远程直接内存访问)技术浅析
摘要:远程直接内存访问(即Remote Direct Memory Access)是一种直接内存访问技术,它将数据直接从一台计算机的内存传输到另一台计算机,无需双方操作系统的介入。
DMA
首先,对DMA技术做简单的复习和总结。在最初的PC体系结构中,CPU是系统中唯一的总线主控器,也就是说,为了提取和存储RAM存储单元的值,CPU是唯一可以驱动地址/数据总线的硬件设备。而随着更多诸如PCI的现代总线体系结构的出现,如果提供合适的电路,每一个外围设备都可以充当总线主控器。因此,现在所有的PC都包含一个辅助的DMA电路,它可以用来控制在RAM和IO设备之间数据的传送。DMA一旦被CPU激活,就可以自行传送数据;在数据传输完成之后,DMA发出一个中断请求,再由CPU接管。当CPU和DMA同时访问同一内存单元时,所产生的的冲突由一个名为内存仲裁器的硬件电路解决。
由于DMA的设置时间比较长,所以使用DMA最多的是磁盘驱动器和其他需要一次传送大量字节的设备,而在传送数量很少的数据时直接使用CPU效率更高。
RDMA简介
传统的TCP/IP技术在数据包处理过程中,要经过操作系统及其他软件层,需要占用大量的服务器资源和内存总线带宽,数据在系统内存、处理器缓存和网络控制器缓存之间来回进行复制移动,给服务器的CPU和内存造成了沉重负担。尤其是网络带宽、处理器速度与内存带宽三者的严重”不匹配性”,更加剧了网络延迟效应。
RDMA是一种新的内存访问技术,RDMA让计算机可以直接存取其他计算机的内存,而不需要经过处理器耗时的处理。RDMA将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响。RDMA技术的原理及其与TCP/IP架构的对比如下图所示。
在实现上,RDMA实际上是一种智能网卡与软件架构充分优化的远端内存直接高速访问技术,通过在网卡上将RDMA协议固化于硬件,以及支持零复制网络技术和内核内存旁路技术这两种途径来达到其高性能的远程直接数据存取的目标。
(1)零复制:零复制网络技术使网卡可以直接与应用内存相互传输数据,从而消除了在应用内存与内核之间复制数据的需要。因此,传输延迟会显著减小。
(2)内核旁路:内核协议栈旁路技术使应用程序无需执行内核内存调用就可向网卡发送命令。在不需要任何内核内存参与的条件下,RDMA请求从用户空间发送到本地网卡并通过网络发送给远程网卡,这就减少了在处理网络传输流时内核内存空间与用户空间之间环境切换的次数。
(3)没有CPU参与: 应用程序可以访问远程内存,而不占用远程机器中的任何CPU。远程存储器将被读取,无需任何干预的远程进程(或处理器)。远程CPU中的缓存将不会被访问的内存内容填满。
(4)基于消息的事务:数据被作为离散消息处理,而不是作为流,这消除了应用将流分成不同消息/事务的需要。
(5)分散/收集条目支持: RDMA支持本地处理多个分散/收集条目,即读取多个内存缓冲区并将其作为一个流或获取一个流并将其写入多个内存缓冲区。
在具体的远程内存读写中,RDMA操作用于读写操作的远程虚拟内存地址包含在RDMA消息中传送,远程应用程序要做的只是在其本地网卡中注册相应的内存缓冲区。远程节点的CPU除在连接建立、注册调用等之外,在整个RDMA数据传输过程中并不提供服务,因此没有带来任何负载。
RDMA的不同实现
常见的RDMA实现包括虚拟接口架构、基于融合以太网的RDMA(RoCE)、[8][9]InfiniBand、iWARP。如下图所示,RDMA的实现方式主要分为InfiniBand和Ethernet两种传输网络。而在以太网上,又可以根据与以太网融合的协议栈的差异分为iWARP和RoCE(包括RoCEv1和RoCEv2)。
InfiniBand(IB): 从一开始就支持RDMA的新一代网络协议。由于这是一种新的网络技术,因此需要支持该技术的网卡和交换机。
RDMA过融合以太网(RoCE): 一种允许通过以太网进行RDMA的网络协议。其较低的网络头是以太网头,其上网络头(包括数据)是InfiniBand头。这允许在标准以太网基础架构(交换机)上使用RDMA。只有NIC应该是特殊的,并支持RoCE。
互联网广域RDMA协议(iWARP): 允许通过TCP执行RDMA的网络协议。在IB和RoCE中存在功能,iWARP不支持这些功能。这允许在标准以太网基础架构(交换机)上使用RDMA。只有NIC应该是特殊的,并支持iWARP(如果使用CPU卸载),否则所有iWARP堆栈都可以在SW中实现,并且丢失了大部分的RDMA性能优势。
其中,InfiniBand是最早实现RDMA的网络协议,被广泛应用到高性能计算中。但是InfiniBand和传统TCP/IP网络的差别非常大,需要专用的硬件设备,承担昂贵的价格。
在基于以太网的版本中,下面重点选择RoCEv2来讨论。可以看出,RoCEv2的协议栈包括IB传输层、TCP/UDP、IP和Ethernet,其中,后面三层都使用了TCP/IP中相应层次的封包格式。RoCEv2的封包格式如下图所示。
其中,UDP包头中,目的端口号为4791即代表是RoCEv2帧。IB BTH即InfiniBand Base Transport Header,定义了IB传输层的相应头部字段。IB Payload即为消息负载。ICRC和FCS分别对应冗余检测和帧校验。
IB BTH格式和字段定义如下图。其中,Opcode用于表明该包的type或IB PayLoad中更高层的协议类型。S是Solicited Event的缩写,表明回应者产生应该产生一个事件。M是MigReq的缩写,一般用于迁移状态。Pad表明有多少额外字节被填充到IB PayLoad中。TVer即Transport Header Version,表明该包的版本号。Partition Key用来表征与本Packet关联的逻辑内存分区。rsvd是reserved的缩写,该字段是保留的。Destination QP表明目的端Queue Pair序号。A是Acknowledge Request,表示该packet的应答可由响应者调度。PSN是Packet Sequence Number,用来检测丢失或重复的数据包。
最后,顺带说下RDMA网卡的出包。如前文所述,RDMA是一种智能网卡与软件架构充分优化的远端内存直接高速访问技术,通过将RDMA技术固化于网卡上实现,即,在RoCEv2协议栈中,IB BTH、UDP、IP以及Ethernet Layer全是固化在网卡上的。用户空间的Application通过OFA Stack(亦或其他组织编写的RDMA stack)提供的verbs编程接口(比如WRITE、READ、SEND等)形成IB payload,接下来便直接进入硬件,由RDMA网卡实现负载的层层封装。
RDMA架构原理
RDMA最早专属于Infiniband架构,随着在网络融合大趋势下出现的RoCE和iWARP,这使高速、超低延时、极低CPU使用率的RDMA得以部署在目前使用最广泛的以太网上。
RDMAC(RDMA Consortium)和IBTA(InfiniBand Trade Association)主导了RDMA发展,RDMAC是IETF的一个补充并主要定义的是iWRAP和iSER,IBTA是infiniband的全部标准制定者,并补充了RoCE v1 v2的标准化。IBTA解释了RDMA传输过程中应具备的特性行为,而传输相关的Verbs接口和数据结构原型是由另一个组织OFA(Open Fabric Alliance)来完成。
相比传统DMA的内部总线IO,RDMA通过网络在两个端点的应用软件之间实现Buffer的直接传递;相比比传统的网络传输,RDMA又无需操作系统和协议栈的介入。RDMA可以轻易实现端点间的超低延时、超高吞吐量传输,而且基本不需要CPU、OS等资源介入,也不必再为网络数据的处理和搬移耗费过多其他资源。
(1) InfiniBand通过以下技术保证网络转发的低时延(亚微秒级),采用Cut-Through转发模式,减少转发时延;基于Credit的流控机制,保证无丢包;硬件卸载;Buffer尽可能小,减少报文被缓冲的时延 。
(2) iWARP(RDMA over TCP/IP) 利用成熟的IP网络;继承RDMA的优点;TCP/IP硬件实现成本高,但如果采用传统IP网络丢包对性能影响大。
(3) RoCE性能与IB网络相当;DCB特性保证无丢包;需要以太网支持DCB特性;以太交换机时延比IB交换机时延要稍高一些。
RoCEv2针对RoCE进行了一些改进,如引入IP解决扩展性问题,可以跨二层组网;引入UDP解决ECMP负载分担等问题。
基于InfiniBand的RDMA是在2000年发布规范,属于原生RDMA;基于TCP/IP的RDMA称作iWARP,在 2007年形成标准,主要包括MPA/ DDP/ RDMAP三层子协议;基于Ethernet的RDMA叫做RoCE,在2010年发布协议,基于增强型以太网并将传输层换成IB传输层实现。
扩展RDMA API接口以兼容现有协议/应用,OFED(Open Fabrics Enterprise Distribution)协议栈由OpenFabric联盟发布,分为Linux和windows版本,可以无缝兼容已有应用。通过使已有应用与RDMA结合后,性能成倍提升。
应用和RNIC(RDMA-aware Network Interface Controller)之间的传输接口层(Software Transport Interface)被称为Verbs。OFA(Open Fabric Alliance)提供了RDMA传输的一系列Verbs API,开发了OFED(Open Fabric Enterprise Distribution)协议栈,支持多种RDMA传输层协议。
OFED向下除了提供RNIC(实现 RDMA 和LLP( Lower Layer Protocol))基本的队列消息服务外,向上还提供了ULP(Upper Layer Protocols),通过ULP上层应用不需直接和Verbs API对接,而是借助于ULP与应用对接,这样使得常见的应用不需要做修改就可以跑在RDMA传输层上。
在Infiniband/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 Ellement(WQE)的格式,等待RNIC的异步调度解析,并从WQE指向的Buffer中拿到真正的消息发送到Channel对端。
RDMA中SEND/RECEIVE是双边操作,即必须要远端的应用感知参与才能完成收发。READ和WRITE是单边操作,只需要本端明确信息的源和目的地址,远端应用不必感知此次通信,数据的读或写都通过RDMA在RNIC与应用Buffer之间完成,再由远端RNIC封装成消息返回到本端。在实际中,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,这是一种复杂的消息传输模式,多用于传输短的控制消息。
对于单边操作,以存储网络环境下的存储为例(A作为文件系统,B作为存储介质),数据的流程如下
1) 首先A、B建立连接,QP已经创建并且初始化。
2) 数据被存档在A的buffer地址VA,注意VA应该提前注册到A的RNIC,并拿到返回的local key,相当于RDMA操作这块buffer的权限。
3) A把数据地址VA,key封装到专用的报文传送到B,这相当于A把数据buffer的操作权交给了B。同时A在它的WQ中注册进一个WR,以用于接收数据传输的B返回的状态。
4) B在收到A的送过来的数据VA和R_key后,RNIC会把它们连同存储地址VB到封装RDMA READ,这个过程A、B两端不需要任何软件参与,就可以将A的数据存储到B的VB虚拟地址。
5) B在存储完成后,会向A返回整个数据传输的状态信息。
单边操作传输方式是RDMA与传统网络传输的最大不同,只需提供直接访问远程的虚拟地址,无须远程应用的参与其中,这种方式适用于批量数据传输。
简单总结
1. Infiniband的成功取决于两个因素,一是主机侧采用RDMA技术,可以把主机内数据处理的时延从几十微秒降低到几微秒,同时不占用CPU;二是InfiniBand网络的采用高带宽(40G/56G)、低时延(几百纳秒)和无丢包特性
2. 随着以太网的发展,也具备高带宽和无丢包能力,在时延方面也能接近InfiniBand交换机的性能,所以RDMA over Ethernet(RoCE)成为必然,且RoCE组网成本更低。未来RoCE、iWARP和Infiniband等基于RDMA技术产品都会得到长足的发展。
参考文章:
http://blog.dujiong.net/2017/02/27/RDMA/