首页> 中国专利> 并行计算机系统中基于接收方滑动窗口的数据传输方法

并行计算机系统中基于接收方滑动窗口的数据传输方法

摘要

本发明公开了一种并行计算机系统中基于接收方滑动窗口的数据传输方法,目的是保证现有并行计算机系统设计中基于乱序和不可靠网络的RDMA传输数据的完整正确性。技术方案是先在发送节点和接收节点间建立连接,在接收节点设置接收窗口,接收窗口只记录接收RDMA报文的编号,不对进入接收窗口的RDMA报文进行缓存;发送节点向接收节点发送RDMA报文并响应接收节点发回的重传请求报文,同时接收节点接收报文编号位于接收窗口之内的RDMA报文,并将RDMA报文中的数据写入接收节点的内存中;发送节点收到了接收节点发送的RDMA完成响应报文,发送节点结束本次RDMA传输。本发明相比于现有方法能够减少硬件资源开销,降低重传开销,提高传输的效率。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-03-22

    授权

    授权

  • 2015-04-29

    实质审查的生效 IPC(主分类):G06F13/28 申请日:20141216

    实质审查的生效

  • 2015-04-01

    公开

    公开

说明书

技术领域

本发明涉及并行计算机系统中,在两个计算节点之间进行内存数据搬移的方法,特 别是基于乱序和不可靠网络实现计算节点间基于接收方滑动窗口的数据传输方法。

背景技术

并行计算机系统通常是由多个计算节点(简记为节点)和互连网络组成,节点由处 理器、网络接口和内存组成,节点通过网络接口进行数据的发送接收,节点间通过互连 网络进行通信。并行计算机系统中,一种基本的通信模式是在两个节点(记为发送节点 和接收节点)间的内存中进行数据拷贝,也就是发送节点将本节点内存区域中的数据写 入到接收节点的指定内存区域中,这种通信模式通常称为远程直接内存访问(Remote  Direct Memory Access,RDMA)。

RDMA通信需要依赖并行计算机的互连网络完成,一般来说,一次RDMA传输的 数据量很大,在互连网络上进行数据传输时,需要将一次RDMA传输拆分成多个报文, 各个报文独立地由发送节点传输到接收节点。

互连网络中,为了提高网络的传输性能,在两个节点间可以设计多条路径,设计路 由算法在发送节点和接收节点间的多条路径中选择某一条路径进行报文传输。路由算法 考虑的因素一般包括:路径负载平衡、死锁避免、路径延迟等。由于多条路径的存在, 发送节点向接收节点发出的多个报文,到达接收节点的顺序可能与发送节点发出的顺序 不一致,也就是存在乱序传输的特点。

大规模并行计算机系统中,互连网络的规模通常很大,在实现上,难以保证互连网 络的可靠性,例如,网络中的某条通路可能会断开。不可靠的互连网络造成的结果是发 送节点向接收节点传输的报文,不一定能够最终到达接收节点。

从节点上运行的软件看来,RDMA传输的数据应该是正确完整的。如何基于乱序 和不可靠网络实现快速正确的RDMA传输是并行计算机系统设计中的重要问题之一。 目前现有的RDMA传输方法主要有两类:

1 基于发送节点滑动窗口的RDMA传输方法

采用这种方法的主要是美国Cray公司并行计算机系统,发送节点将已经发出、但 还未收到响应的报文保存在一个缓冲区中,称为发送滑动窗口,发送滑动窗口的大小代 表在没有收到接收节点确认信息的情况下发送节点最多可以发送的报文个数,一般根据 设计需要设置发送滑动窗口的大小。采用基于发送节点滑动窗口的RDMA传输方法进 行一次RDMA数据传输流程如下:发送节点向接收节点发送报文,同时将该报文保存 在发送滑动窗口中,启动硬件上的超时计数器,如果发送滑动窗口中的报文超时还未收 到接收节点返回的响应报文,则发送节点将重新向接收节点发送该报文;接收节点接收 到报文后,向报文的发送节点返回表明已经接收成功的响应报文;发送节点一旦接收到 响应报文,就将响应报文所对应的发送报文从发送滑动窗口中移除;如果发送节点的发 送滑动窗口满,则发送节点暂停向接收节点发送报文,直到有报文从发送滑动窗口中移 除后再恢复报文的发送;发送节点将一次RDMA传输的所有报文发送完成,并且收齐 了所有的响应报文后,一次RDMA传输操作完成。

