一种基于UD写立即数的长距RDMA乱序可靠传输方法与流程

摘要: 本发明涉及rdma,特别是涉及一种基于ud写立即数的长距rdma乱序可靠传输方法。背景技术:1、传统远程直接内存访问(remotedirectmemoryacc...
一种基于UD写立即数的长距RDMA乱序可靠传输方法与流程

本发明涉及rdma,特别是涉及一种基于ud写立即数的长距rdma乱序可靠传输方法。

背景技术:

1、传统远程直接内存访问(remote direct memory access,rdma)主要依赖可靠连接(reliable connection,rc)。但是,传统rdma rc在长距场景下有两个严重问题:1、整卡未完成包(outstanding packet)数限制:长距离高带宽延迟积(bdp)下,可靠连接的在途(in-flight)包数受硬件限制,管道填不满,带宽达不到线速。2、保序重传导致队头阻塞(head-of-line blocking):丢包时后续包被阻塞,长距离往返时延(rrt)下重传延迟放大。

技术实现思路

1、本发明目的在于,提供一种基于ud写立即数的长距rdma乱序可靠传输方法,以解决上述rdma rc在长距场景下存在的问题。

2、根据本发明,提供了一种基于ud写立即数的长距rdma乱序可靠传输方法,ud为不可靠数据报,rdma为远程直接内存访问,所述方法包括以下步骤:

3、s100,发送端将应用层传输请求拆分为不超过最大传输单元的多个数据包,为每个数据包构造立即数字段,并将携带对应的立即数字段和访问密钥的数据包以携带立即数的rdma写操作形式通过ud数据队列对依次发送至接收端;所述立即数字段包括网络序列号和代际翻转标记;其中,发送端将自身的本地内存缓冲区域mr1划分为两个半区,如果某数据包为前半区的最后一个数据包,则发送端为该数据包构造的立即数字段中代际翻转标记为表征翻转的第一值。

4、s200,接收端接收数据包,根据数据包携带的立即数字段中的网络序列号和访问密钥判断是否将数据包写入接收端自身的本地内存缓冲区,以及根据数据包携带的立即数字段中的代际翻转标记判断是否启动密钥更新处理。

5、其中,接收端将自身的本地内存缓冲区mr2划分为两个半区,判断是否将数据包写入接收端自身的本地内存缓冲区包括:如果接收的数据包携带的立即数字段中的网络序列号表征数据包需要写入的是前半区a,且数据包携带的访问密钥是a对应的密钥,则将接收的数据包写入a;如果接收的数据包携带的立即数字段中的网络序列号表征数据包需要写入的是前半区a,且数据包携带的访问密钥不是a对应的密钥,则将接收的数据包丢弃,不写入a;mr1和mr2的大小相等。

6、判断是否启动密钥更新处理包括:如果数据包携带的立即数字段中的代际翻转标记为表征翻转的第一值,则启动密钥更新处理;所述密钥更新处理包括:如果数据包是需要写入a的数据包,则等待a中所有数据包均接收完毕后对a对应的密钥进行更新。

7、本发明与现有技术相比至少具有以下有益效果:

8、本发明不再采用传统rc保序重传机制,而是采用不可靠数据报(unreliabledatagram,简称ud),并配合非标准硬件扩展的ud写立即数(write immediate)操作,使数据在长距离场景下能够满速并行传输,解决了现有技术中采用rc存在的整卡未完成包数限制和保序重传导致队头阻塞问题,提高了网络带宽,减小了重传延迟。

9、且本发明设计了双半区循环复用结构,每个半区拥有相互独立的动态密钥空间;在切换半区时,接收端等待前半区所有传输完全接收完毕后,仅对旧半区密钥执行更新,使旧半区迟到的、携带旧半区旧密钥的数据包被丢弃,不再写入旧半区,防止上述旧半区迟到的、携带旧半区旧密钥的数据包破坏数据,避免因内存重新复用导致的数据覆盖和损坏。

10、而且,本发明接收端利用全局位图记录每个数据包的到达状态,并维护接收端的全局连续前沿;软件层采用与单个传输请求解耦的全局确认机制和否认机制,使接收端通过控制队列对向发送端发送针对全局连续前沿的确认报文ack或包含全局空洞信息的否认报文nak,以及发送端能够根据接收的ack和nak实现对全链路数据的接收确认与重传调度,由此可以降低确认报文的开销,减少带宽;还能够实现局部丢包数据的重传,提高数据传输的可靠性。

1.一种基于ud写立即数的长距rdma乱序可靠传输方法,ud为不可靠数据报,rdma为远程直接内存访问,其特征在于,方法包括以下步骤:

2.根据权利要求1所述的基于ud写立即数的长距rdma乱序可靠传输方法,其特征在于,立即数字段为32位,立即数字段包括的前24位为网络序列号,第25-28位为槽位索引,第29位为槽位代际位,第30位为保留位,第31位为代际翻转标记,第32位为结束标记;结束标记用于表征数据包是否为一个传输请求的最后一个数据包。

3.根据权利要求1所述的基于ud写立即数的长距rdma乱序可靠传输方法,其特征在于,所述方法还包括:

4.根据权利要求3所述的基于ud写立即数的长距rdma乱序可靠传输方法,其特征在于,ack的触发条件包括:接收端检测到全局连续前沿推进的字节数超过第一预设阈值,或推进的数据包数量超过第二预设阈值,或当前时间达到预设时间阈值。

5.根据权利要求3所述的基于ud写立即数的长距rdma乱序可靠传输方法,其特征在于,所述接收端配置有拒绝确认定时器,在定时器到期时,遍历全局位图上的空洞,构造并发送nak;发送端接收nak后,定位空洞数据包,并将重传请求投递至与数据队列对独立的重传队列对执行重传。

6.根据权利要求1所述的基于ud写立即数的长距rdma乱序可靠传输方法,其特征在于,所述对a对应的密钥进行更新包括:对a对应的密钥进行+1处理。

7.根据权利要求1所述的基于ud写立即数的长距rdma乱序可靠传输方法,其特征在于,所述密钥更新处理还包括:如果数据包是需要写入接收端的自身的本地内存缓冲区的后半区b的数据包,则等待b中所有数据包均接收完毕后对b对应的密钥进行更新。

8.根据权利要求1所述的基于ud写立即数的长距rdma乱序可靠传输方法,其特征在于,mr1和mr2的大小均为128g,每个半区的大小为64g。

9.根据权利要求1所述的基于ud写立即数的长距rdma乱序可靠传输方法,其特征在于,s200还包括:等待a中所有数据包均接收完毕后,接收端向发送端发送半区切换确认报文,发送端收到半区切换确认报文后,同步更新本地缓存的前半区访问密钥。