一种基于NIC的RDMA可靠传输协议的设计与实现*
2014-09-14庞征斌常俊胜
夏 军,庞征斌,刘 路,张 峻,常俊胜
(国防科学技术大学计算机学院,湖南 长沙 410073)
一种基于NIC的RDMA可靠传输协议的设计与实现*
夏 军,庞征斌,刘 路,张 峻,常俊胜
(国防科学技术大学计算机学院,湖南 长沙 410073)
高性能计算机不断增长的规模和复杂性使得可靠性成为影响高性能计算机系统可用性的关键因素,系统互连网络是高性能计算机的重要组成部分,其可靠性是高性能计算机系统设计必须考虑的重要问题。针对高性能计算机系统互连网络可能出现的故障,提出一种基于NIC实现的RDMA可靠传输协议,给出了一种通用的设计实现方案,并对该方案的几种具体优化设计实现方法进行了讨论。提出的可靠传输协议及实现方案能容忍系统互连网络可能出现的多种网络故障,并能尽量减少实现可靠传输所带来的额外开销。实验结果表明,所提出的RDMA可靠传输的实际测试性能与无连接RDMA传输相当。
RDMA;可靠性;网络接口;可靠传输协议
1 引言
高性能计算机系统日益增长的规模和不断增加的复杂性使系统硬件部件出现故障的可能性增大[1],性能已不再是衡量系统好坏的唯一指标,系统的可用性成为高性能计算机系统设计需要优先考虑的重要因素。系统互连网络既是高性能计算机系统的重要组成部分,也是容易出现瞬时或永久性故障的部件[2]。互连网络一般会提供点点可靠传输机制,但却无法应对诸如报文丢失或链路断开这样的网络故障。一旦出现这样的网络故障,应用程序将无法正常完成,一般需要通过系统软件提供的检查点机制来恢复故障,然后从最近的检查点开始重新执行。系统软件提供的检查点机制虽然能在一定程度上容忍网络故障,但是检查点的记录会影响程序的执行性能,并且出错恢复的软件开销也比较大。硬件通过提供端端可靠数据传输服务能容忍报文丢失或链路断开这样的网络故障,与基于软件的错误恢复方法相比,端端可靠数据传输机制能在消息级进行实时错误检测和恢复,不影响程序正常执行,出错后也不用暂停程序重启执行,因此其错误检测和出错恢复的开销较小。
Cray公司的SeaStar[3]、Gemini[4]和Aries[5]互连芯片主要依靠CRC检错和滑动窗口重传机制保证点点可靠传输,硬件上未提供端端可靠传输服务,消息的端端可靠传输依赖于上层软件实现。Infiniband[6]提供硬件级的端端可靠传输服务。但是,其用于连接服务的上下文信息保存在CPU内存中,一般每建立一个连接需要消耗几KB的内存。随着系统规模的增长和单结点线程数的增加,建立Infiniband连接所需的内存容量也会成倍增长,严重影响系统的可扩展性。Sivaram[7]基于IBM HPS网络架构提出了一种可靠RDMA传输的解决方案,数据传输前首先使用会合协议建立连接,其用于连接服务的上下文信息存放在片外SRAM中,支持多路径传输,具有良好的带宽扩展性,但其使用的会合协议较为复杂,且RDMA写被转化为RDMA读实现,传输延迟也较大。
本文提出了一种基于NIC实现RDMA可靠数据传输的方法,RDMA传输前首先建立连接,通过超时机制和消息级数据校验机制进行错误检测,通过端端重传机制进行错误恢复。该方法将用于连接服务的上下文信息存放在NIC中,不消耗CPU内存,因此具有较好的可扩展性。本文还给出了基于NIC实现RDMA可靠数据传输的通用设计实现方案,分析了可能影响性能的几个因素,并给出了具体的设计实现优化方法。最后通过一组基准测试程序对基于NIC的RDMA可靠数据传输性能进行了测试,测试结果表明其实测性能与无连接RDMA数据传输相当。
2 RDMA可靠传输协议设计
本文提出的RDMA可靠传输协议是在文献[8]的基础上改进而来的,使之更易操作且易于硬件实现。RDMA可靠传输协议是基于连接的协议,RDMA消息在发送之前首先需要在发送方和接收方之间建立连接,然后才能开始传送消息,最后传送完毕还需返回完成响应。在连接建立和消息传送期间,可靠传输协议通过超时机制和消息级数据校验机制进行错误检测,通过重传机制进行错误恢复。
连接建立和数据传输期间的各种状态信息需要分别记录在发送方和接收方,我们称发送方用于记录这些状态信息的数据结构为发送方上下文,简称TCxt;接收方用于记录这些状态信息的数据结构为接收方上下文,简称RCxt。TCxt通过TCxtID进行索引,而RCxt通过RCxtID进行索引。发送方每建立一个连接就需要分配一个TCxtID,且对应的上下文信息存放在TCxt[TCxtID]中;同理,接收方每建立一个连接就需要分配一个RCxtID,且对应的上下文信息存放在RCxt[RCxtID]中。TCxt和RCxt数据结构中各个位域的定义如表1所示。
Table 1 Context structure of RDMAreliable communication protocol表1 RDMA可靠传输协议上下文数据结构
表1给出了RCxt每个连接独立的数据结构,除此之外,RCxt还有所有连接共享的数据结构,即RCxtFreeNum和RCxtPRI。RCxtFreeNum记录当前空闲的RCxt项数,而RCxtPRI记录当前分配空闲RCxt所需的优先级。发送方采用连接建立申请和Nack重试的方式来竞争接收方有限的RCxt资源。每次重新申请建立连接,连接申请优先级就会增加,而接收方会记录当前被拒绝的连接建立申请的最大优先级,防止发送方的连接申请出现饿死情形。RDMA可靠连接协议所使用的报文类型如表2所示。
Table 2 Packets of RDMA reliable communication protocol表2 RDMA可靠传输协议报文
RDMA可靠传输连接建立流程如下所示:
(1)发送方获取TCxtID和MsgID,设置TTimer=TimerCnct,TStatus=连接申请,CnctPRI=0,TErrCnt=0,TRetryNum=0,发送CnctRqtApply报文。
(2)如果CnctRqtApply报文正确到达接收方(即既无丢失,也无消息级数据校验错):
①如果报文中的SendID、TCxtID与RCxt中的某项匹配:
a.如果报文中的MsgID与RCxt中的MsgID相同,则发送CnctRspAck报文。
b.否则丢弃该报文。
②如果报文中的SendID、TCxtID与任何RCxt项都不匹配:
a.如果RCxtFreeNum>0且报文中的CnctPRI≥RCxtPRI或RCxtFreeNum>1,新分配RCxt项,RCxtFreeNum递减,如果CnctPRI≥RCxtPRI则置RCxtPRI=0。设置RTimer=TimerRcvData,Rpcnt=消息数据长度,Rrcnt=0,MsgID=报文中的MsgID,RRetryNum=0,RErrCnt=0,发送CnctRspAck报文。
b.否则,如果CnctPRI>RCxtPRI,则设置RCxtPRI=CnctPRI,发送CnctRspNack报文。
(3)如果CnctRqtApply报文到达接收方出现消息级数据校验错,则丢弃该报文。
(4)如果CnctRspAck报文正确到达发送方:
①如果能找到SendID、TCxtID、MsgID匹配的TCxt项且TStatus=连接申请,设置TTimer=TimerSendData,TStatus=发送数据,TRetryNum=报文中的RRetryNum,开始发送数据报文。
②否则丢弃报文。
(5)如果CnctRspNack报文正确到达发送方:
①如果能找到SendID、TCxtID、MsgID、RRetryNum匹配的TCxt项且TStatus=连接申请,设置TTimer=TimerCnct,TStatus=连接申请,CnctPRI递增,发送CnctRqtApply报文。
②否则丢弃报文。
(6)如果CnctRspAck或CnctRspNack报文到达发送方出现消息级数据校验错,则丢弃该报文。
(7)如果TStatus=连接申请且TTimer=0。如果TErrCnt 还未达到允许的最大错误次数,则重置TTimer= TimerCnct,递增TErrCnt,发送CnctRqtApply报文;否则回收对应的TCxt项。
在连接已经建立的前提下,RDMA写数据的发送流程如下所示:
(1)如果数据报文正确到达接收方:
①如果报文中的SendID、TCxtID、RCxtID、MsgID、TRetryNum与RCxt中的某项匹配,则接收该数据报文,置Rrcnt=Rrcnt+报文携带的数据字节数。如果Rrcnt=Prcnt,发送CnctRspCmpAck报文,回收对应的RCxt项。
②否则丢弃该报文。
(2)如果数据报文到达接收方出现消息级数据校验错:
①如果报文中的SendID、TCxtID、RCxtID、MsgID、TRetryNum与RCxt中的某项匹配:
a.如果RErrCnt未达到允许的最大错误次数,则置Rrcnt=0,RTimer= TimerRcvData,递增RRetryNum和RErrCnt,发送CnctRspRetry报文。
b.否则回收对应的RCxt项。
②否则丢弃报文。
(3)如果CnctRspCmpAck报文正确到达发送方:
①如果报文中的SendID、TCxtID、RCxtID、MsgID与TCxt中的某项匹配且TStatus=发送数据或发送探测报文,消息正确传输完成,回收对应TCxt项。
②否则丢弃报文。
(4)如果CnctRspCmpAck报文到达发送方出现消息级数据校验错,则丢弃该报文。
(5)如果RTimer=0且Rrcnt!=Prcnt:
①如果RErrCnt未达到允许的最大错误次数,则置Rrcnt=0,RTimer= TimerRcvData,递增RRetryNum和RErrCnt,发送CnctRspRetry报文。
②否则回收对应RCxt项。
(6)如果CnctRspRetry报文正确到达发送方:
①如果报文中的SendID、RecvID、TCxtID、RCxtID、MsgID与TCxt中某项匹配且TStatus=发送数据或发送探测报文
a.如果TErrCnt未达到允许的最大错误次数:如果TRetryNum<报文中的RRetryNum,设置TRetryNum=报文中的RRetryNum,TTimer= TimerSendData,TStatus=发送数据,递增TErrCnt,重新发送数据报文。否则丢弃该报文。
b.否则丢弃该报文,回收对应的TCxt项。
②否则丢弃该报文。
(7)如果CnctRspRetry报文到达发送方出现消息级数据校验错,则丢弃该报文。
(8)如果TTimer=0且TStatus=发送数据:如果TErrCnt未达到允许的最大错误次数,则设置TStatus=发送探测报文,TTimer= TimerDetect,递增TErrCnt,发送CnctRqtDetect报文;否则回收对应的TCxt项。
(9)如果TTimer=0且TStatus=发送探测报文:如果TErrCnt未达到允许的最大错误次数,则设置TTimer= TimerDetect,递增TErrCnt,发送CnctRqtDetect报文;否则回收对应的TCxt项。
(10)如果CnctRqtDetect报文正确到达接收方:
①如果报文中的SendID、TCxtID、RCxtID、MsgID与RCxt中的某项匹配:
a.如果报文中的TRetryNum=RRetryNum:如果RErrCnt未达到允许的最大错误次数,则置Rrcnt=0,RTimer= TimerRcvData,递增RRetryNum和RErrCnt,发送CnctRspDetectAck报文(包括探测结果=“探测成功”位域);否则回收对应RCxt项。
b.如果报文中的TRetryNum!= RRetryNum,则返回CnctRspDetectAck报文(包括探测结果=“探测成功”位域)。
②否则返回CnctRspDetectAck报文(包括探测结果=“探测失败”位域)。
(11)如果CnctRqtDetect报文到达接收方出现消息级数据校验错,则丢弃该报文。
(12)如果CnctRspDetectAck报文正确到达发送方:
①如果报文中的SendID、RecvID、TCxtID、RCxtID、MsgID与TCxt中的某项匹配且TStatus=发送探测报文:
a.如果探测结果=“探测成功”且TRetryNum!=报文中的RRetryNum,则设置TMsgIDLow=报文中的RRetryNum,TTimer=TimerSendData,TStatus=发送数据,重新发送数据报文。
b.如果探测结果=“探测失败”且TRetryNum=报文中的RRetryNum,消息正确传输完成,回收对应的TCxt项。
c.否则丢弃该报文。
②否则丢弃该报文。
(13)如果CnctRspDetectAck报文到达发送方出现消息级数据校验错,则丢弃该报文。
RDMA读数据的传输不需要建立连接,不用在接收方分配RCxt项,但仍需要在发送方分配TCxt项。发送方可以直接发送读请求到接收方并等待接收方返回读数据。发送方通过TCxt项中的Tpcnt和Trcnt统计已收到的读数据字节数和判断数据是否已收齐。RDMA读数据的数据传输流程比较简单,本文就不再详细阐述。
3 RDMA可靠传输协议实现
NIC一般由主机接口、网络接口、发送部件和接收部件构成。为了使NIC能支持RDMA可靠数据传输,需要增加可靠连接管理部件,支持RDMA可靠传输的NIC总体结构如图1所示。
Figure 1 Structure of the NIC supporting RDMA reliable communication图1 支持RDMA可靠传输的NIC总体结构
发送部件在传输数据前,需要由可靠连接管理部件分配上下文资源和进行连接建立,接收部件需要根据可靠连接管理部件的匹配结果决定是否接收数据。如果接收数据出现消息级数据校验错误,接收部件将通知可靠连接管理部件进行重传。如果连接建立超时,可靠连接管理部件将重试建立连接;如果数据传输超时,可靠连接管理部件将通知发送部件重新传送数据。数据传输结束或传输失败时,可靠连接管理部件会回收对应的上下文资源。
可靠连接管理部件是NIC支持RDMA可靠传输的控制部件,由发送方上下文资源及其控制逻辑和接收方上下文资源及其控制逻辑组成。为了便于硬件高效实现,可靠连接管理部件中的发送方上下文资源和接收方上下文资源都采用相同的流水化实现方式,其实现结构如图2所示。对于发送方上下文,输入队列主要由来自于发送部件的连接建立申请和来自于网络接口的响应报文构成;对于接收上下文,输入队列主要由请求报文构成。输入报文经过仲裁后进入可靠连接协议处理流水线。协议流水线由四站构成:第一站将仲裁出的输入报文寄存一拍,生成访问上下文数据缓冲区的地址索引,即TCxtID/RCxtID;第二站根据地址索引访问上下文数据缓冲区;第三站将读出的上下文数据缓冲区数据寄存一拍;第四站根据上下文数据和输入报文查找协议表,产生新表项写入上下文数据缓冲区和生成新报文写入输出队列。对于发送方上下文,输出队列主要由请求报文构成,而对于接收方上下文,输出队列主要由响应报文构成。上下文数据缓冲区存放如表1所示的TCxt和 RCxt信息,硬件上具体可以由SRAM实现。协议表逻辑实现第2节中介绍的RDMA可靠传输协议,给定输入报文和对应的上下文数据信息,协议表会输出新生成的报文和新的上下文数据信息。输入队列仲裁时,为了保证上下文数据缓冲区的读-修改-写的原子性,仲裁逻辑会禁止相同的TCxtID/RCxtID同时进入流水线。为了实现该功能,仲裁逻辑需要记录当前流水线中活跃的TCxtID和RCxtID。
Figure 2 Structure of reliable connection management component图2 可靠连接管理部件实现结构
为了使可靠连接管理部件能够按图2所示的流水线结构实现,超时机制的实现方法是首先要考虑的问题。如果按第2节所述那样将TTimer和RTimer实现在上下文数据缓冲区中,那么上下文数据缓冲区就无法用SRAM实现,并且多个上下文同时发生超时时,流水线也无法同拍对多个上下文进行处理。因此,TTimer和RTimer必须在流水线之外实现。超时计数器可以用寄存器阵列实现,并且用一个位向量记录超时计数器是否发生了超时,向量中的每一位与上下文中的每个超时计数器一一对应。超时请求通过该向量产生并写入输入队列,然后通过仲裁进入协议流水线进行处理。这种实现方式能将同时产生的超时请求串行化,而且在流水线外实现超时机制使得超时请求的生成不影响协议流水线的流水化处理操作。
其次,按第2节所述数据报文到达接收方后需要在上下文中寻找匹配项。如果接收部件将收到的数据报文送入可靠连接管理部件进行检查,并等待其返回检查结果,那么接收数据过程将出现停顿,严重影响数据传输性能。为了不影响接收部件接收数据,数据报文的检查功能应在接收部件中实现。接收部件存储与数据报文检查相关的部分上下文信息,可靠连接管理部件在新分配上下文或上下文信息有变动时将相关的上下文信息写入接收部件中,这样接收部件在接收数据时将独立于可靠连接管理部件进行数据报文检查,有利于接收部件实现流水化数据接收。
再次,接收部件每正确接收一个数据报文,就需要通知可靠连接管理部件进行字节计数,如果字节计数逻辑如第2节所述在协议处理中实现,那么将会有大量的计数请求需要进入流水线进行处理,这会降低协议流水线的处理效率,并且当协议流水线的输入队列不足以存储所有计数请求时,接收部件仍将出现停顿,从而影响数据传输性能。为了避免接收部件出现停顿和提高流水线的处理效率,字节计数功能应该在协议流水线之外实现。上下文中的字节计数逻辑可以在流水线之外用一组计数器实现,计数器初始化为需要接收的字节数,接收部件每正确接收一个数据报文,对应的计数器就减去相应的字节数。当计数器减为0时,将会产生计满请求并写入输入队列,然后通过仲裁进入协议流水线进行处理。
4 性能评测
本文在NIC中实现了基于FPGA平台的RDMA可靠传输协议。NIC采用PCIE G3接口与CPU进行对接,采用1.25 Gbps的网络接口与路由器进行对接。NIC不仅支持基于可靠传输协议的有连接服务,同时支持无连接服务,并且配置有连接服务的发送方和接收方下上文各256项。提供无连接服务时,图1中的可靠连接管理部件将被旁路,即发送部件可以直接发送数据,而接收部件可以直接接收数据。
FPGA平台由16个结点通过两个路由器互连构成,每个结点包含两个CPU和一个NIC。图3给出了基于可靠传输有连接服务和不可靠传输无连接服务的NPB基准测试集的性能对比测试结果。NPB采用64线程、C/D级数据规模的测试题,每个结点上运行四个线程。从图3给出的测试结果可以看出,有连接与无连接的性能相当。由于有连接服务的多个发送方和接收方上下文可以同时工作,这样某个上下文的连接建立可以与其它上下文的数据传输重叠进行,从而隐藏连接建立延迟。从图3还可以看出,对于某些测试题,有连接的执行性能甚至超过了无连接。这是因为两个路由器之间存在多条链路连接,由于有连接服务支持报文乱序传输,因此路由器可以根据当前多个输出端口的忙闲程度选择负载较轻的端口进行输出,即具有一定的自适应路由选择能力;而无连接服务不支持报文乱序传输,路由器只能选择固定端口进行输出,即使该端口负载较重。
Figure 3 Test results of connection compared to no connection for NPB benchmarks图3 NPB基准测试集有连接与无连接的性能对比测试结果
5 结束语
可靠性已成为评价高性能计算机系统的重要指标,针对网络中可能出现的故障,本文提出了一种RDMA可靠数据传输协议,并给出了其在NIC中实现的方法。本文提出的可靠传输协议能容忍网络中出现的报文丢失、消息级数据校验错等错误,给出的优化实现方案能流水化发送和接收数据,减少可靠传输管理开销。本文对该可靠传输协议在FPGA平台上进行了实现,并对其进行了性能评测,结果表明RDMA可靠传输的实际测试性能与无连接RDMA传输相当。
[1] Shipman G M, Graham R L, Bosilca G. Network fault tolerance in Open MPI[C]∥Proc of the 13th International Euro-Par Conference, 2007:868-878.
[2] Schroeder B, Gibson G A. Understanding failures in petascale computers[C]∥Proc of 2007 Scientific Discovery through Advanced Computing Program(SciDAC’07), 2007:220-230.
[3] Brightwell R, Pedretti K T, Underwood K D. Seastar interconnect:Balanced bandwidth for scalable performance[J]. IEEE MICRO, 2006, 26(3):41-57.
[4] Alverson R, Roweth D, Kaplan L. The Gemini system interconnect[C]∥Proc of the 18th IEEE Symposium on High Performance Interconnects, 2010:83-87.
[5] Alverson B, Froese E, Kaplan L, et al. Cray XC series networking[R]. WP-Aries01-1012, USA:Cray Incorporation, 2012.
[6] lnfiniBand Trade Association. Infiniband architecture specification, Version 1.2.1 [EB/OL]. [2007-11-01]. http://www.infinibandta.org.
[7] Sivaram R, Govindaraju R K, Hochschild P, et al. Breaking the connection:RDMA deconstructed[C]∥Proc of the 13th Annual IEEE Symposium on High Performance Interconnects, 2005:36-42.
[8] Liu Lu, Zhang Lei, Cao Ji-jun, et al. The design of RDMA reliable communication protocol based on dynamic connection[J]. Computer Engineering&Science, 2012, 34(8):184-190. (in Chinese)
附中文参考文献:
[8] 刘路,张磊,曹继军,等. 基于动态连接的RDMA可靠传输协议设计[J]. 计算机工程与科学, 2012, 34(8):184-190.
XIAJun,born in 1976,PhD,associate research fellow,his research interest includes high performance computer architecture.
DesignandimplementationofaNICbasedRDMAreliablecommunicationprotocol
XIA Jun,PANG Zheng-bin,LIU Lu,ZHANG Jun,CHANG Jun-sheng
(College of Computer,National University of Defense Technology,Changsha 410073,China)
With the continually growing size and complexity of high performance computing systems, reliability has become the crucial factor of affecting the availability of high performance computing systems. System network is the important component of high performance computing systems and its reliability must be considered in high performance computing system design. Aiming at failures possibly occurring in high performance computing system network, the paper proposes a NIC based RDMA reliable communication protocol, gives a general framework of realizing this protocol and discusses some optimized implementation methods based on the framework. The reliable communication protocol and its implementation can tolerate system network failures and can reduce the overhead of realizing reliable communications. The experimental results show that the performance of the RDMA reliable communication is comparable with that of the no-connection RDMA communication.
RDMA;reliability;network interface;reliable communication protocol
2013-07-10;
:2013-10-06
国家自然科学基金资助项目(61103083,61133007);国家863计划资助项目(2012AA01A301)
1007-130X(2014)02-0216-06
TP316.4
:A
10.3969/j.issn.1007-130X.2014.02.005
夏军(1976-),男,重庆人,博士,副研究员,研究方向为高性能计算机系统结构。E-mail:xiajun@nudt.edu.cn
通信地址:410073 湖南省长沙市国防科学技术大学计算机学院Address:College of Computer,National University of Defense Technology,Changsha 410073,Hunan,P.R.China