这类方法存在如下缺点:1)由于接收节点需要为每个报文向发送节点返回响应报 文,因而网络中响应报文的数量很多,容易引起网络拥塞;2)发送滑动窗口需要设置 存储空间对每一个发送报文进行缓存,只有收到接收节点确认信息时才将报文从发送滑 动窗口中移除,消耗芯片上的存储器资源,因而硬件开销比较大。

2 基于接收方计数器的方法

采用这种方法的主要是天河系列计算机系统,采用基于接收方计数器的方法进行一 次RDMA数据传输流程如下:发送节点向接收节点进行RDMA传输时,首先告知接收 节点本次RDMA传输中所包含的报文总数,然后才进行报文的传输;接收节点对收到 的报文进行计数,当计数器达到报文总数时,接收节点向发送节点返回响应报文,告知 发送节点所有的报文都收齐;在接收节点上,为报文计数器设置超时机制,当计数器的 值超过一定时间还未收齐报文时,将通知发送节点重新发送本次RDMA传输的报文。

这类方法存在的缺点是,当接收节点的计数器超时后,要求发送节点将此次RDMA 传输的所有报文全部重发,重发的报文中可能大部分已经被接收节点成功接收到,因此, 当发送失败需要重传时此类方法重传开销大、易引起网络拥塞、传输效率低。

发明内容

本发明要解决的技术问题是:现有并行计算机系统设计中基于乱序和不可靠网络的 RDMA传输过程中需要保证传输数据的完整正确性,同时要保证数据传输性能较好, 而现有方法存在易引起网络拥塞、硬件开销大和重传开销大的问题。

为了解决上述技术问题,本发明提出一种基于接收方滑动窗口的快速数据传输方 法,该方法能够相比于现有方法减少硬件资源开销,降低重传开销,提高传输的效率。

具体技术方案为:

1)因为网络中每次RDMA传输的数据大小不固定,记系统支持的一次RDMA传 输的最大数据量为X字节(X为自然数,X的取值和系统设计相关),一次RDMA传 输的实际数据量为Y字节(Y为自然数,Y≤X),一个RDMA报文的数据大小为P字 节(P为自然数,和硬件实现中的RDMA报文格式有关,一般为512),一次RDMA数 据传输最多被划分成M个RDMA报文,(表示上取整),实际一次RDMA 数据传输被划分成N个RDMA报文,依照RDMA报文中所传输数据在内 存中的相对位置,将发送节点发出的RDMA报文进行编号,则报文的编号范围为0~ N-1。记一次RDMA传输的数据在发送节点内存中的基地址为Addr_Send,在接收节点 内存中的基地址为Addr_Recv,则此次RDMA传输第k(k为整数,0≤k≤N-1)个RDMA 报文的数据在发送节点内存中的地址为Addr_Send+k*P,并相应地存储到接收节点中地 址为Addr_Recv+k*P的内存中。发送节点将一次RDMA传输分解为N个RDMA报文 独立的进行传输,依次将发送节点内存中的数据传输到接收节点对应的内存区间中。发 送节点从内存中取出数据,封装成如图2所示的RDMA报文。RDMA报文包括四个域: 报文类型TYPE(3位)、报文编号PIDX(位)、尾标志位TAIL(1位)、数据 DATA(8*Y位),本发明中涉及到的报文类型有6种:RDMA报文、RDMA完成响应 报文、单报文重传请求报文、区间重传请求报文、连接请求报文、连接响应报文。其中, RDMA报文是数据报文,另外5种是控制报文,与现有技术中的控制报文格式一样, 因此,RDMA报文中,报文类型占据3位;一次RDMA数据传输最多被划分成M个 RDMA报文,因此,报文编号占据位;每个RDMA报文中的数据为Y字节, 即8*Y位。发送节点从内存中取出数据,将数据封装成N个RDMA报文,每个RDMA 报文封装方法如下:将报文类型域置为RDMA报文,报文编号填入PIDX域,TAIL域 初始值为0,如果报文编号等于N-1,则将TAIL置1,将内存中取出的数据填入数据域。

