并行計算機系統(tǒng)中基于接收方滑動窗口的數(shù)據(jù)傳輸方法
【專利摘要】本發(fā)明公開了一種并行計算機系統(tǒng)中基于接收方滑動窗口的數(shù)據(jù)傳輸方法,目的是保證現(xiàn)有并行計算機系統(tǒng)設(shè)計中基于亂序和不可靠網(wǎng)絡(luò)的RDMA傳輸數(shù)據(jù)的完整正確性。技術(shù)方案是先在發(fā)送節(jié)點和接收節(jié)點間建立連接,在接收節(jié)點設(shè)置接收窗口,接收窗口只記錄接收RDMA報文的編號,不對進入接收窗口的RDMA報文進行緩存;發(fā)送節(jié)點向接收節(jié)點發(fā)送RDMA報文并響應(yīng)接收節(jié)點發(fā)回的重傳請求報文,同時接收節(jié)點接收報文編號位于接收窗口之內(nèi)的RDMA報文,并將RDMA報文中的數(shù)據(jù)寫入接收節(jié)點的內(nèi)存中;發(fā)送節(jié)點收到了接收節(jié)點發(fā)送的RDMA完成響應(yīng)報文,發(fā)送節(jié)點結(jié)束本次RDMA傳輸。本發(fā)明相比于現(xiàn)有方法能夠減少硬件資源開銷,降低重傳開銷,提高傳輸?shù)男省?br>
【專利說明】并行計算機系統(tǒng)中基于接收方滑動窗口的數(shù)據(jù)傳輸方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及并行計算機系統(tǒng)中,在兩個計算節(jié)點之間進行內(nèi)存數(shù)據(jù)搬移的方法, 特別是基于亂序和不可靠網(wǎng)絡(luò)實現(xiàn)計算節(jié)點間基于接收方滑動窗口的數(shù)據(jù)傳輸方法。
【背景技術(shù)】
[0002] 并行計算機系統(tǒng)通常是由多個計算節(jié)點(簡記為節(jié)點)和互連網(wǎng)絡(luò)組成,節(jié)點由 處理器、網(wǎng)絡(luò)接口和內(nèi)存組成,節(jié)點通過網(wǎng)絡(luò)接口進行數(shù)據(jù)的發(fā)送接收,節(jié)點間通過互連網(wǎng) 絡(luò)進行通信。并行計算機系統(tǒng)中,一種基本的通信模式是在兩個節(jié)點(記為發(fā)送節(jié)點和接 收節(jié)點)間的內(nèi)存中進行數(shù)據(jù)拷貝,也就是發(fā)送節(jié)點將本節(jié)點內(nèi)存區(qū)域中的數(shù)據(jù)寫入到 接收節(jié)點的指定內(nèi)存區(qū)域中,這種通信模式通常稱為遠(yuǎn)程直接內(nèi)存訪問(RemoteDirect MemoryAccess,RDMA)〇
[0003] RDMA通信需要依賴并行計算機的互連網(wǎng)絡(luò)完成,一般來說,一次RDMA傳輸?shù)臄?shù)據(jù) 量很大,在互連網(wǎng)絡(luò)上進行數(shù)據(jù)傳輸時,需要將一次RDM傳輸拆分成多個報文,各個報文 獨立地由發(fā)送節(jié)點傳輸?shù)浇邮展?jié)點。
[0004] 互連網(wǎng)絡(luò)中,為了提高網(wǎng)絡(luò)的傳輸性能,在兩個節(jié)點間可以設(shè)計多條路徑,設(shè)計路 由算法在發(fā)送節(jié)點和接收節(jié)點間的多條路徑中選擇某一條路徑進行報文傳輸。路由算法考 慮的因素一般包括:路徑負(fù)載平衡、死鎖避免、路徑延遲等。由于多條路徑的存在,發(fā)送節(jié)點 向接收節(jié)點發(fā)出的多個報文,到達(dá)接收節(jié)點的順序可能與發(fā)送節(jié)點發(fā)出的順序不一致,也 就是存在亂序傳輸?shù)奶攸c。
[0005] 大規(guī)模并行計算機系統(tǒng)中,互連網(wǎng)絡(luò)的規(guī)模通常很大,在實現(xiàn)上,難以保證互連網(wǎng) 絡(luò)的可靠性,例如,網(wǎng)絡(luò)中的某條通路可能會斷開。不可靠的互連網(wǎng)絡(luò)造成的結(jié)果是發(fā)送節(jié) 點向接收節(jié)點傳輸?shù)膱笪?,不一定能夠最終到達(dá)接收節(jié)點。
[0006] 從節(jié)點上運行的軟件看來,RDMA傳輸?shù)臄?shù)據(jù)應(yīng)該是正確完整的。如何基于亂序和 不可靠網(wǎng)絡(luò)實現(xiàn)快速正確的RDM傳輸是并行計算機系統(tǒng)設(shè)計中的重要問題之一。目前現(xiàn) 有的RDM傳輸方法主要有兩類:
[0007] 1基于發(fā)送節(jié)點滑動窗口的RDM傳輸方法
[0008] 采用這種方法的主要是美國Cray公司并行計算機系統(tǒng),發(fā)送節(jié)點將已經(jīng)發(fā)出、但 還未收到響應(yīng)的報文保存在一個緩沖區(qū)中,稱為發(fā)送滑動窗口,發(fā)送滑動窗口的大小代表 在沒有收到接收節(jié)點確認(rèn)信息的情況下發(fā)送節(jié)點最多可以發(fā)送的報文個數(shù),一般根據(jù)設(shè)計 需要設(shè)置發(fā)送滑動窗口的大小。采用基于發(fā)送節(jié)點滑動窗口的RDM傳輸方法進行一次 RDM數(shù)據(jù)傳輸流程如下:發(fā)送節(jié)點向接收節(jié)點發(fā)送報文,同時將該報文保存在發(fā)送滑動窗 口中,啟動硬件上的超時計數(shù)器,如果發(fā)送滑動窗口中的報文超時還未收到接收節(jié)點返回 的響應(yīng)報文,則發(fā)送節(jié)點將重新向接收節(jié)點發(fā)送該報文;接收節(jié)點接收到報文后,向報文的 發(fā)送節(jié)點返回表明已經(jīng)接收成功的響應(yīng)報文;發(fā)送節(jié)點一旦接收到響應(yīng)報文,就將響應(yīng)報 文所對應(yīng)的發(fā)送報文從發(fā)送滑動窗口中移除;如果發(fā)送節(jié)點的發(fā)送滑動窗口滿,則發(fā)送節(jié) 點暫停向接收節(jié)點發(fā)送報文,直到有報文從發(fā)送滑動窗口中移除后再恢復(fù)報文的發(fā)送;發(fā) 送節(jié)點將一次RDM傳輸?shù)乃袌笪陌l(fā)送完成,并且收齊了所有的響應(yīng)報文后,一次RDM傳 輸操作完成。
[0009] 這類方法存在如下缺點:1)由于接收節(jié)點需要為每個報文向發(fā)送節(jié)點返回響應(yīng) 報文,因而網(wǎng)絡(luò)中響應(yīng)報文的數(shù)量很多,容易引起網(wǎng)絡(luò)擁塞;2)發(fā)送滑動窗口需要設(shè)置存 儲空間對每一個發(fā)送報文進行緩存,只有收到接收節(jié)點確認(rèn)信息時才將報文從發(fā)送滑動窗 口中移除,消耗芯片上的存儲器資源,因而硬件開銷比較大。
[0010] 2基于接收方計數(shù)器的方法
[0011] 采用這種方法的主要是天河系列計算機系統(tǒng),采用基于接收方計數(shù)器的方法進行 一次RDMA數(shù)據(jù)傳輸流程如下:發(fā)送節(jié)點向接收節(jié)點進行RDMA傳輸時,首先告知接收節(jié)點本 次RDM傳輸中所包含的報文總數(shù),然后才進行報文的傳輸;接收節(jié)點對收到的報文進行計 數(shù),當(dāng)計數(shù)器達(dá)到報文總數(shù)時,接收節(jié)點向發(fā)送節(jié)點返回響應(yīng)報文,告知發(fā)送節(jié)點所有的報 文都收齊;在接收節(jié)點上,為報文計數(shù)器設(shè)置超時機制,當(dāng)計數(shù)器的值超過一定時間還未收 齊報文時,將通知發(fā)送節(jié)點重新發(fā)送本次RDM傳輸?shù)膱笪摹?br>
[0012] 這類方法存在的缺點是,當(dāng)接收節(jié)點的計數(shù)器超時后,要求發(fā)送節(jié)點將此次RDM傳輸?shù)乃袌笪娜恐匕l(fā),重發(fā)的報文中可能大部分已經(jīng)被接收節(jié)點成功接收到,因此,當(dāng) 發(fā)送失敗需要重傳時此類方法重傳開銷大、易引起網(wǎng)絡(luò)擁塞、傳輸效率低。
【發(fā)明內(nèi)容】
[0013] 本發(fā)明要解決的技術(shù)問題是:現(xiàn)有并行計算機系統(tǒng)設(shè)計中基于亂序和不可靠網(wǎng)絡(luò) 的RDMA傳輸過程中需要保證傳輸數(shù)據(jù)的完整正確性,同時要保證數(shù)據(jù)傳輸性能較好,而現(xiàn) 有方法存在易引起網(wǎng)絡(luò)擁塞、硬件開銷大和重傳開銷大的問題。
[0014] 為了解決上述技術(shù)問題,本發(fā)明提出一種基于接收方滑動窗口的快速數(shù)據(jù)傳輸方 法,該方法能夠相比于現(xiàn)有方法減少硬件資源開銷,降低重傳開銷,提高傳輸?shù)男省?br>
[0015]具體技術(shù)方案為:
[0016] 1)因為網(wǎng)絡(luò)中每次RDM傳輸?shù)臄?shù)據(jù)大小不固定,記系統(tǒng)支持的一次RDM傳輸?shù)?最大數(shù)據(jù)量為X字節(jié)(X為自然數(shù),X的取值和系統(tǒng)設(shè)計相關(guān)),一次RDM傳輸?shù)膶嶋H數(shù)據(jù) 量為Y字節(jié)(Y為自然數(shù),YSX),一個RDM報文的數(shù)據(jù)大小為P字節(jié)(P為自然數(shù),和硬 件實現(xiàn)中的RDM報文格式有關(guān),一般為512),一次RDMA數(shù)據(jù)傳輸最多被劃分成M個RDM 報文,M=「X/P~| (「"I:表不上取整),實際一次RDMA數(shù)據(jù)傳輸被劃分成N個RDMA報文, N=「Y/P]。依照RDM報文中所傳輸數(shù)據(jù)在內(nèi)存中的相對位置,將發(fā)送節(jié)點發(fā)出的RDM報 文進行編號,則報文的編號范圍為〇?N-1。記一次RDM傳輸?shù)臄?shù)據(jù)在發(fā)送節(jié)點內(nèi)存中的 基地址為Addr_Send,在接收節(jié)點內(nèi)存中的基地址為Addr_Recv,則此次RDM傳輸?shù)趉(k為 整數(shù),0彡k彡N-1)個RDM報文的數(shù)據(jù)在發(fā)送節(jié)點內(nèi)存中的地址為Addr_Send+k*P,并相 應(yīng)地存儲到接收節(jié)點中地址為Addr_RecV+k*P的內(nèi)存中。發(fā)送節(jié)點將一次RDM傳輸分解 為N個RDM報文獨立的進行傳輸,依次將發(fā)送節(jié)點內(nèi)存中的數(shù)據(jù)傳輸?shù)浇邮展?jié)點對應(yīng)的 內(nèi)存區(qū)間中。發(fā)送節(jié)點從內(nèi)存中取出數(shù)據(jù),封裝成如圖2所示的RDM報文。RDM報文包 括四個域:報文類型TYPE(3位)、報文編號PIDX( [l0g2M"l位)、尾標(biāo)志位TAIL(1位)、數(shù)據(jù)DATA(8*Y位),本發(fā)明中涉及到的報文類型有6種:RDM報文、RDM完成響應(yīng)報文、單報文 重傳請求報文、區(qū)間重傳請求報文、連接請求報文、連接響應(yīng)報文。其中,RDM報文是數(shù)據(jù) 報文,另外5種是控制報文,與現(xiàn)有技術(shù)中的控制報文格式一樣,因此,RDM報文中,報文類 型占據(jù)3位;一次RDM數(shù)據(jù)傳輸最多被劃分成M個RDM報文,因此,報文編號占據(jù)[l0g2M| 位;每個RDM報文中的數(shù)據(jù)為Y字節(jié),即8*Y位。發(fā)送節(jié)點從內(nèi)存中取出數(shù)據(jù),將數(shù)據(jù)封裝 成N個RDM報文,每個RDM報文封裝方法如下:將報文類型域置為RDM報文,報文編號填 入PIDX域,TAIL域初始值為0,如果報文編號等于N-1,則將TAIL置1,將內(nèi)存中取出的數(shù) 據(jù)填入數(shù)據(jù)域。
[0017] 2)接收節(jié)點中設(shè)置接收滑動窗口(簡記為接收窗口),接收節(jié)點設(shè)置R(R為正整 數(shù),設(shè)計時根據(jù)系統(tǒng)規(guī)模和資源限制設(shè)置R的大小,一般為256?512)個接收窗口,一次RDM傳輸占用一個接收窗口,在網(wǎng)絡(luò)中可能同時會有多個RDM傳輸,占用多個接收窗口, 因此,在接收節(jié)點設(shè)置有指針變量W_Ptr,通過W_Ptr訪問R個接收窗口中任意一個接收窗 口的信息,本發(fā)明只涉及一次RDM傳輸過程中的改進,因此,對接收窗口的數(shù)量R不作探 討。接收窗口的大小代表在接收窗口沒有滑動時接收節(jié)點最多可以接收的RDM報文個數(shù), 記一個接收窗口的大小為W(W為正整數(shù),根據(jù)網(wǎng)絡(luò)亂序程度選擇不同的值,網(wǎng)絡(luò)亂序程度 越大,W取值越大,W-般為32?256)位。如圖4所示,每個接收窗口中的信息包括:1、窗 口基地址索引號WBASE( [Iog2^位),WBASE表示接收窗口接收的報文編號從WBASE開始,接 收窗口可以接收RDM報文的報文編號范圍為[WBASE,WBASE+W-1],若收到的報文編號落在 接收窗口之外,則接收節(jié)點一律將其丟棄,一次RDM傳輸最多被拆分成M個RDM報文,因 此,WBASE位寬為[Iog2^位;2、窗口接收向量WVEC(W位),WVEC向量從左至右計算位索引 號,索引號的范圍為0?W-I,WVEC對應(yīng)接收窗口中W個報文的接收狀態(tài);WVEC第m(m為整 數(shù),0 <m<W-1)位的狀態(tài)代表報文編號為WBASE+m的RDM報文的接收狀態(tài),若第m位為 0,表明接收節(jié)點沒有接收到報文編號為WBASE+m的RDM報文,若第m位為1,表明接收節(jié)點 已經(jīng)接收到報文編號為WBASE+m的RDMA報文;3、標(biāo)志位W_Tail(1位),W_Tail值為1時表 明接收窗口已經(jīng)接收到此次RDM傳輸?shù)淖詈笠粋€RDM報文。在接收節(jié)點只有當(dāng)收到RDM 報文的報文編號落入接收窗口(即報文編號介于[WBASE,WBASE+W-1])時接收節(jié)點才將該 RDM報文收下,若收到的報文編號落在接收窗口之外,則一律將其丟棄。記LOC(WVEC)表示 向量WVEC從左邊開始、連續(xù)為1的位數(shù)(代表接收窗口已經(jīng)連續(xù)成功接收的RDM報文個 數(shù)),接收的報文編號剛好是滑動窗口的基地址WBASE,且該RDM報文不是此次RDM傳輸 的尾報文時,接收窗口向右滑動LOC(WVEC)位(表示接收節(jié)點成功接收LOC(WVEC)個RDM 報文),接收節(jié)點更新WBASE的值為WBASE+LOC(WVEC)(表示接收窗口接下來接收的報文編 號從WBASE+LOC(WVEC)開始),WVEC更新為WVEC〈〈L0C(WVEC)(這是因為接收節(jié)點成功接收 LOC(WVEC)個RDM報文后,接收窗口向右滑動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位 均為〇,相當(dāng)于WVEC左移LOC(WVEC)位),其中〈〈為計算機中的左移運算符??梢钥闯?,本 發(fā)明接收節(jié)點滑動窗口與【背景技術(shù)】發(fā)送節(jié)點滑動窗口的區(qū)別在于【背景技術(shù)】發(fā)送節(jié)點滑動 窗口中需要對進入滑動窗口的RDM報文進行緩存,而本發(fā)明接收節(jié)點滑動窗口只記錄接 收RDM報文的編號,不存儲RDM報文的數(shù)據(jù)信息,即不對進入接收窗口的RDM報文進行 緩存;因此,本發(fā)明可以減少硬件資源開銷。
[0018] 3)接收節(jié)點為每個接收窗口設(shè)置硬件超時計數(shù)器,由硬件寄存器實現(xiàn)。硬件超時 計數(shù)器用于判斷接收窗口是否超過一定時長還未滑動,也就是接收節(jié)點在一定時長內(nèi)未收 到任何RDMA報文。
[0019] 本發(fā)明進行一次RDMA傳輸?shù)倪^程如下:
[0020] 第一步,在發(fā)送節(jié)點和接收節(jié)點間建立連接,具體過程如下:
[0021] 1. 1發(fā)送節(jié)點向接收節(jié)點發(fā)送連接請求報文,通過連接請求報文,接收節(jié)點為發(fā)送 節(jié)點分配好此次RDM傳輸?shù)慕邮沾翱凇=邮沾翱诔跏紶顟B(tài)置WBASE為0,WVEC為全0,W_ Tail為 0〇
[0022] 1. 2接收節(jié)點分配好接收窗口后,向發(fā)送節(jié)點返回接收窗口在接收節(jié)點的指針W_ Ptr,通過該指針,接收節(jié)點能夠從多個接收窗口中訪問到此次RDM傳輸使用的接收窗口 信息。
[0023] 第二步,發(fā)送節(jié)點執(zhí)行2. 1步,向接收節(jié)點發(fā)送RDM報文并響應(yīng)接收節(jié)點發(fā)回的 重傳請求報文,同時接收節(jié)點執(zhí)行2. 2步,接收報文編號位于接收窗口之內(nèi)的RDM報文,并 將RDM報文中的數(shù)據(jù)寫入接收節(jié)點的內(nèi)存中。發(fā)送節(jié)點向接收節(jié)點發(fā)送RDM報文的過程 中可能會收到接收節(jié)點發(fā)送過來的重傳請求報文,重傳請求報文中攜帶著報文編號PIDX, 發(fā)送節(jié)點對重傳請求報文做出響應(yīng),向接收節(jié)點重新發(fā)送RDM報文。發(fā)送節(jié)點接收到的重 傳請求報文有兩種類型,一種是單報文重傳請求報文,即要求發(fā)送節(jié)點重新發(fā)出編號PIDX 的RDM報文;另一種是區(qū)間重傳請求報文,即要求發(fā)送節(jié)點重傳編號范圍為[PIDX,N-1]的 所有RDM報文。
[0024] 2. 1發(fā)送節(jié)點向接收節(jié)點發(fā)送RDM報文并響應(yīng)接收節(jié)點發(fā)回的重傳請求報文:
[0025] 2.I. 1發(fā)送節(jié)點從內(nèi)存中取出數(shù)據(jù),將數(shù)據(jù)拆分并封裝成N個RDM報文,每個 RDM報文封裝方法如下:將報文類型域置為RDM報文,報文編號填入PIDX域,TAIL域初始 值為0,如果報文編號等于N-1,則將TAIL置1,將內(nèi)存中取出的數(shù)據(jù)填入數(shù)據(jù)域;
[0026] 2. 1. 2如果發(fā)送節(jié)點沒有收到重傳請求報文,發(fā)送節(jié)點向接收節(jié)點發(fā)送編號為i 的RDM報文,轉(zhuǎn)2. 1. 3;如果發(fā)送節(jié)點收到了接收節(jié)點返回的重傳請求報文,則接收節(jié)點對 重傳請求報文做出響應(yīng),向接收節(jié)點重新發(fā)送RDM報文,如果是單報文重傳請求報文,則 執(zhí)行2. 1. 2. 1,如果是區(qū)間重傳請求報文,則執(zhí)行2. 1. 2. 2 ;
[0027] 2. 1. 2. 1發(fā)送節(jié)點獲取重傳請求報文中的報文編號PIDX,從內(nèi)存中重新取出編號 PIDX的RDM報文的數(shù)據(jù),封裝成RDM報文,發(fā)送給接收節(jié)點;轉(zhuǎn)2. 1. 3;
[0028] 2. 1. 2. 2發(fā)送節(jié)點取出重傳請求報文中的報文編號PIDX,從內(nèi)存中重新取出編號 PIDX的RDM報文的數(shù)據(jù),封裝成RDM報文,發(fā)送給接收節(jié)點;i置為PIDX,轉(zhuǎn)2. 1. 3;
[0029] 2.I. 3i增1,若i〈N-l,表明此次RDMA傳輸?shù)膱笪倪€沒有發(fā)送完,轉(zhuǎn)2. 1. 2 ;若i= N-I,表明要發(fā)送的是本次RDMA傳輸?shù)淖詈笠粋€RDMA報文,將此報文的尾標(biāo)志位TAIL置1, 轉(zhuǎn)2. 1. 2;否則,i>N-l,表明發(fā)送節(jié)點已經(jīng)將此次RDMA傳輸?shù)乃蠷DMA報文發(fā)送完畢,轉(zhuǎn) 2.1.4;
[0030] 2. 1.4若發(fā)送節(jié)點收到了接收節(jié)點發(fā)送的RDMA完成響應(yīng)報文,轉(zhuǎn)第三步;若發(fā) 送節(jié)點收到了單報文重傳請求報文,發(fā)送節(jié)點獲取重傳請求報文中的報文編號PIDX,從發(fā) 送節(jié)點內(nèi)存中地址為Addr_Send+PIDX*P的數(shù)據(jù),封裝成RDMA報文,發(fā)送給接收節(jié)點,轉(zhuǎn) 2. 1. 4 ;若發(fā)送節(jié)點收到區(qū)間重傳請求報文,轉(zhuǎn)2. 1. 2. 2 ;否則,發(fā)送節(jié)點停止發(fā)送RDM報 文,轉(zhuǎn) 2. 1.4;
[0031] 2. 2接收節(jié)點接收報文編號位于接收窗口之內(nèi)(編號為WBASE?WBASE+W-1)的 RDM報文,并將RDM報文中的數(shù)據(jù)寫入接收節(jié)點的內(nèi)存中。對于接收窗口之外的RDM報 文,接收節(jié)點丟棄報文。記接收節(jié)點收到的報文編號是PIDX,接收節(jié)點接收RDM報文過程 如下:
[0032] 2. 2. 1接收節(jié)點等待接收發(fā)送節(jié)點發(fā)來的RDM報文,如果接收節(jié)點超時計數(shù)器超 時后還未收到RDM報文,則轉(zhuǎn)到2. 2. 2執(zhí)行;如果收到了RDM報文,則根據(jù)報文編號PIDX, 執(zhí)行以下的步驟:
[0033] 2. 2.I. 1如果PIDX〈WBASE,表明接收的報文編號不在接收窗口內(nèi),則接收節(jié)點將 該RDM報文丟棄,轉(zhuǎn)2.2. 1 ;
[0034] 2. 2. 1. 2如果PIDX=WBASE,表明接收的報文編號剛好是接收窗口的基地址,如 果該報文的TAIL為1,表明接收節(jié)點接收到了此次RDMA傳輸?shù)奈矆笪模以撐矆笪木幪?剛好是接收窗口的基地址,表示接收節(jié)點已經(jīng)將所有RDM報文收齊,接收節(jié)點將此報文 存入接收節(jié)點內(nèi)存中地址為Addr_Recv+PIDX*P的地址空間,并將接收窗口的W_Tail位 置1,轉(zhuǎn)2. 2. 3;若該報文的TAIL為0,表明接收節(jié)點收到了接收窗口的窗口基地址對應(yīng) 的RDM報文,而且該報文不是此次RDM傳輸?shù)奈矆笪模@表示接收節(jié)點成功接收編號范 圍為[WBASE,WBASE+LOC(WVEC)]的LOC(WVEC)個RDM報文,接收節(jié)點將此報文存入接收 節(jié)點內(nèi)存中地址為Addr_Recv+PIDX*P的地址空間,接收窗口此時向右滑動LOC(WVEC)位, 窗口基地址增加LOC(WVEC),并按照下述方式相應(yīng)修改接收窗口中的變量:WBASE更新為 WBASE+LOC(WVEC);WVEC更新為WVEC〈〈L0C(WVEC),轉(zhuǎn) 2. 2. 1 ;
[0035] 2. 2. 1. 3如果WBASE〈PIDX彡WBASE+W-1,表明接收的報文編號落在接收窗口范圍 內(nèi),且不是接收窗口基地址,則將WVEC的第PIDX-WBASE位置1,將此報文存入接收節(jié)點內(nèi) 存中地址為Addr_Recv+PIDX*P的地址空間;如果此時RDMA報文的TAIL為1,將接收窗口的 尾標(biāo)志位W_Tail置1,如果接收窗口的WVEC中低位為1的位是連續(xù)的,這表示接收窗口已 經(jīng)接收到尾報文且接收窗口中尾報文之前的RDMA報文均已接收到,所有的RDMA報文均已 收齊,轉(zhuǎn)2. 2. 3;否則,RDMA報文的TAIL為0即還沒有收到尾報文,或RDMA報文的TAIL為 1但接收窗口的WVEC中低位為1的位不是連續(xù)的(表示雖然收到了RDM傳輸?shù)奈矆笪?,?是[WBASE,N-1]之間還有RDM報文沒有收到,因此,WVEC中第1位至尾報文對應(yīng)的位之間 存在〇),表明還有RDM報文沒有收到,轉(zhuǎn)2. 2. 1 ;
[0036] 2. 2. 1. 4如果PIDX>WBASE+W-1,則將報文丟棄,并向發(fā)送節(jié)點發(fā)回單報文重傳請 求報文,重傳請求報文中攜帶的報文編號為PIDX,轉(zhuǎn)2. 2. 1;
[0037] 2. 2. 2如果接收節(jié)點連續(xù)K(K為正整數(shù),根據(jù)經(jīng)驗值設(shè)定,一般取值范圍為3? 10)次超時計數(shù)器超時,向發(fā)送節(jié)點返回區(qū)間重傳請求報文,否則,向發(fā)送節(jié)點返回單報文 重傳請求報文,報文中攜帶的報文編號均為WBASE,轉(zhuǎn)2. 2. 1;
[0038] 2. 2. 3接收節(jié)點向發(fā)送節(jié)點返回RDM完成響應(yīng)報文,接收節(jié)點釋放接收窗口,即 WBASE置為0,WVEC置為全0,W_Tail置為0,窗口可以分配給其他RDMA請求,轉(zhuǎn)第三步;
[0039] 第三步,發(fā)送節(jié)點收到了接收節(jié)點發(fā)送的RDMA完成響應(yīng)報文,發(fā)送節(jié)點結(jié)束本次 RDMA傳輸。
[0040] 發(fā)送節(jié)點向接收節(jié)點發(fā)送RDM報文,接收節(jié)點從發(fā)送節(jié)點接收RDM報文,2. 1和 2. 2是并行進行的。另外,本發(fā)明只對一次RDM傳輸過程進行了描述,多個RDM傳輸過程 是并行進行的,每次RDM傳輸占用一個接收窗口,因為每個接收節(jié)點設(shè)置R個接收窗口,一 個接收節(jié)點最多可以同時并行進行R個RDM傳輸,每個RDM傳輸?shù)陌l(fā)送和接收均是并行 的。
[0041] 與現(xiàn)有技術(shù)相比,采用本發(fā)明可達(dá)到以下技術(shù)效果:
[0042] 1.本發(fā)明在接收節(jié)點設(shè)置接收窗口,接收窗口只記錄進入接收窗口中RDMA報文 的報文編號,不存儲RDM報文的數(shù)據(jù)信息,即不對進入接收窗口的RDM報文進行緩存;因 此,相對【背景技術(shù)】發(fā)送節(jié)點滑動窗口需要對進入滑動窗口的RDM報文進行緩存,本發(fā)明可 以節(jié)省芯片上的存儲器資源,減少硬件資源開銷;
[0043] 2.本發(fā)明發(fā)送節(jié)點將一次RDM傳輸?shù)臄?shù)據(jù)拆分并封裝成N個RDM報文,每個 RDM報文攜帶一個編號,當(dāng)接收節(jié)點將N個RDM報文收齊后向發(fā)送節(jié)點返回一個RDM完 成響應(yīng)報文,發(fā)送節(jié)點收到接收節(jié)點發(fā)送的RDM完成響應(yīng)報文后結(jié)束本次RDM傳輸,因 此,本發(fā)明可以降低網(wǎng)絡(luò)中響應(yīng)報文的數(shù)量,避免引起網(wǎng)絡(luò)擁塞;
[0044] 3.本發(fā)明接收節(jié)點如果連續(xù)K(K為正整數(shù),根據(jù)經(jīng)驗值設(shè)定,一般取值范圍為 3?10)次超時計數(shù)器超時,向發(fā)送節(jié)點返回區(qū)間重傳請求報文,否則,接收節(jié)點向發(fā)送節(jié) 點發(fā)送單報文重傳請求,報文中攜帶的報文編號均為PIDX,對于單報文重傳請求只需要 將編號為PIDX的RDM報文進行重傳;對于區(qū)間報文重傳請求,發(fā)送節(jié)點重傳編號范圍為 [PIDX,N-1]的所有RDM報文,因此,當(dāng)發(fā)生重傳時,本發(fā)明不需要將此次RDM傳輸?shù)乃?RDM報文進行重傳,降低重傳開銷,避免網(wǎng)絡(luò)擁塞,提高傳輸效率。
[0045] 4.本發(fā)明接收窗口中設(shè)置表明是否收到此次RDMA傳輸尾報文的標(biāo)志位W_Tail, 當(dāng)接收窗口接收到尾報文時,將W_Tail位置1,但接收節(jié)點收到尾報文時并不一定表明接 收節(jié)點已經(jīng)成功接收此次RDM傳輸?shù)乃蠷DM報文,只有當(dāng)接收到此次RDM傳輸?shù)奈矆?文,且接收窗口的WVEC中低位為1的位是連續(xù)的,表示接收窗口已經(jīng)接收到尾報文且接收 窗口中尾報文之前的RDMA報文均已接收到,所有的RDMA報文均已收齊,才表明已經(jīng)此次 RDM傳輸成功完成,確保本發(fā)明RDM傳輸?shù)臄?shù)據(jù)完整性,提高數(shù)據(jù)傳輸?shù)目煽啃浴?br>
【專利附圖】
【附圖說明】
[0046] 圖1是【背景技術(shù)】傳統(tǒng)的并行計算機系統(tǒng)中兩個節(jié)點間RDM傳輸示意圖。
[0047] 圖2是本發(fā)明RDM傳輸中發(fā)送節(jié)點從內(nèi)存中取出數(shù)據(jù)封裝成RDM報文的報文格 式示意圖。
[0048] 圖3是本發(fā)明基于接收方滑動窗口的一次RDM傳輸流程圖。
[0049] 圖4是本發(fā)明第一步接收節(jié)點設(shè)置的滑動窗口的結(jié)構(gòu)示意圖。
[0050] 圖5是本發(fā)明一次RDM傳輸過程中第二步2. 1發(fā)送節(jié)點向接收節(jié)點發(fā)送RDM報 文并響應(yīng)接收節(jié)點發(fā)回的重傳請求報文流程圖。
[0051] 圖6是本發(fā)明一次RDM傳輸過程中第二步2. 2接收節(jié)點接收RDM報文流程圖。
【具體實施方式】
[0052] 圖1是【背景技術(shù)】所述傳統(tǒng)的并行計算機系統(tǒng)中兩個節(jié)點間RDM傳輸示意圖。并 行計算機系統(tǒng)通常是由多個計算節(jié)點(簡記為節(jié)點)和互連網(wǎng)絡(luò)組成,節(jié)點由處理器、網(wǎng)絡(luò) 接口和內(nèi)存組成,節(jié)點通過網(wǎng)絡(luò)接口進行數(shù)據(jù)的發(fā)送接收,節(jié)點間通過互連網(wǎng)絡(luò)進行通信。 RDM傳輸是并行計算機中一種基本的通信模式,它將發(fā)送節(jié)點內(nèi)存中的某個區(qū)域的數(shù)據(jù)傳 輸?shù)浇邮展?jié)點內(nèi)存中的接收區(qū)間。在實現(xiàn)上,一次RDM的傳輸通常被分解為多個RDM報 文,獨立的在互連網(wǎng)絡(luò)上進行傳輸。
[0053] 圖2是本發(fā)明RDM傳輸中發(fā)送節(jié)點從內(nèi)存中取出數(shù)據(jù)封裝成RDM報文的報文格 式示意圖。RDM報文包括四個域:報文類型TYPE(3位)、報文編號PIDX( [log/11位)、尾標(biāo) 志位TAIL(1位)、數(shù)據(jù)DATA(8*Y位),本發(fā)明中涉及到的報文類型有6種:RDMA報文、RDMA完成響應(yīng)報文、單報文重傳請求報文、區(qū)間重傳請求報文、連接請求報文、連接響應(yīng)報文。其 中,RDM報文是數(shù)據(jù)報文,另外5種是控制報文,因此,RDM報文中,報文類型占據(jù)3位;一 次RDM數(shù)據(jù)傳輸最多被劃分成M個RDM報文,因此,報文編號占據(jù)flog2M^位;每個RDM 報文中的數(shù)據(jù)為Y字節(jié),即8*Y位。發(fā)送節(jié)點從內(nèi)存中取出數(shù)據(jù),將數(shù)據(jù)封裝成N個RDM報文,每個RDM報文封裝方法如下:將報文類型域置為RDM報文,報文編號填入PIDX域, TAIL域初始值為0,如果報文編號等于N-1,則將TAIL置1,將內(nèi)存中取出的數(shù)據(jù)填入數(shù)據(jù) 域。
[0054] 圖3是本發(fā)明基于接收方滑動窗口的一次RDM傳輸流程圖。主要流程是:
[0055] 第一步,在發(fā)送節(jié)點和接收節(jié)點間建立連接,具體過程如下:
[0056] I. 1發(fā)送節(jié)點向接收節(jié)點發(fā)送連接請求報文,通過連接請求報文,接收節(jié)點為發(fā)送 節(jié)點分配好此次RDM傳輸?shù)慕邮沾翱?。接收窗口初始狀態(tài)置WBASE為0,WVEC為全0,W_ Tail為 0〇
[0057] 1. 2接收節(jié)點分配好接收窗口后,向發(fā)送節(jié)點返回接收窗口在接收節(jié)點的指針W_ Ptr,通過該指針,接收節(jié)點能夠從多個接收窗口中訪問到此次RDM傳輸使用的接收窗口 信息。
[0058] 第二步,發(fā)送節(jié)點執(zhí)行2. 1步,向接收節(jié)點發(fā)送RDM報文并響應(yīng)接收節(jié)點發(fā)回的 重傳請求報文,同時接收節(jié)點執(zhí)行2. 2步,接收報文編號位于接收窗口之內(nèi)的RDM報文,并 將RDM報文中的數(shù)據(jù)寫入接收節(jié)點的內(nèi)存中。發(fā)送節(jié)點向接收節(jié)點發(fā)送RDM報文的過程 中可能會收到接收節(jié)點發(fā)送過來的重傳請求報文,重傳請求報文中攜帶著報文編號PIDX, 發(fā)送節(jié)點對重傳請求報文做出響應(yīng),向接收節(jié)點重新發(fā)送RDM報文。發(fā)送節(jié)點接收到的重 傳請求報文有兩種類型,一種是單報文重傳請求報文,即要求發(fā)送節(jié)點重新發(fā)出編號PIDX 的RDM報文;另一種是區(qū)間重傳請求報文,即要求發(fā)送節(jié)點重傳編號范圍為[PIDX,N-1]的 所有RDM報文。
[0059] 2. 1發(fā)送節(jié)點向接收節(jié)點發(fā)送RDM報文并響應(yīng)接收節(jié)點發(fā)回的重傳請求報文,結(jié) 合圖5,流程如下:
[0060] 2.I. 1發(fā)送節(jié)點從內(nèi)存中取出數(shù)據(jù),將數(shù)據(jù)拆分并封裝成N個RDM報文,每個 RDM報文封裝方法如下:將報文類型域置為RDM報文,報文編號填入PIDX域,TAIL域初始 值為0,如果報文編號等于N-1,則將TAIL置1,將內(nèi)存中取出的數(shù)據(jù)填入數(shù)據(jù)域;
[0061] 2.I. 2如果發(fā)送節(jié)點沒有收到重傳請求報文,發(fā)送節(jié)點向接收節(jié)點發(fā)送編號為i 的RDM報文,轉(zhuǎn)2. 1. 3 ;如果發(fā)送節(jié)點收到了接收節(jié)點返回的重傳請求報文,則接收節(jié)點對 重傳請求報文做出響應(yīng),向接收節(jié)點重新發(fā)送RDM報文,如果是單報文重傳請求報文,則 執(zhí)行2. 1. 2. 1,如果是區(qū)間重傳請求報文,則執(zhí)行2. 1. 2. 2 ;
[0062] 2. 1. 2. 1發(fā)送節(jié)點獲取重傳請求報文中的報文編號PIDX,從內(nèi)存中重新取出編號 PIDX的RDM報文的數(shù)據(jù),封裝成RDM報文,發(fā)送給接收節(jié)點;轉(zhuǎn)2. 1. 3 ;
[0063] 2. 1. 2. 2發(fā)送節(jié)點取出重傳請求報文中的報文編號PIDX,從內(nèi)存中重新取出編號 PIDX的RDM報文的數(shù)據(jù),封裝成RDM報文,發(fā)送給接收節(jié)點;i置為PIDX,轉(zhuǎn)2. 1. 3 ;
[0064] 2.I. 3i增1,若i〈N-l,表明此次RDMA傳輸?shù)膱笪倪€沒有發(fā)送完,轉(zhuǎn)2. 1. 2 ;若i= N-I,表明要發(fā)送的是本次RDMA傳輸?shù)淖詈笠粋€RDMA報文,將此報文的尾標(biāo)志位TAIL置1, 轉(zhuǎn)2. 1. 2 ;否則,i>N-l,表明發(fā)送節(jié)點已經(jīng)將此次RDMA傳輸?shù)乃蠷DMA報文發(fā)送完畢,轉(zhuǎn) 2.1.4;
[0065] 2. 1.4若發(fā)送節(jié)點收到了接收節(jié)點發(fā)送的RDMA完成響應(yīng)報文,轉(zhuǎn)第三步;若發(fā) 送節(jié)點收到了單報文重傳請求報文,發(fā)送節(jié)點獲取重傳請求報文中的報文編號PIDX,從發(fā) 送節(jié)點內(nèi)存中地址為Addr_Send+PIDX*P的數(shù)據(jù),封裝成RDMA報文,發(fā)送給接收節(jié)點,轉(zhuǎn) 2. 1. 4 ;若發(fā)送節(jié)點收到區(qū)間重傳請求報文,轉(zhuǎn)2. 1. 2. 2 ;否則,發(fā)送節(jié)點停止發(fā)送RDM報 文,轉(zhuǎn) 2. 1.4 ;
[0066] 2. 2接收節(jié)點接收報文編號位于接收窗口之內(nèi)(編號為WBASE?WBASE+W-1)的 RDM報文,并將RDM報文中的數(shù)據(jù)寫入接收節(jié)點的內(nèi)存中。對于接收窗口之外的RDM報 文,接收節(jié)點丟棄報文。記接收節(jié)點收到的報文編號是PIDX,結(jié)合圖6,接收節(jié)點接收RDM 報文過程如下:
[0067] 2. 2. 1接收節(jié)點等待接收發(fā)送節(jié)點發(fā)來的RDM報文,如果接收節(jié)點超時計數(shù)器超 時后還未收到RDM報文,則轉(zhuǎn)到2. 2. 2執(zhí)行;如果收到了RDM報文,則根據(jù)報文編號PIDX, 執(zhí)行以下的步驟:
[0068] 2. 2.I. 1如果PIDX〈WBASE,表明接收的報文編號不在接收窗口內(nèi),則接收節(jié)點將 該RDM報文丟棄,轉(zhuǎn)2.2. 1 ;
[0069] 2. 2. 1. 2如果PIDX=WBASE,表明接收的報文編號剛好是接收窗口的基地址,如 果該報文的TAIL為1,表明接收節(jié)點接收到了此次RDMA傳輸?shù)奈矆笪?,且該尾報文編?剛好是接收窗口的基地址,表示接收節(jié)點已經(jīng)將所有RDM報文收齊,接收節(jié)點將此報文 存入接收節(jié)點內(nèi)存中地址為Addr_Recv+PIDX*P的地址空間,并將接收窗口的W_Tail位 置1,轉(zhuǎn)2. 2. 3 ;若該報文的TAIL為0,表明接收節(jié)點收到了接收窗口的窗口基地址對應(yīng) 的RDM報文,而且該報文不是此次RDM傳輸?shù)奈矆笪?,這表示接收節(jié)點成功接收編號范 圍為[WBASE,WBASE+LOC(WVEC)]的LOC(WVEC)個RDM報文,接收節(jié)點將此報文存入接收 節(jié)點內(nèi)存中地址為Addr_Recv+PIDX*P的地址空間,接收窗口此時向右滑動LOC(WVEC)位, 窗口基地址增加LOC(WVEC),并按照下述方式相應(yīng)修改接收窗口中的變量:WBASE更新為 WBASE+LOC(WVEC);WVEC更新為WVEC〈〈L0C(WVEC),轉(zhuǎn) 2. 2. 1 ;
[0070] 2. 2. 1. 3如果WBASE〈PIDX<WBASE+W-1,表明接收的報文編號落在接收窗口范圍 內(nèi),且不是接收窗口基地址,則將WVEC的第PIDX-WBASE位置1,將此報文存入接收節(jié)點內(nèi) 存中地址為Addr_Recv+PIDX*P的地址空間;如果此時RDMA報文的TAIL為1,將接收窗口的 尾標(biāo)志位W_Tail置1,如果接收窗口的WVEC中低位為1的位是連續(xù)的,這表示接收窗口已 經(jīng)接收到尾報文且接收窗口中尾報文之前的RDMA報文均已接收到,所有的RDMA報文均已 收齊,轉(zhuǎn)2. 2. 3 ;否則,RDMA報文的TAIL為O即還沒有收到尾報文,或RDMA報文的TAIL為 1但接收窗口的WVEC中低位為1的位不是連續(xù)的(表示雖然收到了RDM傳輸?shù)奈矆笪?,?是[WBASE,N-1]之間還有RDM報文沒有收到,因此,WVEC中第1位至尾報文對應(yīng)的位之間 存在〇),表明還有RDM報文沒有收到,轉(zhuǎn)2. 2. 1 ;
[0071] 2. 2. 1. 4如果PIDX>WBASE+W-1,則將報文丟棄,并向發(fā)送節(jié)點發(fā)回單報文重傳請 求報文,重傳請求報文中攜帶的報文編號為PIDX,轉(zhuǎn)2. 2. 1 ;
[0072] 2. 2. 2如果接收節(jié)點連續(xù)K(K為正整數(shù),根據(jù)經(jīng)驗值設(shè)定,一般取值范圍為3? 10)次超時計數(shù)器超時,向發(fā)送節(jié)點返回區(qū)間重傳請求報文,否則,向發(fā)送節(jié)點返回單報文 重傳請求報文,報文中攜帶的報文編號均為WBASE,轉(zhuǎn)2. 2. 1 ;
[0073] 2. 2. 3接收節(jié)點向發(fā)送節(jié)點返回RDM完成響應(yīng)報文,接收節(jié)點釋放接收窗口,即 WBASE置為0,WVEC置為全0,W_Tail置為0,窗口可以分配給其他RDMA請求,轉(zhuǎn)第三步;
[0074] 第三步,發(fā)送節(jié)點收到了接收節(jié)點發(fā)送的RDMA完成響應(yīng)報文,發(fā)送節(jié)點結(jié)束本次 RDMA傳輸。
[0075] 圖4是本發(fā)明第一步接收節(jié)點設(shè)置的滑動窗口的結(jié)構(gòu)示意圖。接收節(jié)點中設(shè)置 接收滑動窗口(簡記為接收窗口),接收節(jié)點設(shè)置R(R為正整數(shù),設(shè)計時根據(jù)系統(tǒng)規(guī)模和資 源限制設(shè)置R的大小,一般為256?512)個接收窗口,一次RDM傳輸占用一個接收窗口, 在網(wǎng)絡(luò)中可能同時會有多個RDM傳輸,占用多個接收窗口,因此,在接收節(jié)點設(shè)置有指針 變量W_Ptr,通過W_Ptr訪問R個接收窗口中任意一個接收窗口的信息,本發(fā)明只涉及一次 RDM傳輸過程中的改進,因此,對接收窗口的數(shù)量R不作探討。接收窗口的大小代表在接 收窗口沒有滑動時接收節(jié)點最多可以接收的RDM報文個數(shù),記一個接收窗口的大小為W(W 為正整數(shù),根據(jù)網(wǎng)絡(luò)亂序程度選擇不同的值,網(wǎng)絡(luò)亂序程度越大,W取值越大,W-般為32? 256)位。每個接收窗口中的信息包括:1、窗口基地址索引號WBASE( [l0g2M}位),WBASE表 示接收窗口接收的報文編號從WBASE開始,接收窗口可以接收RDM報文的報文編號范圍 為[WBASE,WBASE+W-1],若收到的報文編號落在接收窗口之外,則接收節(jié)點一律將其丟棄, 一次RDM傳輸最多被拆分成M個RDM報文,因此,WBASE位寬為fl〇g2M^位;2、窗口接收 向量WVEC(W位),WVEC向量從左至右計算位索引號,索引號的范圍為0?W-l,WVEC對應(yīng) 接收窗口中W個報文的接收狀態(tài);WVEC第m(m為整數(shù),0SmSW-I)位的狀態(tài)代表報文編 號為WBASE+m的RDM報文的接收狀態(tài),若第m位為0,表明接收節(jié)點沒有接收到報文編號 為WBASE+m的RDMA報文,若第m位為1,表明接收節(jié)點已經(jīng)接收到報文編號為WBASE+m的 RDM報文;3、標(biāo)志位W_Tail(1位),W_Tail值為1時表明接收窗口已經(jīng)接收到此次RDM 傳輸?shù)淖詈笠粋€RDM報文。在接收節(jié)點只有當(dāng)收到RDM報文的報文編號落入接收窗口 (即報文編號介于[WBASE,WBASE+W-1])時接收節(jié)點才將該RDM報文收下,若收到的報文編 號落在接收窗口之外,則一律將其丟棄。記LOC(WVEC)表示向量WVEC從左邊開始、連續(xù)為 1的位數(shù)(代表接收窗口已經(jīng)連續(xù)成功接收的RDM報文個數(shù)),接收的報文編號剛好是滑 動窗口的基地址WBASE,且該RDM報文不是此次RDM傳輸?shù)奈矆笪臅r,接收窗口向右滑動 LOC(WVEC)位(表示接收節(jié)點成功接收LOC(WVEC)個RDM報文),接收節(jié)點更新WBASE的 值為WBASE+LOC(WVEC)(表示接收窗口接下來接收的報文編號從WBASE+LOC(WVEC)開始),WVEC更新為WVEC〈〈L0C(WVEC)(這是因為接收節(jié)點成功接收LOC(WVEC)個RDM報文后, 接收窗口向右滑動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,相當(dāng)于WVEC左移 LOC(WVEC)位),其中〈〈為計算機中的左移運算符。
【權(quán)利要求】
1. 一種并行計算機系統(tǒng)中基于接收方滑動窗口的數(shù)據(jù)傳輸方法,其特征在于包括以下 步驟: 第一步,在發(fā)送節(jié)點和接收節(jié)點間建立連接,具體過程如下: 1.1發(fā)送節(jié)點向接收節(jié)點發(fā)送連接請求報文,通過連接請求報文,接收節(jié)點為發(fā)送節(jié)點 分配好此次遠(yuǎn)程直接內(nèi)存訪問傳輸即RDMA傳輸?shù)慕邮沾翱冢邮沾翱诔跏紶顟B(tài)置WBASE為 0,WVEC為全0,W_Tail為0 ;接收節(jié)點設(shè)置R個接收窗口,R為正整數(shù),一次RDMA傳輸占用 一個接收窗口,在接收節(jié)點設(shè)置有指針變量W_Ptr,通過W_Ptr訪問R個接收窗口中任意一 個接收窗口的信息,接收窗口的大小代表在接收窗口沒有滑動時接收節(jié)點最多可以接收的 RDMA報文個數(shù),記一個接收窗口的大小為W位,W為正整數(shù),每個接收窗口中的信息包括: 窗口基地址索引號WBASE,占fl〇g2M^位,M為一次RDMA數(shù)據(jù)傳輸最多被劃分成的RDMA報文 的個數(shù),WBASE表示接收窗口接收的RDMA報文編號從WBASE開始,接收窗口可以接收報文 的報文編號范圍為[WBASE,WBASE+W-1],若收到的報文編號落在接收窗口之外,則接收節(jié)點 一律將其丟棄;窗口接收向量WVEC,占W位,WVEC向量從左至右計算位索引號,索引號的范 圍為0?W-l,WVEC對應(yīng)接收窗口中W個RDMA報文的接收狀態(tài);WVEC第m位的狀態(tài)代表報 文編號為WBASE+m的RDMA報文的接收狀態(tài),m為整數(shù),0 <m<W-1,若第m位為0,表明接 收節(jié)點沒有接收到報文編號為WBASE+m的RDMA報文,若第m位為1,表明接收節(jié)點已經(jīng)接 收到報文編號為WBASE+m的RDMA報文;標(biāo)志位W_Tail,占1位,W_Tail值為1時表明接收 窗口已經(jīng)接收到此次RDMA傳輸?shù)淖詈笠粋€RDMA報文;記LOC(VEC)表示向量WVEC從左邊 開始、連續(xù)為1的位數(shù),接收的報文編號剛好是滑動窗口的基地址WBASE,且該RDMA報文不 是此次RDMA傳輸?shù)奈矆笪臅r,接收窗口向右滑動LOC(VEC)位,接收節(jié)點更新WBASE的值為 WBASE+LOC(VEC),WVEC更新為WBASE〈〈LOC(VEC),其中〈〈為計算機中的左移運算符; 1. 2接收節(jié)點向發(fā)送節(jié)點返回接收窗口在接收節(jié)點的指針W_Ptr; 第二步,發(fā)送節(jié)點執(zhí)行2. 1步,向接收節(jié)點發(fā)送RDMA報文并響應(yīng)接收節(jié)點發(fā)回的重傳 請求報文,同時接收節(jié)點執(zhí)行2. 2步,接收報文編號位于接收窗口之內(nèi)的RDMA報文,并將 RDMA報文中的數(shù)據(jù)寫入接收節(jié)點的內(nèi)存中; 2. 1發(fā)送節(jié)點向接收節(jié)點發(fā)送RDMA報文并響應(yīng)接收節(jié)點發(fā)回的重傳請求報文: 2. 1. 1發(fā)送節(jié)點從內(nèi)存中取出數(shù)據(jù),將數(shù)據(jù)拆分并封裝成N個RDMA報文,N為自然數(shù), N<M; 2. 1. 2如果發(fā)送節(jié)點沒有收到重傳請求報文,發(fā)送節(jié)點向接收節(jié)點發(fā)送報文編號為i的RDMA報文,轉(zhuǎn)2. 1. 3 ;如果發(fā)送節(jié)點收到了接收節(jié)點發(fā)回的重傳請求報文,重傳請求報文 中攜帶著報文編號PIDX,則接收節(jié)點對重傳請求報文做出響應(yīng),向接收節(jié)點重新發(fā)送RDMA 報文,如果是單報文重傳請求報文即要求發(fā)送節(jié)點重新發(fā)送報文編號PIDX的RDMA報文,則 執(zhí)行2. 1. 2. 1,如果是區(qū)間重傳請求報文即要求發(fā)送節(jié)點重傳報文編號范圍為[PIDX,N-1] 的所有RDMA報文,則執(zhí)行2. 1. 2. 2 ; 2. 1. 2. 1發(fā)送節(jié)點獲取重傳請求報文中的報文編號PIDX,從發(fā)送節(jié)點內(nèi)存中重新取出 報文編號PIDX的RDMA報文的數(shù)據(jù),封裝成RDMA報文,發(fā)送給接收節(jié)點;轉(zhuǎn)2. 1. 3 ; 2. 1. 2. 2發(fā)送節(jié)點取出重傳請求報文中的報文編號PIDX,從發(fā)送節(jié)點內(nèi)存中重新取出 報文編號PIDX的RDMA報文的數(shù)據(jù),封裝成RDMA報文,發(fā)送給接收節(jié)點;i置為PIDX,轉(zhuǎn) 2. 1. 3 ; 2. 1.3i增1,若i〈N-l,表明此次RDMA傳輸?shù)膱笪倪€沒有發(fā)送完,轉(zhuǎn)2. 1.2 ;若i=N-1, 表明要發(fā)送的是本次RDMA傳輸?shù)淖詈笠粋€RDMA報文,將此報文的尾標(biāo)志位TAIL置1, 轉(zhuǎn)2. 1. 2 ;否則,i>N-l,表明發(fā)送節(jié)點已經(jīng)將此次RDMA傳輸?shù)乃蠷DMA報文發(fā)送完畢,轉(zhuǎn) 2.1.4; 2. 1. 4若發(fā)送節(jié)點收到了接收節(jié)點發(fā)送的RDMA完成響應(yīng)報文,轉(zhuǎn)第三步;若發(fā)送節(jié)點 收到了單報文重傳請求報文,發(fā)送節(jié)點獲取重傳請求報文中的報文編號PIDX,從發(fā)送節(jié)點 內(nèi)存中地址為Addr_Send+PIDX*P的數(shù)據(jù),封裝成RDMA報文,發(fā)送給接收節(jié)點,轉(zhuǎn)2. 1. 4,所 述Addr_Send為此次RDMA傳輸?shù)臄?shù)據(jù)在發(fā)送節(jié)點內(nèi)存中的基地址,P為一個RDMA報文的數(shù) 據(jù)大?。蝗舭l(fā)送節(jié)點收到區(qū)間重傳請求報文,轉(zhuǎn)2. 1. 2. 2 ;否則,發(fā)送節(jié)點停止發(fā)送RDMA報 文,轉(zhuǎn) 2. 1.4 ; 2. 2接收節(jié)點接收報文編號位于接收窗口之內(nèi)即編號為WBASE?WBASE+W-1的RDMA報 文,并將RDMA報文中的數(shù)據(jù)寫入接收節(jié)點的內(nèi)存中,記接收節(jié)點收到的報文編號是PIDX, 接收節(jié)點接收RDMA報文過程如下: 2. 2. 1接收節(jié)點等待接收發(fā)送節(jié)點發(fā)來的RDMA報文,如果接收節(jié)點超時計數(shù)器超時后 還未收到RDMA報文,則轉(zhuǎn)到2. 2. 2執(zhí)行;如果收到了RDMA報文,則根據(jù)報文編號PIDX,執(zhí) 行以下的步驟: 2. 2. 1. 1如果PIDX〈WBASE,表明接收的報文編號不在接收窗口內(nèi),則接收節(jié)點將該RDMA報文丟棄,轉(zhuǎn)2. 2. 1 ; 2. 2. 1. 2如果PIDX=WBASE,表明接收的報文編號剛好是接收窗口的基地址,如果該 報文的TAIL為1,表明接收節(jié)點接收到了此次RDMA傳輸?shù)奈矆笪?,且該尾報文編號剛?是接收窗口的基地址,表示接收節(jié)點已經(jīng)將所有RDMA報文收齊,接收節(jié)點將此報文存入接 收節(jié)點內(nèi)存中地址為Addr_Recv+PIDX*P的地址空間,并將接收窗口的W_Tail位置1,轉(zhuǎn) 2. 2. 3,所述Addr_RecV為此次RDMA傳輸?shù)臄?shù)據(jù)在接收節(jié)點內(nèi)存中的基地址;若該報文的 TAIL為0,表明接收節(jié)點收到了接收窗口的窗口基地址對應(yīng)的RDMA報文,而且該報文不是 此次RDMA傳輸?shù)奈矆笪?,這表示接收節(jié)點成功接收編號范圍為[WBASE,WBASE+LOC(VEC)] 的LOC(VEC)個報文,接收節(jié)點將此報文存入接收節(jié)點內(nèi)存中地址為Addr_RecV+PIDX*P 的地址空間,接收窗口此時向右滑動LOC(VEC)位,窗口基地址增加LOC(VEC),并按照 下述方式相應(yīng)修改接收窗口中的變量:WBASE更新為WBASE+LOC(VEC) ;WVEC更新為 WBASE〈〈L0C(VEC),轉(zhuǎn) 2. 2. 1 ; 2. 2. 1. 3如果WBASE〈PIDX彡WBASE+W-1,表明接收的報文編號落在接收窗口范圍內(nèi),且 不是接收窗口基地址,則將WVEC的第PIDX-WBASE位置1,將此RDMA報文存入接收節(jié)點內(nèi) 存中地址為Addr_Recv+PIDX*P的地址空間;如果此時RDMA報文的TAIL為1,將接收窗口的 尾標(biāo)志位W_Tail置1,如果接收窗口的WVEC中低位為1的位是連續(xù)的,這表示接收窗口已 經(jīng)接收到尾報文且接收窗口中尾報文之前的RDMA報文均已接收到,所有的RDMA報文均已 收齊,轉(zhuǎn)2. 2. 3 ;否則,RDMA報文的TAIL為0即還沒有收到尾報文,或RDMA報文的TAIL為 1但接收窗口的WVEC中低位為1的位不是連續(xù)的,表明還有RDMA報文沒有收到,轉(zhuǎn)2. 2. 1 ; 2. 2. 1. 4如果PIDX>WBASE+W-1,則將該RDMA報文丟棄,并向發(fā)送節(jié)點返回單報文重傳 請求報文,重傳請求報文中攜帶的報文編號為PIDX,轉(zhuǎn)2. 2. 1 ; 2. 2. 2如果接收節(jié)點的硬件超時計數(shù)器連續(xù)K次超時,K為正整數(shù),向發(fā)送節(jié)點返回區(qū) 間重傳請求報文,否則,向發(fā)送節(jié)點返回單報文重傳請求報文,報文中攜帶的報文編號均為 WBASE,轉(zhuǎn) 2. 2. 1 ; 2. 2. 3接收節(jié)點向發(fā)送節(jié)點返回RDMA完成響應(yīng)報文,接收節(jié)點釋放接收窗口,即WBASE置為0,WVEC置為全0,W_Tai1置為0,窗口可以分配給其他RDMA請求,轉(zhuǎn)第三步; 第三步,發(fā)送節(jié)點收到了接收節(jié)點發(fā)送的RDMA完成響應(yīng)報文,發(fā)送節(jié)點結(jié)束本次RDMA傳輸。
2. 如權(quán)利要求1所述的并行計算機系統(tǒng)中基于接收方滑動窗口的數(shù)據(jù)傳輸方法,其特 征在于所述R根據(jù)系統(tǒng)規(guī)模和資源限制設(shè)置,取256?512 ;所述W為32?256。
3. 如權(quán)利要求1所述的并行計算機系統(tǒng)中基于接收方滑動窗口的數(shù)據(jù)傳輸方法,其特 征在于所述RDMA報文包括四個域:報文類型TYPE,共3位;報文編號PIDX,共pl〇g2M1位;尾 標(biāo)志位TAIL,為1位;數(shù)據(jù)DATA,共8*Y位,Y為自然數(shù),為一次RDMA傳輸?shù)臄?shù)據(jù)的字節(jié)數(shù); 所述RDMA報文封裝方法是:將報文類型域置為RDMA報文,報文編號填入PIDX±或,TAIL域 初始值為〇,如果報文編號等于N-1,則將TAIL置1,將內(nèi)存中取出的數(shù)據(jù)填入數(shù)據(jù)域。
4. 如權(quán)利要求1所述的并行計算機系統(tǒng)中基于接收方滑動窗口的數(shù)據(jù)傳輸方法,其特 征在于所述硬件超時計數(shù)器由接收節(jié)點為每個接收窗口設(shè)置,由硬件寄存器實現(xiàn)。
5. 如權(quán)利要求1所述的并行計算機系統(tǒng)中基于接收方滑動窗口的數(shù)據(jù)傳輸方法,其特 征在于所述K取值范圍為3?10。
【文檔編號】G06F15/163GK104484295SQ201410782208
【公開日】2015年4月1日 申請日期:2014年12月16日 優(yōu)先權(quán)日:2014年12月16日
【發(fā)明者】王紹剛, 陸平靜, 徐煒遐, 龐征斌, 王克非, 張峻, 夏軍, 董德尊, 賴明澈, 戴藝, 齊星云, 羅章, 常俊勝, 徐金波, 黎淵, 張建民, 王桂彬 申請人:中國人民解放軍國防科學(xué)技術(shù)大學(xué)