发明名称 并行计算机系统中基于接收方滑动窗口的数据传输方法
摘要 本发明公开了一种并行计算机系统中基于接收方滑动窗口的数据传输方法,目的是保证现有并行计算机系统设计中基于乱序和不可靠网络的RDMA传输数据的完整正确性。技术方案是先在发送节点和接收节点间建立连接,在接收节点设置接收窗口,接收窗口只记录接收RDMA报文的编号,不对进入接收窗口的RDMA报文进行缓存;发送节点向接收节点发送RDMA报文并响应接收节点发回的重传请求报文,同时接收节点接收报文编号位于接收窗口之内的RDMA报文,并将RDMA报文中的数据写入接收节点的内存中;发送节点收到了接收节点发送的RDMA完成响应报文,发送节点结束本次RDMA传输。本发明相比于现有方法能够减少硬件资源开销,降低重传开销,提高传输的效率。
申请公布号 CN104484295B 申请公布日期 2017.03.22
申请号 CN201410782208.3 申请日期 2014.12.16
申请人 中国人民解放军国防科学技术大学 发明人 王绍刚;陆平静;徐炜遐;庞征斌;王克非;张峻;夏军;董德尊;赖明澈;戴艺;齐星云;罗章;常俊胜;徐金波;黎渊;张建民;王桂彬
分类号 G06F13/28(2006.01)I;G06F15/163(2006.01)I 主分类号 G06F13/28(2006.01)I
代理机构 国防科技大学专利服务中心 43202 代理人 郭敏
主权项 一种并行计算机系统中基于接收方滑动窗口的数据传输方法,其特征在于包括以下步骤:第一步,在发送节点和接收节点间建立连接,具体过程如下:1.1发送节点向接收节点发送连接请求报文,通过连接请求报文,接收节点为发送节点分配好此次远程直接内存访问传输即RDMA传输的接收窗口,接收窗口初始状态置WBASE为0,WVEC为全0,W_Tail为0;接收节点设置R个接收窗口,R为正整数,一次RDMA传输占用一个接收窗口,在接收节点设置有指针变量W_Ptr,通过W_Ptr访问R个接收窗口中任意一个接收窗口的信息,接收窗口的大小代表在接收窗口没有滑动时接收节点最多可以接收的RDMA报文个数,记一个接收窗口的大小为W位,W为正整数,每个接收窗口中的信息包括:窗口基地址索引号WBASE,占<img file="FDA0001201109430000011.GIF" wi="167" he="79" />位,M为一次RDMA数据传输最多被划分成的RDMA报文的个数,WBASE表示接收窗口接收的RDMA报文编号从WBASE开始,接收窗口可以接收报文的报文编号范围为[WBASE,WBASE+W‑1],若收到的报文编号落在接收窗口之外,则接收节点一律将其丢弃;窗口接收向量WVEC,占W位,WVEC向量从左至右计算位索引号,索引号的范围为0~W‑1,WVEC对应接收窗口中W个RDMA报文的接收状态;WVEC第m位的状态代表报文编号为WBASE+m的RDMA报文的接收状态,m为整数,0≤m≤W‑1,若第m位为0,表明接收节点没有接收到报文编号为WBASE+m的RDMA报文,若第m位为1,表明接收节点已经接收到报文编号为WBASE+m的RDMA报文;标志位W_Tail,占1位,W_Tail值为1时表明接收窗口已经接收到此次RDMA传输的最后一个RDMA报文;记LOC(VEC)表示向量WVEC从左边开始、连续为1的位数,接收的报文编号刚好是滑动窗口的基地址WBASE,且该RDMA报文不是此次RDMA传输的尾报文时,接收窗口向右滑动LOC(VEC)位,接收节点更新WBASE的值为WBASE+LOC(VEC),WVEC更新为WBASE<<LOC(VEC),其中<<为计算机中的左移运算符;1.2接收节点向发送节点返回接收窗口在接收节点的指针W_Ptr;第二步,发送节点执行2.1步,向接收节点发送RDMA报文并响应接收节点发回的重传请求报文,同时接收节点执行2.2步,接收报文编号位于接收窗口之内的RDMA报文,并将RDMA报文中的数据写入接收节点的内存中;2.1发送节点向接收节点发送RDMA报文并响应接收节点发回的重传请求报文:2.1.1发送节点从内存中取出数据,将数据拆分并封装成N个RDMA报文,N为自然数,N&lt;M;2.1.2如果发送节点没有收到重传请求报文,发送节点向接收节点发送报文编号为i的RDMA报文,转2.1.3;如果发送节点收到了接收节点发回的重传请求报文,重传请求报文中携带着报文编号PIDX,则接收节点对重传请求报文做出响应,向接收节点重新发送RDMA报文,如果是单报文重传请求报文即要求发送节点重新发送报文编号PIDX的RDMA报文,则执行2.1.2.1,如果是区间重传请求报文即要求发送节点重传报文编号范围为[PIDX,N‑1]的所有RDMA报文,则执行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&lt;N‑1,表明此次RDMA传输的报文还没有发送完,转2.1.2;若i=N‑1,表明要发送的是本次RDMA传输的最后一个RDMA报文,将此报文的尾标志位TAIL置1,转2.1.2;否则,i&gt;N‑1,表明发送节点已经将此次RDMA传输的所有RDMA报文发送完毕,转2.1.4;2.1.4若发送节点收到了接收节点发送的RDMA完成响应报文,转第三步;若发送节点收到了单报文重传请求报文,发送节点获取重传请求报文中的报文编号PIDX,从发送节点内存中地址为Addr_Send+PIDX*P的数据,封装成RDMA报文,发送给接收节点,转2.1.4,所述Addr_Send为此次RDMA传输的数据在发送节点内存中的基地址,P为一个RDMA报文的数据大小;若发送节点收到区间重传请求报文,转2.1.2.2;否则,发送节点停止发送RDMA报文,转2.1.4;2.2接收节点接收报文编号位于接收窗口之内即编号为WBASE~WBASE+W‑1的RDMA报文,并将RDMA报文中的数据写入接收节点的内存中,记接收节点收到的报文编号是PIDX,接收节点接收RDMA报文过程如下:2.2.1接收节点等待接收发送节点发来的RDMA报文,如果接收节点超时计数器超时后还未收到RDMA报文,则转到2.2.2执行;如果收到了RDMA报文,则根据报文编号PIDX,执行以下的步骤:2.2.1.1如果PIDX&lt;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,所述Addr_Recv为此次RDMA传输的数据在接收节点内存中的基地址;若该报文的TAIL为0,表明接收节点收到了接收窗口的窗口基地址对应的RDMA报文,而且该报文不是此次RDMA传输的尾报文,这表示接收节点成功接收编号范围为[WBASE,WBASE+LOC(VEC)]的LOC(VEC)个报文,接收节点将此报文存入接收节点内存中地址为Addr_Recv+PIDX*P的地址空间,接收窗口此时向右滑动LOC(VEC)位,窗口基地址增加LOC(VEC),并按照下述方式相应修改接收窗口中的变量:WBASE更新为WBASE+LOC(VEC);WVEC更新为WBASE<<LOC(VEC),转2.2.1;2.2.1.3如果WBASE&lt;PIDX≤WBASE+W‑1,表明接收的报文编号落在接收窗口范围内,且不是接收窗口基地址,则将WVEC的第PIDX–WBASE位置1,将此RDMA报文存入接收节点内存中地址为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报文没有收到,转2.2.1;2.2.1.4如果PIDX&gt;WBASE+W‑1,则将该RDMA报文丢弃,并向发送节点返回单报文重传请求报文,重传请求报文中携带的报文编号为PIDX,转2.2.1;2.2.2如果接收节点的硬件超时计数器连续K次超时,K为正整数,向发送节点返回区间重传请求报文,否则,向发送节点返回单报文重传请求报文,报文中携带的报文编号均为WBASE,转2.2.1;2.2.3接收节点向发送节点返回RDMA完成响应报文,接收节点释放接收窗口,即WBASE置为0,WVEC置为全0,W_Tail置为0,窗口可以分配给其他RDMA请求,转第三步;第三步,发送节点收到了接收节点发送的RDMA完成响应报文,发送节点结束本次RDMA传输。
地址 410073 湖南省长沙市开福区德雅路109号
您可能感兴趣的专利