2)接收节点中设置接收滑动窗口(简记为接收窗口),接收节点设置R(R为正 整数,设计时根据系统规模和资源限制设置R的大小,一般为256~512)个接收窗口, 一次RDMA传输占用一个接收窗口,在网络中可能同时会有多个RDMA传输,占用多 个接收窗口,因此,在接收节点设置有指针变量W_Ptr,通过W_Ptr访问R个接收窗 口中任意一个接收窗口的信息,本发明只涉及一次RDMA传输过程中的改进,因此, 对接收窗口的数量R不作探讨。接收窗口的大小代表在接收窗口没有滑动时接收节点 最多可以接收的RDMA报文个数,记一个接收窗口的大小为W(W为正整数,根据网 络乱序程度选择不同的值,网络乱序程度越大,W取值越大,W一般为32~256)位。 如图4所示,每个接收窗口中的信息包括:1、窗口基地址索引号WBASE(位), WBASE表示接收窗口接收的报文编号从WBASE开始,接收窗口可以接收RDMA报 文的报文编号范围为[WBASE,WBASE+W-1],若收到的报文编号落在接收窗口之外, 则接收节点一律将其丢弃,一次RDMA传输最多被拆分成M个RDMA报文,因此, WBASE位宽为位;2、窗口接收向量WVEC(W位),WVEC向量从左至右计 算位索引号,索引号的范围为0~W-1,WVEC对应接收窗口中W个报文的接收状态; WVEC第m(m为整数,0≤m≤W-1)位的状态代表报文编号为WBASE+m的RDMA 报文的接收状态,若第m位为0,表明接收节点没有接收到报文编号为WBASE+m的 RDMA报文,若第m位为1,表明接收节点已经接收到报文编号为WBASE+m的RDMA 报文;3、标志位W_Tail(1位),W_Tail值为1时表明接收窗口已经接收到此次RDMA 传输的最后一个RDMA报文。在接收节点只有当收到RDMA报文的报文编号落入接收 窗口(即报文编号介于[WBASE,WBASE+W-1])时接收节点才将该RDMA报文收下, 若收到的报文编号落在接收窗口之外,则一律将其丢弃。记LOC(WVEC)表示向量 WVEC从左边开始、连续为1的位数(代表接收窗口已经连续成功接收的RDMA报文 个数),接收的报文编号刚好是滑动窗口的基地址WBASE,且该RDMA报文不是此次 RDMA传输的尾报文时,接收窗口向右滑动LOC(WVEC)位(表示接收节点成功接收 LOC(WVEC)个RDMA报文),接收节点更新WBASE的值为WBASE+LOC(WVEC) (表示接收窗口接下来接收的报文编号从WBASE+LOC(WVEC)开始),WVEC更新为 WVEC<<LOC(WVEC)(这是因为接收节点成功接收LOC(WVEC)个RDMA报文后, 接收窗口向右滑动LOC(WVEC)位,接收窗口向右滑动后,原WVEC中第 LOC(WVEC)+1位成为接收窗口向右滑动后WVEC的第1位,原WVEC中第 LOC(WVEC)+2位成为接收窗口向右滑动后WVEC的第2位,…,原WVEC中第W 位成为接收窗口向右滑动后WVEC的第W-LOC(WVEC)位,接收窗口向右滑动后 WVEC的第W-LOC(WVEC)+1位至第W位均为0,相当于WVEC左移LOC(WVEC) 位),其中<<为计算机中的左移运算符。可以看出,本发明接收节点滑动窗口与背景技 术发送节点滑动窗口的区别在于背景技术发送节点滑动窗口中需要对进入滑动窗口的 RDMA报文进行缓存,而本发明接收节点滑动窗口只记录接收RDMA报文的编号,不 存储RDMA报文的数据信息,即不对进入接收窗口的RDMA报文进行缓存;因此,本 发明可以减少硬件资源开销。

3)接收节点为每个接收窗口设置硬件超时计数器,由硬件寄存器实现。硬件超时 计数器用于判断接收窗口是否超过一定时长还未滑动,也就是接收节点在一定时长内未 收到任何RDMA报文。

本发明进行一次RDMA传输的过程如下:

第一步,在发送节点和接收节点间建立连接,具体过程如下:

1.1发送节点向接收节点发送连接请求报文,通过连接请求报文,接收节点为发送 节点分配好此次RDMA传输的接收窗口。接收窗口初始状态置WBASE为0,WVEC 为全0,W_Tail为0。

1.2接收节点分配好接收窗口后,向发送节点返回接收窗口在接收节点的指针 W_Ptr,通过该指针,接收节点能够从多个接收窗口中访问到此次RDMA传输使用的接 收窗口信息。

第二步,发送节点执行2.1步,向接收节点发送RDMA报文并响应接收节点发回 的重传请求报文,同时接收节点执行2.2步,接收报文编号位于接收窗口之内的RDMA 报文,并将RDMA报文中的数据写入接收节点的内存中。发送节点向接收节点发送 RDMA报文的过程中可能会收到接收节点发送过来的重传请求报文,重传请求报文中 携带着报文编号PIDX,发送节点对重传请求报文做出响应,向接收节点重新发送RDMA 报文。发送节点接收到的重传请求报文有两种类型,一种是单报文重传请求报文,即要 求发送节点重新发出编号PIDX的RDMA报文;另一种是区间重传请求报文,即要求 发送节点重传编号范围为[PIDX,N-1]的所有RDMA报文。

2.1发送节点向接收节点发送RDMA报文并响应接收节点发回的重传请求报文:

2.1.1发送节点从内存中取出数据,将数据拆分并封装成N个RDMA报文,每个 RDMA报文封装方法如下:将报文类型域置为RDMA报文,报文编号填入PIDX域, TAIL域初始值为0,如果报文编号等于N-1,则将TAIL置1,将内存中取出的数据填 入数据域;

2.1.2如果发送节点没有收到重传请求报文,发送节点向接收节点发送编号为i的 RDMA报文,转2.1.3;如果发送节点收到了接收节点返回的重传请求报文,则接收节 点对重传请求报文做出响应,向接收节点重新发送RDMA报文,如果是单报文重传请 求报文,则执行2.1.2.1,如果是区间重传请求报文,则执行2.1.2.2;

2.1.2.1发送节点获取重传请求报文中的报文编号PIDX,从内存中重新取出编号 PIDX的RDMA报文的数据,封装成RDMA报文,发送给接收节点;转2.1.3;

2.1.2.2发送节点取出重传请求报文中的报文编号PIDX,从内存中重新取出编号 PIDX的RDMA报文的数据,封装成RDMA报文,发送给接收节点;i置为PIDX,转 2.1.3;

2.1.3i增1,若i<N-1,表明此次RDMA传输的报文还没有发送完,转2.1.2;若i=N-1, 表明要发送的是本次RDMA传输的最后一个RDMA报文,将此报文的尾标志位TAIL 置1,转2.1.2;否则,i>N-1,表明发送节点已经将此次RDMA传输的所有RDMA报 文发送完毕,转2.1.4;

2.1.4若发送节点收到了接收节点发送的RDMA完成响应报文,转第三步;若发送 节点收到了单报文重传请求报文,发送节点获取重传请求报文中的报文编号PIDX,从 发送节点内存中地址为Addr_Send+PIDX*P的数据,封装成RDMA报文,发送给接收 节点,转2.1.4;若发送节点收到区间重传请求报文,转2.1.2.2;否则,发送节点停止 发送RDMA报文,转2.1.4;

2.2接收节点接收报文编号位于接收窗口之内(编号为WBASE~WBASE+W-1)的 RDMA报文,并将RDMA报文中的数据写入接收节点的内存中。对于接收窗口之外的 RDMA报文,接收节点丢弃报文。记接收节点收到的报文编号是PIDX,接收节点接收 RDMA报文过程如下:

2.2.1接收节点等待接收发送节点发来的RDMA报文,如果接收节点超时计数器超 时后还未收到RDMA报文,则转到2.2.2执行;如果收到了RDMA报文,则根据报文 编号PIDX,执行以下的步骤:

2.2.1.1如果PIDX<WBASE,表明接收的报文编号不在接收窗口内,则接收节点 将该RDMA报文丢弃,转2.2.1;

2.2.1.2如果PIDX=WBASE,表明接收的报文编号刚好是接收窗口的基地址,如 果该报文的TAIL为1,表明接收节点接收到了此次RDMA传输的尾报文,且该尾报 文编号刚好是接收窗口的基地址,表示接收节点已经将所有RDMA报文收齐,接收 节点将此报文存入接收节点内存中地址为Addr_Recv+PIDX*P的地址空间,并将接收 窗口的W_Tail位置1,转2.2.3;若该报文的TAIL为0,表明接收节点收到了接收窗 口的窗口基地址对应的RDMA报文,而且该报文不是此次RDMA传输的尾报文,这 表示接收节点成功接收编号范围为[WBASE,WBASE+LOC(WVEC)]的 LOC(WVEC)个RDMA报文,接收节点将此报文存入接收节点内存中地址为 Addr_Recv+PIDX*P的地址空间,接收窗口此时向右滑动LOC(WVEC)位,窗口基地 址增加LOC(WVEC),并按照下述方式相应修改接收窗口中的变量:WBASE更新为 WBASE+LOC(WVEC);WVEC更新为WVEC<<LOC(WVEC),转2.2.1;

2.2.1.3如果WBASE<PIDX≤WBASE+W-1,表明接收的报文编号落在接收窗口范 围内,且不是接收窗口基地址,则将WVEC的第PIDX–WBASE位置1,将此报文存 入接收节点内存中地址为Addr_Recv+PIDX*P的地址空间;如果此时RDMA报文的 TAIL为1,将接收窗口的尾标志位W_Tail置1,如果接收窗口的WVEC中低位为1 的位是连续的,这表示接收窗口已经接收到尾报文且接收窗口中尾报文之前的RDMA 报文均已接收到,所有的RDMA报文均已收齐,转2.2.3;否则,RDMA报文的TAIL 为0即还没有收到尾报文,或RDMA报文的TAIL为1但接收窗口的WVEC中低位 为1的位不是连续的(表示虽然收到了RDMA传输的尾报文,但是[WBASE,N-1]之 间还有RDMA报文没有收到,因此,WVEC中第1位至尾报文对应的位之间存在0), 表明还有RDMA报文没有收到,转2.2.1;

2.2.1.4如果PIDX>WBASE+W-1,则将报文丢弃,并向发送节点发回单报文重 传请求报文,重传请求报文中携带的报文编号为PIDX,转2.2.1;

2.2.2如果接收节点连续K(K为正整数,根据经验值设定,一般取值范围为3~10) 次超时计数器超时,向发送节点返回区间重传请求报文,否则,向发送节点返回单报文 重传请求报文,报文中携带的报文编号均为WBASE,转2.2.1;

2.2.3接收节点向发送节点返回RDMA完成响应报文,接收节点释放接收窗口,即 WBASE置为0,WVEC置为全0,W_Tail置为0,窗口可以分配给其他RDMA请求, 转第三步;

第三步,发送节点收到了接收节点发送的RDMA完成响应报文,发送节点结束本 次RDMA传输。

发送节点向接收节点发送RDMA报文,接收节点从发送节点接收RDMA报文,2.1 和2.2是并行进行的。另外,本发明只对一次RDMA传输过程进行了描述,多个RDMA 传输过程是并行进行的,每次RDMA传输占用一个接收窗口,因为每个接收节点设置 R个接收窗口,一个接收节点最多可以同时并行进行R个RDMA传输,每个RDMA传 输的发送和接收均是并行的。

与现有技术相比,采用本发明可达到以下技术效果:

1.本发明在接收节点设置接收窗口,接收窗口只记录进入接收窗口中RDMA报文 的报文编号,不存储RDMA报文的数据信息,即不对进入接收窗口的RDMA报文进行 缓存;因此,相对背景技术发送节点滑动窗口需要对进入滑动窗口的RDMA报文进行 缓存,本发明可以节省芯片上的存储器资源,减少硬件资源开销;

2.本发明发送节点将一次RDMA传输的数据拆分并封装成N个RDMA报文,每个 RDMA报文携带一个编号,当接收节点将N个RDMA报文收齐后向发送节点返回一个 RDMA完成响应报文,发送节点收到接收节点发送的RDMA完成响应报文后结束本次 RDMA传输,因此,本发明可以降低网络中响应报文的数量,避免引起网络拥塞;

3.本发明接收节点如果连续K(K为正整数,根据经验值设定,一般取值范围为 3~10)次超时计数器超时,向发送节点返回区间重传请求报文,否则,接收节点向发送 节点发送单报文重传请求,报文中携带的报文编号均为PIDX,对于单报文重传请求只 需要将编号为PIDX的RDMA报文进行重传;对于区间报文重传请求,发送节点重传 编号范围为[PIDX,N-1]的所有RDMA报文,因此,当发生重传时,本发明不需要将此 次RDMA传输的所有RDMA报文进行重传,降低重传开销,避免网络拥塞,提高传输 效率。

4.本发明接收窗口中设置表明是否收到此次RDMA传输尾报文的标志位W_Tail, 当接收窗口接收到尾报文时,将W_Tail位置1,但接收节点收到尾报文时并不一定表 明接收节点已经成功接收此次RDMA传输的所有RDMA报文,只有当接收到此次 RDMA传输的尾报文,且接收窗口的WVEC中低位为1的位是连续的,表示接收窗口 已经接收到尾报文且接收窗口中尾报文之前的RDMA报文均已接收到,所有的RDMA 报文均已收齐,才表明已经此次RDMA传输成功完成,确保本发明RDMA传输的数据 完整性,提高数据传输的可靠性。

附图说明

图1是背景技术传统的并行计算机系统中两个节点间RDMA传输示意图。

图2是本发明RDMA传输中发送节点从内存中取出数据封装成RDMA报文的报文 格式示意图。

图3是本发明基于接收方滑动窗口的一次RDMA传输流程图。

图4是本发明第一步接收节点设置的滑动窗口的结构示意图。

图5是本发明一次RDMA传输过程中第二步2.1发送节点向接收节点发送RDMA 报文并响应接收节点发回的重传请求报文流程图。

图6是本发明一次RDMA传输过程中第二步2.2接收节点接收RDMA报文流程图。

具体实施方式

图1是背景技术所述传统的并行计算机系统中两个节点间RDMA传输示意图。并 行计算机系统通常是由多个计算节点(简记为节点)和互连网络组成,节点由处理器、 网络接口和内存组成,节点通过网络接口进行数据的发送接收,节点间通过互连网络进 行通信。RDMA传输是并行计算机中一种基本的通信模式,它将发送节点内存中的某 个区域的数据传输到接收节点内存中的接收区间。在实现上,一次RDMA的传输通常 被分解为多个RDMA报文,独立的在互连网络上进行传输。

图2是本发明RDMA传输中发送节点从内存中取出数据封装成RDMA报文的报文 格式示意图。RDMA报文包括四个域:报文类型TYPE(3位)、报文编号PIDX(位)、尾标志位TAIL(1位)、数据DATA(8*Y位),本发明中涉及到的报文类型有6 种:RDMA报文、RDMA完成响应报文、单报文重传请求报文、区间重传请求报文、 连接请求报文、连接响应报文。其中,RDMA报文是数据报文,另外5种是控制报文, 因此,RDMA报文中,报文类型占据3位;一次RDMA数据传输最多被划分成M个 RDMA报文,因此,报文编号占据位;每个RDMA报文中的数据为Y字节, 即8*Y位。发送节点从内存中取出数据,将数据封装成N个RDMA报文,每个RDMA 报文封装方法如下:将报文类型域置为RDMA报文,报文编号填入PIDX域,TAIL域 初始值为0,如果报文编号等于N-1,则将TAIL置1,将内存中取出的数据填入数据域。

图3是本发明基于接收方滑动窗口的一次RDMA传输流程图。主要流程是:

第一步,在发送节点和接收节点间建立连接,具体过程如下:

1.1发送节点向接收节点发送连接请求报文,通过连接请求报文,接收节点为发送 节点分配好此次RDMA传输的接收窗口。接收窗口初始状态置WBASE为0,WVEC 为全0,W_Tail为0。

1.2接收节点分配好接收窗口后,向发送节点返回接收窗口在接收节点的指针 W_Ptr,通过该指针,接收节点能够从多个接收窗口中访问到此次RDMA传输使用的接 收窗口信息。

第二步,发送节点执行2.1步,向接收节点发送RDMA报文并响应接收节点发回 的重传请求报文,同时接收节点执行2.2步,接收报文编号位于接收窗口之内的RDMA 报文,并将RDMA报文中的数据写入接收节点的内存中。发送节点向接收节点发送 RDMA报文的过程中可能会收到接收节点发送过来的重传请求报文,重传请求报文中 携带着报文编号PIDX,发送节点对重传请求报文做出响应,向接收节点重新发送RDMA 报文。发送节点接收到的重传请求报文有两种类型,一种是单报文重传请求报文,即要 求发送节点重新发出编号PIDX的RDMA报文;另一种是区间重传请求报文,即要求 发送节点重传编号范围为[PIDX,N-1]的所有RDMA报文。

2.1发送节点向接收节点发送RDMA报文并响应接收节点发回的重传请求报文,结 合图5,流程如下:

2.1.1发送节点从内存中取出数据,将数据拆分并封装成N个RDMA报文,每个 RDMA报文封装方法如下:将报文类型域置为RDMA报文,报文编号填入PIDX域, TAIL域初始值为0,如果报文编号等于N-1,则将TAIL置1,将内存中取出的数据填 入数据域;

2.1.2如果发送节点没有收到重传请求报文,发送节点向接收节点发送编号为i的 RDMA报文,转2.1.3;如果发送节点收到了接收节点返回的重传请求报文,则接收节 点对重传请求报文做出响应,向接收节点重新发送RDMA报文,如果是单报文重传请 求报文,则执行2.1.2.1,如果是区间重传请求报文,则执行2.1.2.2;

2.1.2.1发送节点获取重传请求报文中的报文编号PIDX,从内存中重新取出编号 PIDX的RDMA报文的数据,封装成RDMA报文,发送给接收节点;转2.1.3;

2.1.2.2发送节点取出重传请求报文中的报文编号PIDX,从内存中重新取出编号 PIDX的RDMA报文的数据,封装成RDMA报文,发送给接收节点;i置为PIDX,转 2.1.3;

2.1.3i增1,若i<N-1,表明此次RDMA传输的报文还没有发送完,转2.1.2;若i=N-1, 表明要发送的是本次RDMA传输的最后一个RDMA报文,将此报文的尾标志位TAIL 置1,转2.1.2;否则,i>N-1,表明发送节点已经将此次RDMA传输的所有RDMA报 文发送完毕,转2.1.4;

2.1.4若发送节点收到了接收节点发送的RDMA完成响应报文,转第三步;若发送 节点收到了单报文重传请求报文,发送节点获取重传请求报文中的报文编号PIDX,从 发送节点内存中地址为Addr_Send+PIDX*P的数据,封装成RDMA报文,发送给接收 节点,转2.1.4;若发送节点收到区间重传请求报文,转2.1.2.2;否则,发送节点停止 发送RDMA报文,转2.1.4;

2.2接收节点接收报文编号位于接收窗口之内(编号为WBASE~WBASE+W-1)的 RDMA报文,并将RDMA报文中的数据写入接收节点的内存中。对于接收窗口之外的 RDMA报文,接收节点丢弃报文。记接收节点收到的报文编号是PIDX,结合图6,接 收节点接收RDMA报文过程如下:

2.2.1接收节点等待接收发送节点发来的RDMA报文,如果接收节点超时计数器超 时后还未收到RDMA报文,则转到2.2.2执行;如果收到了RDMA报文,则根据报文 编号PIDX,执行以下的步骤:

2.2.1.1如果PIDX<WBASE,表明接收的报文编号不在接收窗口内,则接收节点 将该RDMA报文丢弃,转2.2.1;

2.2.1.2如果PIDX=WBASE,表明接收的报文编号刚好是接收窗口的基地址,如 果该报文的TAIL为1,表明接收节点接收到了此次RDMA传输的尾报文,且该尾报 文编号刚好是接收窗口的基地址,表示接收节点已经将所有RDMA报文收齐,接收 节点将此报文存入接收节点内存中地址为Addr_Recv+PIDX*P的地址空间,并将接收 窗口的W_Tail位置1,转2.2.3;若该报文的TAIL为0,表明接收节点收到了接收窗 口的窗口基地址对应的RDMA报文,而且该报文不是此次RDMA传输的尾报文,这 表示接收节点成功接收编号范围为[WBASE,WBASE+LOC(WVEC)]的 LOC(WVEC)个RDMA报文,接收节点将此报文存入接收节点内存中地址为 Addr_Recv+PIDX*P的地址空间,接收窗口此时向右滑动LOC(WVEC)位,窗口基地 址增加LOC(WVEC),并按照下述方式相应修改接收窗口中的变量:WBASE更新为 WBASE+LOC(WVEC);WVEC更新为WVEC<<LOC(WVEC),转2.2.1;

2.2.1.3如果WBASE<PIDX≤WBASE+W-1,表明接收的报文编号落在接收窗口范 围内,且不是接收窗口基地址,则将WVEC的第PIDX–WBASE位置1,将此报文存 入接收节点内存中地址为Addr_Recv+PIDX*P的地址空间;如果此时RDMA报文的 TAIL为1,将接收窗口的尾标志位W_Tail置1,如果接收窗口的WVEC中低位为1 的位是连续的,这表示接收窗口已经接收到尾报文且接收窗口中尾报文之前的RDMA 报文均已接收到,所有的RDMA报文均已收齐,转2.2.3;否则,RDMA报文的TAIL 为0即还没有收到尾报文,或RDMA报文的TAIL为1但接收窗口的WVEC中低位 为1的位不是连续的(表示虽然收到了RDMA传输的尾报文,但是[WBASE,N-1]之 间还有RDMA报文没有收到,因此,WVEC中第1位至尾报文对应的位之间存在0), 表明还有RDMA报文没有收到,转2.2.1;

2.2.1.4如果PIDX>WBASE+W-1,则将报文丢弃,并向发送节点发回单报文重 传请求报文,重传请求报文中携带的报文编号为PIDX,转2.2.1;

2.2.2如果接收节点连续K(K为正整数,根据经验值设定,一般取值范围为3~10) 次超时计数器超时,向发送节点返回区间重传请求报文,否则,向发送节点返回单报文 重传请求报文,报文中携带的报文编号均为WBASE,转2.2.1;

2.2.3接收节点向发送节点返回RDMA完成响应报文,接收节点释放接收窗口,即 WBASE置为0,WVEC置为全0,W_Tail置为0,窗口可以分配给其他RDMA请求, 转第三步;

第三步,发送节点收到了接收节点发送的RDMA完成响应报文,发送节点结束本 次RDMA传输。

图4是本发明第一步接收节点设置的滑动窗口的结构示意图。接收节点中设置接收 滑动窗口(简记为接收窗口),接收节点设置R(R为正整数,设计时根据系统规模和 资源限制设置R的大小,一般为256~512)个接收窗口,一次RDMA传输占用一个接 收窗口,在网络中可能同时会有多个RDMA传输,占用多个接收窗口,因此,在接收 节点设置有指针变量W_Ptr,通过W_Ptr访问R个接收窗口中任意一个接收窗口的信 息,本发明只涉及一次RDMA传输过程中的改进,因此,对接收窗口的数量R不作探 讨。接收窗口的大小代表在接收窗口没有滑动时接收节点最多可以接收的RDMA报文 个数,记一个接收窗口的大小为W(W为正整数,根据网络乱序程度选择不同的值, 网络乱序程度越大,W取值越大,W一般为32~256)位。每个接收窗口中的信息包括: 1、窗口基地址索引号WBASE(位),WBASE表示接收窗口接收的报文编号从 WBASE开始,接收窗口可以接收RDMA报文的报文编号范围为[WBASE, WBASE+W-1],若收到的报文编号落在接收窗口之外,则接收节点一律将其丢弃,一次 RDMA传输最多被拆分成M个RDMA报文,因此,WBASE位宽为位;2、窗 口接收向量WVEC(W位),WVEC向量从左至右计算位索引号,索引号的范围为0~ W-1,WVEC对应接收窗口中W个报文的接收状态;WVEC第m(m为整数,0≤m≤W-1) 位的状态代表报文编号为WBASE+m的RDMA报文的接收状态,若第m位为0,表明 接收节点没有接收到报文编号为WBASE+m的RDMA报文,若第m位为1,表明接收 节点已经接收到报文编号为WBASE+m的RDMA报文;3、标志位W_Tail(1位), W_Tail值为1时表明接收窗口已经接收到此次RDMA传输的最后一个RDMA报文。 在接收节点只有当收到RDMA报文的报文编号落入接收窗口(即报文编号介于[WBASE, WBASE+W-1])时接收节点才将该RDMA报文收下,若收到的报文编号落在接收窗口 之外,则一律将其丢弃。记LOC(WVEC)表示向量WVEC从左边开始、连续为1的位 数(代表接收窗口已经连续成功接收的RDMA报文个数),接收的报文编号刚好是滑动 窗口的基地址WBASE,且该RDMA报文不是此次RDMA传输的尾报文时,接收窗口 向右滑动LOC(WVEC)位(表示接收节点成功接收LOC(WVEC)个RDMA报文),接收 节点更新WBASE的值为WBASE+LOC(WVEC)(表示接收窗口接下来接收的报文编 号从WBASE+LOC(WVEC)开始),WVEC更新为WVEC<<LOC(WVEC)(这是因为 接收节点成功接收LOC(WVEC)个RDMA报文后,接收窗口向右滑动LOC(WVEC)位, 接收窗口向右滑动后,原WVEC中第LOC(WVEC)+1位成为接收窗口向右滑动后 WVEC的第1位,原WVEC中第LOC(WVEC)+2位成为接收窗口向右滑动后WVEC 的第2位,…,原WVEC中第W位成为接收窗口向右滑动后WVEC的第W-LOC(WVEC) 位,接收窗口向右滑动后WVEC的第W-LOC(WVEC)+1位至第W位均为0,相当于 WVEC左移LOC(WVEC)位),其中<<为计算机中的左移运算符。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号