国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      基于片內(nèi)連接管理的rdma通信方法

      文檔序號:7556112閱讀:345來源:國知局
      專利名稱:基于片內(nèi)連接管理的rdma通信方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及并行計算機系統(tǒng)高速互連網(wǎng)絡(luò)領(lǐng)域,具體涉及一種基于片內(nèi)連接管理的RDMA通信方法。
      背景技術(shù)
      就高性能計算發(fā)展的趨勢而言,提高并行計算機系統(tǒng)計算性能主要有兩種途徑,一是增加處理器數(shù)目,二是提高處理器核數(shù)。然而隨著并行計算機系統(tǒng)規(guī)模的不斷擴大,系統(tǒng)的平均無故障時間(Mean Time To Failure, MTTF)不斷縮小,所以系統(tǒng)的可靠性問題將面臨更大的挑戰(zhàn)。高速互連網(wǎng)絡(luò)是并行計算機系統(tǒng)的重要組成部分,承擔著處理節(jié)點間的通信任務(wù),因此互連網(wǎng)絡(luò)通信的可靠性是影響整個并行計算機系統(tǒng)可靠性的重要因素。在現(xiàn)有技術(shù)中,為了提高并行計算機系統(tǒng)高速互連網(wǎng)絡(luò)通信可靠性,主要采取兩種技術(shù)思路:一是基于鏈路層錯誤數(shù)據(jù)重傳的可靠性數(shù)據(jù)傳輸;二是基于端到端錯誤數(shù)據(jù)重傳的可靠性數(shù)據(jù)傳輸。前者主要依靠循環(huán)冗余編碼和校驗(Cyclic Redundancy Code orCheck, CRC)和滑動窗口重傳等技術(shù)保障鏈路級數(shù)據(jù)傳輸?shù)目煽啃?,硬件并不支持端到端的?shù)據(jù)可靠傳輸。這種互連網(wǎng)絡(luò)被認為是無報文丟棄的網(wǎng)絡(luò)(Lossless Network),該網(wǎng)絡(luò)上端到端消息傳輸?shù)目煽啃砸蕾囉谏蠈訁f(xié)議,如MPICH2和OpenMPI等。采用這種可靠性數(shù)據(jù)傳輸技術(shù)的典型是Cray的SeaStar和Gemini互連芯片。后者主要是在傳輸數(shù)據(jù)前建立連接,利用序列號檢測、CRC檢測和端到端錯誤數(shù)據(jù)重傳等技術(shù)實現(xiàn)端到端數(shù)據(jù)傳輸?shù)目煽啃?,其鏈路層通常只檢測數(shù)據(jù)錯誤,而不負責數(shù)據(jù)的重傳。接收端定位報文發(fā)生錯誤的位置,發(fā)送端負責從錯誤處重傳數(shù)據(jù)。這種互連網(wǎng)絡(luò)是基于不可靠鏈路層實現(xiàn)端到端數(shù)據(jù)傳輸?shù)目煽啃浴2捎眠@種可靠性數(shù)據(jù)傳輸技術(shù)的典型是采用InfiniBand協(xié)議的互連網(wǎng)絡(luò)。在上述兩種技術(shù)思路中,第一種技術(shù)思路實現(xiàn)較為簡單,而且在中小規(guī)模的并行計算機系統(tǒng)中能夠正常運行并保持較高的數(shù)據(jù)傳輸效率。但是,在較大和超大規(guī)模的并行計算機系統(tǒng)中,高速互連網(wǎng)絡(luò)系統(tǒng)的MTTF值將較小,這種可靠性數(shù)據(jù)傳輸方案將面臨嚴重的挑戰(zhàn)。第二種技術(shù)思路有多種實現(xiàn)方式,例如IBM提出了 HPS網(wǎng)絡(luò)構(gòu)架實現(xiàn)了端到端可靠數(shù)據(jù)傳輸?shù)腞DMA (Remote Direct Memory Access遠程直接內(nèi)存訪問)解決方案,數(shù)據(jù)傳輸前需要建立連接。然而,該實現(xiàn)將管理連接的可靠性數(shù)據(jù)結(jié)構(gòu)存放在片外SRAM中,協(xié)議較為復雜,且需要將RDMA寫轉(zhuǎn)換為RDMA讀實現(xiàn),因此延遲性能較差。第二種技術(shù)思路的另一種實現(xiàn)是InfiniBand的解決方案,即MPI實現(xiàn)(例如MVAPICH、Open MPI和HP MPI等)通過在主機內(nèi)存中進行連接管理,從而在鏈路層數(shù)據(jù)傳輸不可靠的網(wǎng)絡(luò)之上通過主機內(nèi)存連接管理機制建立可靠數(shù)據(jù)傳輸。然而,假設(shè)系統(tǒng)有#個節(jié)點,每個節(jié)點運行#個進程,如果所有進程進行AllToAll通信,則在最初的可靠連接RC (Reliable Connection)實現(xiàn)方案中,每個節(jié)點需建立連接的總數(shù)為2.勸個。在改進后的可擴展的可靠連接XRC(extended Reliable Connection)實現(xiàn)方案中,源節(jié)點的各個進程只需要與每個目標節(jié)點建立一個連接,就可以與目標節(jié)點的各個進程實現(xiàn)通信,則每個幾點需要建立連接的總數(shù)%0(M痛個。對于構(gòu)建艾級并行 計算機系統(tǒng),假設(shè)系統(tǒng)包含IM個節(jié)點,每個節(jié)點包含一個CPU,每個CPU上運行64個進程,每個連接數(shù)據(jù)結(jié)構(gòu)占用4KB存儲空間,那么如果全系統(tǒng)所有進程進行AllToAll通信,則基于InfiniBand的XRC連接實現(xiàn)方案中每個節(jié)點需要為分配256GB (64X1MX4K)的主機內(nèi)存空間以供連接數(shù)據(jù)結(jié)構(gòu)使用,這幾乎是難以實現(xiàn)的??梢?,InfiniBand使用主存資源建立連接嚴重影響了系統(tǒng)的可擴展性。此外,InfiniBand網(wǎng)絡(luò)在傳輸消息時,通過報文中攜帶序列號的機制定位數(shù)據(jù)錯誤報文和被網(wǎng)絡(luò)丟棄的報文,而且只有消息的第一個報文攜帶了目的地址,后續(xù)報文的目的地址通過前一個報文的地址及其長度進行推算。這就要求所有報文必須順序發(fā)送和接收,而且報文在網(wǎng)絡(luò)中也必須沿著確定的路徑進行傳輸,以達到報文間保序目的??梢?,InfiniBand基于連接的傳輸實現(xiàn)方法不支持多路徑傳輸,因此難以利用互連網(wǎng)絡(luò)路徑的多樣性提高網(wǎng)絡(luò)在擁塞情況下的傳輸性能和故障情況下的容錯能力。

      發(fā)明內(nèi)容
      本發(fā)明要解決的技術(shù)問題是提供一種可擴展性好、支持多路徑傳輸、數(shù)據(jù)傳輸可靠、多核處理效率高、單報文消息傳輸延遲低的基于片內(nèi)連接管理的RDMA通信方法。為了解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案為:
      一種基于片內(nèi)連接管理的RDMA通信方法,其實施步驟如下:
      1)在源節(jié)點、目的節(jié)點的網(wǎng)卡中分別建立用于存儲發(fā)送上下文的發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)以及用于存儲接收上下文的接收上下文數(shù)據(jù)結(jié)構(gòu),在源節(jié)點、目的節(jié)點的內(nèi)存中分別建立用于提交通信請求描述符的描述符隊列、用于記錄描述符完成情況的完成事件隊列;
      2)源節(jié)點主機在需要發(fā)送RDMA消息時向描述符隊列提交描述符并置門鈴標志,源節(jié)點網(wǎng)卡根據(jù)門鈴標識從描述符隊列中獲取描述符;
      3)源節(jié)點網(wǎng)卡申請發(fā)送上下文,計算RDMA消息包含的報文總數(shù),獲取RDMA消息事務(wù)號,構(gòu)造連接申請請求報文并發(fā)往目的節(jié)點;目的節(jié)點網(wǎng)卡接收連接申請請求報文后,在目的節(jié)點網(wǎng)卡中分配接收上下文,將連接申請請求報文中的信息填入接收上下文并啟動接收計時器,向源節(jié)點網(wǎng)卡發(fā)送連接申請確認報文,源節(jié)點網(wǎng)卡接收到連接申請確認報文后,將連接申請確認報文中的信息保存在發(fā)送上下文中并啟動發(fā)送計時器;
      4)源節(jié)點以DMA方式從本機主存中取數(shù)據(jù),并封裝成RDMA報文根據(jù)路由策略發(fā)往目的節(jié)點;目的節(jié)點網(wǎng)卡接收RDMA報文并檢測RDMA報文的正確性,將RDMA報文的數(shù)據(jù)載荷寫入主存,對接收到的RDMA報文進行計數(shù);當計數(shù)值等于RDMA消息的報文總數(shù)時目的節(jié)點網(wǎng)卡向主存中的完成事件隊列寫入完成事件,并向源節(jié)點網(wǎng)卡發(fā)送傳輸完成響應(yīng)報文,釋放接收上下文;源節(jié)點網(wǎng)卡接收到傳輸完成響應(yīng)報文后,向王存中的完成事件隊列與入完成事件,并釋放發(fā)送上下文。作為本發(fā)明上述技術(shù)方案的進一步改進:
      所述發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)中可容納發(fā)送上下文的數(shù)量為W.RTT/L,其中W為網(wǎng)絡(luò)鏈路帶寬,RTT為最大RDMA消息往返時間,L為最小RDMA消息長度。所述步驟3)的詳細步驟如下:
      3.1)源節(jié)點網(wǎng)卡首先根據(jù)描述符申請發(fā)送上下文,所述發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)中的字段包括目的節(jié)點號、目的接收上下文號、消息標識信息高位、消息標識信息低位、超時計數(shù)器、退火計數(shù)器、狀態(tài)、連接申請優(yōu)先級、接收字節(jié) 總數(shù)、當前已接收字節(jié)數(shù)、錯誤次數(shù);然后獲取發(fā)送上下文及其消息標識信息高位,計算RDMA消息包含的報文總數(shù),獲取RDMA消息事務(wù)號,初始化設(shè)置發(fā)送上下文的超時計數(shù)器的值為預設(shè)的連接申請超時值、退火計數(shù)器的值為預設(shè)的連接申請重試退火超時基值、發(fā)送狀態(tài)為“連接申請”、連接申請優(yōu)先級為O、錯誤次數(shù)為O、消息標識信息低位為O,構(gòu)造連接申請請求報文,根據(jù)預設(shè)路由策略發(fā)送連接申請報文給目的節(jié)點;
      3.2) g的節(jié)點網(wǎng)卡接收到連接申請請求報文并進行CRC校驗;
      3.3)目的節(jié)點網(wǎng)卡對報文CRC校驗結(jié)果進行判斷,如果連接申請報文正確到達目的節(jié)點后CRC校驗,則跳轉(zhuǎn)執(zhí)行步驟3.4),否則如果CRC校驗出錯,則丟棄連接申請請求報文并報錯退出;
      3.4)目的節(jié)點網(wǎng)卡在接收上下文數(shù)據(jù)結(jié)構(gòu)中檢查是否有與連接申請請求報文匹配的接收上下文,如果有與連接申請請求報文匹配的接收上下文,則跳轉(zhuǎn)執(zhí)行步驟3.5),否則跳轉(zhuǎn)執(zhí)行步驟3.6);
      3.5)目的節(jié)點網(wǎng)卡檢查連接申請請求報文的消息標識信息的高位是否與匹配的接收上下文的消息標識信息的高位相同,如果連接申請請求報文的消息標識信息的高位與匹配的接收上下文的消息標識信息的高位相同且匹配的接收上下文的接收狀態(tài)為“接收數(shù)據(jù)”,則依據(jù)預設(shè)路由策略發(fā)送連接申請確認報文給源節(jié)點,跳轉(zhuǎn)執(zhí)行步驟3.9);否則,丟棄連接申請請求報文并報錯退出;
      3.6)目的節(jié)點網(wǎng)卡檢查CnctReqNackEn值是否為I,所述CnctReqNackEn值具體是指當接收上下文數(shù)據(jù)結(jié)構(gòu)中的接收上下文資源耗光時是否對連接申請請求返回Nack報文響應(yīng),CnctReqNackEn值為I表示返回Nack報文響應(yīng)讓源節(jié)點重試;當CnctReqNackEn的值為O表示不返回Nack報文 響應(yīng),阻塞連接請求通道;如果CnctReqNackEn等于I,則跳轉(zhuǎn)執(zhí)行步驟3.7);如果CnctReqNackEn等于O,則跳轉(zhuǎn)執(zhí)行步驟3.8);
      3.7)目的節(jié)點網(wǎng)卡比較連接申請請求報文的連接申請優(yōu)先級和接收上下文的優(yōu)先級,如果目的節(jié)點網(wǎng)卡的接收上下文數(shù)據(jù)結(jié)構(gòu)中的當前可用接收上下文個數(shù)大于零且連接申請請求報文的連接申請優(yōu)先級大于或等于接收上下文的優(yōu)先級,或目的節(jié)點網(wǎng)卡的接收上下文數(shù)據(jù)結(jié)構(gòu)中的當前可用接收上下文個數(shù)大于1,則首先在接收上下文數(shù)據(jù)結(jié)構(gòu)中分配接收上下文,所述接收上下文數(shù)據(jù)結(jié)構(gòu)中的字段包括源節(jié)點號、源節(jié)點、目的發(fā)送上下文號、消息標識信息高位、消息標識信息低位、當前可用接收上下文個數(shù)、當前接收上下文優(yōu)先級、超時計數(shù)器、狀態(tài)、接收字節(jié)總數(shù)、當前已接收字節(jié)數(shù)、錯誤次數(shù),其中當前可用接收上下文個數(shù)、當前接收上下文優(yōu)先級為所有接收上下文共享;然后將接收上下文數(shù)據(jù)結(jié)構(gòu)中可用接收上下文個數(shù)遞減,如果連接申請請求報文的連接申請優(yōu)先級大于或等于接收上下文的優(yōu)先級,則將接收上下文的優(yōu)先級賦值為O,設(shè)置超時計數(shù)器的值為接收數(shù)據(jù)超時值,設(shè)置接收上下文的接收狀態(tài)為“接收數(shù)據(jù)”,接收字節(jié)總數(shù)為連接申請請求報文的數(shù)據(jù)長度,當前已接收字節(jié)數(shù)為O,消息標識信息高位為連接申請請求報文的消息標識信息高位,消息標識信息低位為O,錯誤次數(shù)為O,目的節(jié)點構(gòu)造連接申請確認報文并依據(jù)預設(shè)路由策略發(fā)送連接申請確認報文給源節(jié)點,跳轉(zhuǎn)執(zhí)行步驟3.9);否則目的節(jié)點網(wǎng)卡比較連接申請請求報文的連接申請優(yōu)先級和接收上下文的優(yōu)先級后,如果連接申請請求報文的連接申請優(yōu)先級大于接收上下文的優(yōu)先級,則將接收上下文的優(yōu)先級賦值為連接申請請求報文的連接申請優(yōu)先級;目的節(jié)點構(gòu)造連接申請報錯報文,并依據(jù)預設(shè)路由策略發(fā)送連接申請報錯報文給源節(jié)點,跳轉(zhuǎn)執(zhí)行步驟3.11);
      3.8)目的節(jié)點網(wǎng)卡判斷接收上下文數(shù)據(jù)結(jié)構(gòu)中的當前可用接收上下文個數(shù),如果當前可用接收上下文個數(shù)為O,則阻塞連接申請報文的處理;如果當前可用接收上下文個數(shù)大于O,則在接收上下文數(shù)據(jù)結(jié)構(gòu)中分配接收上下文,接收上下文數(shù)據(jù)結(jié)構(gòu)中可用接收上下文個數(shù)遞減;設(shè)置超時計數(shù)器的值為接收數(shù)據(jù)超時值,設(shè)置接收上下文的接收狀態(tài)為“接收數(shù)據(jù)”、接收字節(jié)總數(shù)為連接申請請求報文的數(shù)據(jù)長度、當前已接收字節(jié)數(shù)為O、消息標識信息高位為連接申請請求報文的消息標識信息高位,消息標識信息低位為O、錯誤次數(shù)為O,目的節(jié)點構(gòu)造連接申請確認報文,依據(jù)預設(shè)路由策略發(fā)送連接申請確認報文給源節(jié)點,跳轉(zhuǎn)執(zhí)行步驟3.9);
      3.9)源節(jié)點網(wǎng)卡收到連接申請確認報文,首先對連接申請確認報文進行CRC校驗,如果連接申請報文到達目的節(jié)點CRC檢查出錯,則丟棄該報文,并報錯;如果連接申請確認報文正確到達源節(jié)點且CRC校驗,則跳轉(zhuǎn)執(zhí)行步驟3.10);
      3.10)源節(jié)點網(wǎng)卡如果能找到匹配的發(fā)送上下文且該發(fā)送上下文的發(fā)送狀態(tài)為“連接申請”或“延遲等待”,則設(shè)置發(fā)送上下文的超時計數(shù)器值為發(fā)送數(shù)據(jù)超時值、發(fā)送狀態(tài)為“發(fā)送數(shù)據(jù)”,消息標識信息低位為連接申請確認報文的消息標識信息低位,依據(jù)預設(shè)路由策略開始發(fā)送數(shù)據(jù)報文;否則,丟棄連接申請確認報文,并報錯退出;
      3.11)源節(jié)點網(wǎng)卡收到連接申請報錯報文,首先對連接申請報錯報文進行CRC校驗,如果連接申請報錯報文正確到達源節(jié)點并通過CRC檢查,則跳轉(zhuǎn)執(zhí)行步驟3.12),否則丟棄申請報錯報文并報錯退出;
      3.12)源節(jié)點網(wǎng)卡判斷CnctReqNackEn值是否為1,如果CnctReqNackEn值為O(CnctReqNackEn=O),則丟棄報文并報錯退出;否則如果CnctReqNackEn值為1,則跳轉(zhuǎn)執(zhí)行步驟3.13);
      3.13)源節(jié)點網(wǎng)卡在發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)中查找匹配的發(fā)送上下文,否則如果未能找到匹配的發(fā)送上下文,則丟棄報文并報錯退出;如果能找到匹配的發(fā)送上下文且發(fā)送上下文的發(fā)送狀態(tài)為“連接申請”,則檢查預先設(shè)置的MaxNackEn值和匹配的發(fā)送上下文中的連接申請優(yōu)先級,如果MaxNackEn值為I且匹配的發(fā)送上下文中的連接申請優(yōu)先級已經(jīng)為預設(shè)的最大值,報錯并回收匹配的發(fā)送上下文;否則如果不能同時滿足MaxNackEn值為I且匹配的發(fā)送上下文中的連接申請優(yōu)先級已經(jīng)為預設(shè)的最大值,則設(shè)置發(fā)送上下文中超時計數(shù)器的值為退火計數(shù)器的值、退火計數(shù)器的值為原值乘以2的連接申請重試退火系數(shù)次冪、發(fā)送狀態(tài)為“延遲等待”,跳轉(zhuǎn)執(zhí)行步驟3.2);其中MaxNackEn值用于表示當重試優(yōu)先級到達最大值時是否繼續(xù)重試,MaxNackEn值為I表示不繼續(xù)重試,MaxNackEn值為O表示繼續(xù)以最大優(yōu)先級進行重試;同時,源節(jié)點網(wǎng)卡對超時計數(shù)器進行遞減計數(shù),當超時計數(shù)器超時則跳轉(zhuǎn)執(zhí)行步驟3.14);
      3.14)源節(jié)點網(wǎng)卡檢查匹配的發(fā)送上下文的錯誤次數(shù),如果錯誤次數(shù)小于發(fā)送方允許的最大錯誤次數(shù),則重置超時計數(shù)器的值為預設(shè)的連接申請超時值,遞增錯誤次數(shù),注意退火計數(shù)器的值和連接申請優(yōu)先級保持不變,源節(jié)點依據(jù)預設(shè)路由策略重發(fā)連接申請報文,跳轉(zhuǎn)執(zhí)行步驟3.2);否則報錯并回收匹配的發(fā)送上下文。 所述步驟4)的詳細步驟如下:
      S4.1)源節(jié)點網(wǎng)卡以D MA方式從本機主存中取數(shù)據(jù),并封裝成RDMA報文根據(jù)預設(shè)路由策略發(fā)往目的節(jié)點,跳轉(zhuǎn)執(zhí)行步驟S4.2);同時,源節(jié)點網(wǎng)卡檢查發(fā)送上下文的超時計數(shù)器,如果超時計數(shù)器超時,則同時跳轉(zhuǎn)執(zhí)行步驟S4.11);
      S4.2)目的節(jié)點網(wǎng)卡接收RDMA報文,對RDMA報文進行CRC校驗,如果CRC校驗通過則說明數(shù)據(jù)報文正確到達目的節(jié)點,則跳轉(zhuǎn)執(zhí)行步驟S4.3),否則跳轉(zhuǎn)執(zhí)行步驟S4.6);
      S4.3)目的節(jié)點網(wǎng)卡檢查接收上下文數(shù)據(jù)結(jié)構(gòu)中是否存在匹配的接收上下文,如果不存在匹配的接收上下文或者匹配的接收上下文的狀態(tài)并非“接收數(shù)據(jù)”,則丟棄該RDMA報文并報錯退出;如果存在匹配的接收上下文且匹配的接收上下文的狀態(tài)為“接收數(shù)據(jù)”,則接收該RDMA數(shù)據(jù)報文,將接收上下文中已經(jīng)接收的字節(jié)數(shù)加上RDMA報文攜帶的數(shù)據(jù)字節(jié)數(shù);同時目的節(jié)點網(wǎng)卡判斷已經(jīng)接收的字節(jié)數(shù)是否等于RDMA消息包含的報文總數(shù),如果等于RDMA消息包含的報文總數(shù),則依據(jù)預設(shè)路由策略發(fā)送數(shù)據(jù)傳輸完成響應(yīng)報文,執(zhí)行中斷或事件通知操作,回收匹配的接收上下文資源,跳轉(zhuǎn)執(zhí)行步驟S4.4);否則繼續(xù)接收RDMA報文;
      S4.4)源節(jié)點網(wǎng)卡收到傳輸完成響應(yīng)報文并進行CRC校驗,如果數(shù)據(jù)傳輸完成響應(yīng)報文正確到達源節(jié)點并CRC校驗通過,則跳轉(zhuǎn)執(zhí)行步驟S4.5);否則如果數(shù)據(jù)傳輸完成響應(yīng)報文到達源節(jié)點CRC檢查出錯,則丟棄報文并報錯退出;
      S4.5)源節(jié)點網(wǎng)卡檢查發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)在是否存在匹配的發(fā)送上下文,如果存在匹配的發(fā)送上下文且匹配的發(fā)送上下文狀態(tài)為“發(fā)送數(shù)據(jù)”或“發(fā)送探測報文”,則執(zhí)行中斷或事件通知操作,回收匹配的發(fā)送上下文資源并退出,報文傳輸完成退出;否則,丟棄探測成功響應(yīng)報文并報錯退出;
      S4.6)目的節(jié)點網(wǎng)卡檢查接收上下文數(shù)據(jù)結(jié)構(gòu)中是否存在匹配的接收上下文,如果預設(shè)的ExplicitRetryEn=U存在匹配的接收上下文且匹配的接收上下文狀態(tài)為“接收數(shù)據(jù)”,則跳轉(zhuǎn)執(zhí)行步驟S4.7),否則丟棄報文并報錯退出;其中,ExplicitRetryEn值用于判斷當源節(jié)點或目的節(jié)點檢測到數(shù)據(jù)報文CRC錯或目的節(jié)點RCxt超時時是否發(fā)送顯式重傳報文,ExplicitRetryEn值為I表·示發(fā)送顯式重傳報文,ExplicitRetryEn值為O表示不發(fā)送顯式重傳報文;
      S4.7)目的節(jié)點網(wǎng)卡檢查接收上下文中的接收錯誤次數(shù),如果接收錯誤次數(shù)小于預設(shè)的接收方允許的最大錯誤次數(shù),則置匹配的接收上下文當前已接收字節(jié)數(shù)為O、遞增消息標識信息低位和接收錯誤次數(shù)、超時計數(shù)器為預設(shè)接收數(shù)據(jù)超時值,依據(jù)預設(shè)路由策略發(fā)送顯式重傳報文給源節(jié)點,跳轉(zhuǎn)執(zhí)行步驟S4.8);否則目的節(jié)點網(wǎng)卡報錯,回收匹配的接收上下文并退出;
      S4.8)源節(jié)點網(wǎng)卡收到顯式重傳報文,首先對顯式重傳報文進行CRC校驗,如果CRC校驗不通過,則丟棄該顯式重傳報文并報錯退出;如果CRC校驗通過,如果顯式重傳報文正確到達源節(jié)點并CRC校驗通過,則跳轉(zhuǎn)執(zhí)行步驟S4.9);
      S4.9)源節(jié)點網(wǎng)卡在發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)中查找匹配的發(fā)送上下文,如果找到匹配的發(fā)送上下文且匹配的發(fā)送上下文狀態(tài)為“發(fā)送數(shù)據(jù)”或“發(fā)送探測報文”,則跳轉(zhuǎn)執(zhí)行步驟S4.10),否則,丟棄該報文并報錯退出;
      S4.10)源節(jié)點網(wǎng)卡檢查匹配的發(fā)送上下文的發(fā)送錯誤次數(shù),如果發(fā)送錯誤次數(shù)小于預設(shè)的發(fā)送方允許的最大錯誤次數(shù),則檢查匹配的發(fā)送上下文中的消息標識信息低位,如果發(fā)送上下文中的消息標識信息低位小于顯式重傳報文中的消息標識信息低位,則置匹配的發(fā)送上下文中的消息標識信息低位為顯式重傳報文中的消息標識信息低位、超時計數(shù)器為發(fā)送數(shù)據(jù)和回收響應(yīng)超時值、狀態(tài)為“發(fā)送數(shù)據(jù)”、遞增發(fā)送錯誤次數(shù),依據(jù)預設(shè)路由策略重新發(fā)送數(shù)據(jù)報文,跳轉(zhuǎn)執(zhí)行步驟S4.2);如果發(fā)送上下文中的消息標識信息低位小于顯式重傳報文中的消息標識信息低位不成立,丟棄該報文并報錯退出;如果發(fā)送錯誤次數(shù)小于預設(shè)的發(fā)送方允許的最大錯誤次數(shù)不成立,則丟棄該報文,報錯并回收匹配的發(fā)送上下文資源后退出;
      S4.11)源節(jié)點網(wǎng)卡根據(jù)超時計數(shù)器檢查發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)中的發(fā)送上下文狀態(tài),當超時計數(shù)器超時且對應(yīng)的發(fā)送上下文的狀態(tài)為“發(fā)送數(shù)據(jù)”時,檢查對應(yīng)的發(fā)送上下文中的錯誤次數(shù),如果錯誤次數(shù)小于發(fā)送方允許的最大錯誤次數(shù),則將發(fā)送上下文狀態(tài)修改為“發(fā)送探測報文”、發(fā)送上下文中的超時計數(shù)器修改為探測請求超時值、遞增錯誤次數(shù),依據(jù)預設(shè)路由策略發(fā)送探測報文,跳轉(zhuǎn)執(zhí)行步驟S4.13);否則報嚴重錯,回收發(fā)送上下文并退出;當超時計數(shù)器超時且對應(yīng)的發(fā)送上下文的狀態(tài)為“發(fā)送探測報文”時跳轉(zhuǎn)執(zhí)行步驟S4.12);S4.12)源節(jié)點網(wǎng)卡檢查對應(yīng)的發(fā)送上下文中的錯誤次數(shù),如果錯誤次數(shù)小于發(fā)送方允許的最大錯誤次數(shù),則將對應(yīng)的發(fā)送上下文中的超時計數(shù)器修改為探測請求超時值、遞增錯誤次數(shù),依據(jù)預設(shè)路由策略發(fā)送探測報文,如果目的節(jié)點網(wǎng)卡收到探測報文并跳轉(zhuǎn)執(zhí)行步驟S4.13);否則如果錯誤次數(shù)小于發(fā)送方允許的最大錯誤次數(shù)不成立,則源節(jié)點網(wǎng)卡報嚴重錯,回收對應(yīng)的發(fā)送上下文并退出;
      S4.13)目的節(jié)點網(wǎng)卡收到·探測報文并進行CRC校驗,如果CRC校驗出錯則丟棄探測報文并報錯退出;如果探測報文CRC校驗通過,則跳轉(zhuǎn)執(zhí)行步驟S4.14);
      S4.14)目的節(jié)點網(wǎng)卡檢查接收上下文數(shù)據(jù)結(jié)構(gòu)在是否存在匹配的接收上下文,如果存在匹配的接收上下文且匹配的接收上下文的狀態(tài)為“接收數(shù)據(jù)”,則跳轉(zhuǎn)執(zhí)行步驟S4.15);如果不存在匹配的接收上下文則向源節(jié)點返回探測失敗響應(yīng)報文,則目的節(jié)點網(wǎng)卡向源節(jié)點返回探測失敗響應(yīng)報文,跳轉(zhuǎn)執(zhí)行步驟S4.17);
      S4.15)目的節(jié)點網(wǎng)卡檢查匹配的接收上下文的消息標識信息低位,當探測報文的消息標識信息低位等于匹配的接收上下文的消息標識信息低位時,則置匹配的接收上下文的當前已接收字節(jié)數(shù)為O、遞增消息標識信息低位和錯誤次數(shù),超時計數(shù)器為預設(shè)接收數(shù)據(jù)超時值、目的節(jié)點網(wǎng)卡向源節(jié)點返回探測成功響應(yīng)報文,跳轉(zhuǎn)執(zhí)行步驟S4.17);否則當探測報文的消息標識信息低位不等于匹配的接收上下文的消息標識信息低位時,跳轉(zhuǎn)執(zhí)行步驟S4.16);
      S4.16)目的節(jié)點網(wǎng)卡判斷匹配的接收上下文的錯誤次數(shù)是否小于預設(shè)的接收方允許的最大錯誤次數(shù);如果匹配的接收上下文的錯誤次數(shù)小于預設(shè)的接收方允許的最大錯誤次數(shù),則置接收上下文的當前已接收字節(jié)數(shù)為O,遞增消息標識信息低位和錯誤次數(shù),超時計數(shù)器為預設(shè)接收數(shù)據(jù)超時值,目的節(jié)點網(wǎng)卡向源節(jié)點返回探測成功響應(yīng)報文,跳轉(zhuǎn)執(zhí)行步驟S4.17);如果匹配的接收上下文的錯誤次數(shù)小于預設(shè)的接收方允許的最大錯誤次數(shù)不成立,則丟棄探測報文并報錯退出;
      S4.17)源節(jié)點網(wǎng)卡收到探測成功響應(yīng)報文或者探測失敗響應(yīng)報文并進行CRC校驗,如果探測成功響應(yīng)報文或者探測失敗響應(yīng)報文CRC校驗通過,則跳轉(zhuǎn)執(zhí)行步驟S4.18),否則丟棄報文并報錯退出;
      S4.18)源節(jié)點網(wǎng)卡檢查發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)在是否存在匹配的發(fā)送上下文,如果存在匹配的發(fā)送上下文且匹配的發(fā)送上下文的狀態(tài)為“發(fā)送探測報文”,則跳轉(zhuǎn)執(zhí)行步驟S4.19),否則丟棄該報文并報錯退出;
      S4.19)檢測收到的探測成功響應(yīng)報文或者探測失敗響應(yīng)報文攜帶的探測結(jié)果類型,如果探測結(jié)果類型為“探測成功”且匹配的發(fā)送上下文的消息標識信息低位不等于收到的探測成功響應(yīng)報文或者探測失敗響應(yīng)報文的消息標識信息低位,置匹配的發(fā)送上下文的消息標識信息低位為收到的探測成功響應(yīng)報文或者探測失敗響應(yīng)報文的消息標識信息低位、超時計數(shù)器的值為發(fā)送數(shù)據(jù)和回收響應(yīng)超時值、狀態(tài)為“發(fā)送數(shù)據(jù)”,依據(jù)預設(shè)路由策略向目的節(jié)點重新發(fā)送數(shù)據(jù)報文,跳轉(zhuǎn)執(zhí)行步驟4.1);如果探測結(jié)果類型為“探測失敗”且匹配的發(fā)送上下文的消息標識信息低位等于探測成功響應(yīng)報文的消息標識信息低位則執(zhí)行中斷或事件通知操作,回收匹配的發(fā)送上下文資源并退出。本發(fā)明基于片內(nèi)連接管理的RDMA通信方法具有下述優(yōu)點:
      1、本發(fā)明在網(wǎng)卡內(nèi)部建立發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)和接收上下文數(shù)據(jù)結(jié)構(gòu),從而通過網(wǎng)卡實現(xiàn)了源節(jié)點和目的節(jié)點之間的連接管理,克服了現(xiàn)有InfiniBand技術(shù)方案在主機內(nèi)存中為可靠性數(shù)據(jù)傳輸分配相關(guān)數(shù)據(jù)結(jié)構(gòu)并進行連接管理存在的規(guī)模可擴展性問題,對于未來構(gòu)建艾級并行計算機系統(tǒng)具有重要的意義,能增強系統(tǒng)的規(guī)??蓴U展性,具有可擴展性好的優(yōu)點。2、本發(fā)明基于消息的報文計數(shù)確定消息的完整性,從而支持源和目的節(jié)點間多路徑傳輸,因此該設(shè)計能夠?qū)W(wǎng)絡(luò)的自適應(yīng)路由提供完美的支持,這對于通過自適應(yīng)路由提高網(wǎng)絡(luò)擁塞情況下的傳輸性能具有重要的作用;而且本發(fā)明的錯誤數(shù)據(jù)重傳機制能夠提供原路由重傳功能和變路由重傳功能,能夠提高RDMA消息傳輸?shù)目煽啃裕夷軌蚶@過網(wǎng)絡(luò)故障區(qū)域保證消息的可靠傳輸,這對于降低網(wǎng)絡(luò)故障對用戶數(shù)據(jù)通信的影響具有重要作用,具有支持多路徑傳輸、數(shù)據(jù)傳輸可靠的優(yōu)點。3、本發(fā)明的DMA讀取方式和報文發(fā)送邏輯處理方式,能夠?qū)崿F(xiàn)后續(xù)RDMA事務(wù)的握手過程可與先前RDMA事務(wù)的報文發(fā)送過程重疊,從而能夠隱藏后續(xù)RDMA事務(wù)連接建立時間,這種設(shè)計非常適合于在某個時間段內(nèi)有多個描述符等待處理的情況,因此對于多核CPU運行環(huán)境非常有利,多核處理效率高,支持連接建立過程的延遲隱藏。4、本發(fā)明源節(jié)點申請發(fā)送上下文(TCxt)后不需要與目的節(jié)點建立連接就直接發(fā)送報文,目的節(jié)點檢測報文的正確性并返回確認和錯誤報文(Ack/Nack),但無需建立接收上下文(RCxt),因此對于等于或小于單個報文長度的RDMA傳輸,該設(shè)計并不會因握手過程產(chǎn)生額外時延,這種設(shè)計使用非連接方式發(fā)送單報文消息,即消息數(shù)據(jù)可以全部封裝在一個報文中,能夠降低單報文消息的傳輸延遲,能較好地支持高消息率編程模型(例如分段全局地址空間PGAS編程模型等)。


      圖1為本發(fā)明實施例的基本流程示意圖。圖2為本發(fā)明實施例中發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)示意圖。圖3為本發(fā)明實施例中接收上下文數(shù)據(jù)結(jié)構(gòu)示意圖。圖4為本發(fā)明實施例中節(jié)點的結(jié)構(gòu)示意圖。圖5為本 發(fā)明實施例中步驟3)的數(shù)據(jù)處理流程示意圖。
      圖6為本發(fā)明實施例中步驟4)的數(shù)據(jù)處理流程示意圖。
      具體實施例方式如圖1所示,本實施例基于片內(nèi)連接管理的RDMA通信方法的實施步驟如下:
      1)在源節(jié)點、目的節(jié)點的網(wǎng)卡中分別建立用于存儲發(fā)送上下文的發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)以及用于存儲接收上下文的接收上下文數(shù)據(jù)結(jié)構(gòu),在源節(jié)點、目的節(jié)點的內(nèi)存中分別建立用于提交通信請求描述符的描述符隊列、用于記錄描述符完成情況的完成事件隊列;
      2)源節(jié)點主機在需要發(fā)送RDMA消息時向描述符隊列提交描述符并置門鈴標志,源節(jié)點網(wǎng)卡根據(jù)門鈴標識從描述符隊列中獲取描述符;
      3)源節(jié)點網(wǎng)卡申請發(fā)送上下文,計算RDMA消息包含的報文總數(shù),獲取RDMA消息事務(wù)號,構(gòu)造連接申請請求報文并發(fā)往目的節(jié)點;目的節(jié)點網(wǎng)卡接收連接申請請求報文后,在目的節(jié)點網(wǎng)卡中分配接收上下文,將連接申請請求報文中的信息填入接收上下文并啟動接收計時器,向源節(jié)點網(wǎng)卡發(fā)送連接申請確認報文,源節(jié)點網(wǎng)卡接收到連接申請確認報文后,將連接申請確認報文中的信息保存在發(fā)送上下文中并啟動發(fā)送計時器;
      4)源節(jié)點以DMA方式從本機主存中取數(shù)據(jù),并封裝成RDMA報文根據(jù)路由策略發(fā)往目的節(jié)點;目的節(jié)點網(wǎng)卡接收RDMA報文并檢測RDMA報文的正確性,將RDMA報文的數(shù)據(jù)載荷寫入主存,對接收到的RDMA報文進行計數(shù);當計數(shù)值等于RDMA消息的報文總數(shù)時目的節(jié)點網(wǎng)卡向主存中的完成事件隊列寫入完成事件,并向源節(jié)點網(wǎng)卡發(fā)送傳輸完成響應(yīng)報文,釋放接收上下文;源節(jié)點網(wǎng)卡接收到傳輸完成響應(yīng)報文后,向王存中的完成事件隊列與入完成事件,并釋放發(fā)送上下文。本實施例中,發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)中可容納發(fā)送上下文的數(shù)量為W ^RTT/!,其中W為網(wǎng)絡(luò)鏈路帶寬,RTT為最大RDMA消息往返時間,L為最小RDMA消息長度,通過上述數(shù)量設(shè)置,使得本實施例中TCxt個數(shù)設(shè)置能夠保證多個RDMA事務(wù)的重疊傳輸,即一個RDMA事務(wù)報文發(fā)送完畢后產(chǎn)生的氣泡能用其它RDM`A事務(wù)報文的發(fā)送填滿,從而能夠提高RDMA事務(wù)的傳輸效率。如圖2所示,本實施例中發(fā)送上下文(TCxt)數(shù)據(jù)結(jié)構(gòu)中各個域的含義分別為:DestID:目的節(jié)點號;RCxtID:目的接收上下文(RCxt)號;TMsgIDHigh:消息標識(MsgID)信息高位;TMsgIDLow:消息標識(MsgID)信息低位;TTimer:超時計數(shù)器;TimerTH:退火計數(shù)器;TStatus:狀態(tài)(發(fā)送數(shù)據(jù)狀態(tài),包括連接申請、延遲等待、發(fā)送數(shù)據(jù)、發(fā)送探測報文等);CnctPR1:連接申請優(yōu)先級;TPcnt:接收字節(jié)總數(shù);TRcnt:當前已接收字節(jié)數(shù);TERRcnt:錯誤次數(shù)。如圖3所示,本實施例中接收上下文(RCxt)數(shù)據(jù)結(jié)構(gòu)中各個域的含義分別為:SrcID:源節(jié)點號;TCxtID:目的發(fā)送上下文TCxt號;RMsgIDHigh:消息標識(MsgID)信息高位;RMsgIDLow:消息標識(MsgID)信息低位;RCxtFreeNum:當前可用RCxt個數(shù),為所有的RCxt共享;RCxtPR1:當前RCxt優(yōu)先級,為所有的RCxt共享;RTimer:超時計數(shù)器;RStatus:狀態(tài)(接收數(shù)據(jù)狀態(tài));RPcnt:接收字節(jié)總數(shù);RRcnt:當前已接收字節(jié)數(shù);RErrCnt:錯誤次數(shù)。本實施例中相關(guān)配置參數(shù)說明如下:
      (A)CnctReqNackEn:當RCxt資源耗光時,是否對連接申請請求返回Nack報文響應(yīng)。值為I表示返回Nack響應(yīng),讓源節(jié)點重試;值為O表示不返回Nack報文響應(yīng),阻塞連接請求通道。(B) ExplicitRetryEn:當源節(jié)點或目的節(jié)點檢測到數(shù)據(jù)報文CRC錯或目的節(jié)點RCxt超時時,是否發(fā)送顯式重傳報文。值為I表示發(fā)送顯式重傳報文;值為O表示不發(fā)送顯式重傳報文。(C) MaxNackEn:當重試優(yōu)先級到達最大值時,是否繼續(xù)重試。值為I表示不繼續(xù)重試;值為O表示繼續(xù)以最大優(yōu)先級進行重試。(D) TimerCnct:連接申請超時值。(E) TimerDetect:探測請求超時值。(F) TimerRcvData:RCxt 接收數(shù)據(jù)超時值。(G) TimerSendData:TCxt發(fā)送數(shù)據(jù)和回收響應(yīng)超時值。(H) TimerTHBase:連接申請重試退火超時基值。

      (I) THCo:連接申請重試退火系數(shù)。(J) MaxTxERRcnt:發(fā)送方允許的最大錯誤次數(shù),本實施例中MaxTxERRcnt取值為2'width(MsgIDLow)-1, MaxTxERRcnt 比 TERRcnt 多 I 位,用于實現(xiàn)無限重傳。(K) MaxRxERRcnt:接收方允許的最大錯誤次數(shù),本實施例中MaxRxERRcnt取值為2'width(MsgIDLow)-1, MaxRxERRcnt 比 RERRcnt 多 I 位,用于實現(xiàn)無限重傳。(L) RtPolicyTable [TERRcnt]:路由策略選擇表,一維數(shù)組,以錯誤次數(shù)作為索引號,內(nèi)容為路由策略編碼。在確定性路由中,路由策略編碼指定不同的網(wǎng)絡(luò)路由路徑,網(wǎng)絡(luò)中每個路由交換單元依據(jù)報文頭攜帶的路由策略編碼信息確定該報文的輸出端口。如圖5所示,結(jié)合本實施例的上述配置參數(shù),本實施例步驟3)的數(shù)據(jù)處理流程如下:
      3.1)源節(jié)點網(wǎng)卡首先根據(jù)描述符申請發(fā)送上下文,所述發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)包括目的節(jié)點號、目的接收上下文號、消息標識信息高位、消息標識信息低位、超時計數(shù)器、退火計數(shù)器、狀態(tài)、連接申請優(yōu)先級、接收字節(jié)總數(shù)、當前已接收字節(jié)數(shù)、錯誤次數(shù);然后獲取發(fā)送上下文TCxt及其消息標識信息高位TMsglDHigh,計算RDMA消息包含的報文總數(shù),獲取RDMA消息事務(wù)號,初始化設(shè)置發(fā)送上下文的超時計數(shù)器的值為預設(shè)的連接申請超時值、退火計數(shù)器的值為預設(shè)的連接申請重試退火超時基值、發(fā)送狀態(tài)為“連接申請”、連接申請優(yōu)先級為O、錯誤次數(shù)為O、消息標識信息低位為O (設(shè)置TTimer=TimerCnct,TimerTH=TimerTHBase, TStatus= “連接申請”,CnctPRI=O, TERRcnt=O, TMsgIDLow=O),構(gòu)造連接申請請求報文,根據(jù)預設(shè)路由策略RtPolicyTable[TERRcnt]發(fā)送連接申請報文(Apply 報文,包含 SrcID、DestID, TCxt, TMsglDHigh、TMsglDLow、CncPRI 域)給目的節(jié)點。3.2)目的節(jié)點網(wǎng)卡接收到連接申請請求報文并進行檢查(CRC校驗)。3.3)目的節(jié)點網(wǎng)卡對報文CRC校驗結(jié)果進行判斷,如果連接申請報文(Apply報文)正確到達目的節(jié)點后CRC校驗,則跳轉(zhuǎn)執(zhí)行步驟3.4),否則如果CRC校驗出錯,則丟棄連接申請請求報文并報錯退出。3.4)目的節(jié)點網(wǎng)卡在接收上下文數(shù)據(jù)結(jié)構(gòu)中檢查是否有與連接申請請求報文匹配的接收上下文,即檢查是否有報文中的SrcID、TCxt與RCxt匹配,如果有報文中的SrcID、TCxt與RCxt匹配,則跳轉(zhuǎn)執(zhí)行步驟3.5),否則跳轉(zhuǎn)執(zhí)行步驟3.6)。
      3.5)目的節(jié)點網(wǎng)卡檢查報文中的MsgIDHigh與RCxt中的RMsgIDHigh是否相同,如果報文中的MsgIDHigh與RCxt中的RMsgIDHigh相同(連接申請請求報文的消息標識信息的高位與匹配的接收上下文的消息標識信息的高位相同),且匹配的接收上下文的狀態(tài)為“接收數(shù)據(jù)”(RStatus= “接收數(shù)據(jù)”),則依據(jù)預設(shè)路由策略RtPolicyTable [RERRcnt]發(fā)送連接申請確認報文(Ack 報文,包含 SrcID、DestID、TCxt> RCxt、RMsglDHigh、RMsgIDLow域)給源節(jié)點,跳轉(zhuǎn)執(zhí)行步驟3.9);否則,如果報文中的MsgIDHigh與RCxt中的RMsgIDHigh不相同,則丟棄連接申請請求報文并報錯退出。3.6)目的節(jié)點網(wǎng)卡檢查CnctReqNackEn值是否為I, CnctReqNackEn值具體是指當接收上下文數(shù)據(jù)結(jié)構(gòu)中的接收上下文RCxt資源耗光時是否對連接申請請求返回Nack報文響應(yīng),CnctReqNackEn值為I表示返回Nack報文響應(yīng)讓源節(jié)點重試;當CnctReqNackEn的值為O表示不返回Nack報文響應(yīng),阻塞連接請求通道。如果CnctReqNackEn等于I,則跳轉(zhuǎn)執(zhí)行步驟3.7);如果CnctReqNackEn等于0,則跳轉(zhuǎn)執(zhí)行步驟3.8)。3.7)目的節(jié)點網(wǎng)卡比較連接申請請求報文的連接申請優(yōu)先級和接收上下文的優(yōu)先級,如果目的節(jié)點網(wǎng)卡的接收上下文數(shù)據(jù)結(jié)構(gòu)中的當前可用接收上下文個數(shù)大于零(RCxtFreeNum)O)且連接申請請求報文的連接申請優(yōu)先級大于或等于接收上下文的優(yōu)先級(CnctPRD=RCxtPRI ),或目的節(jié)點網(wǎng)卡的接收上下文數(shù)據(jù)結(jié)構(gòu)中的當前可用接收上下文個數(shù)大于I (RCxtFreeNum>l),則在接收上下文數(shù)據(jù)結(jié)構(gòu)中分配接收上下文RCxt,將接收上下文數(shù)據(jù)結(jié)構(gòu)中可用接收上下文個數(shù)RCxtFreeNum遞減,如果連接申請請求報文的連接申請優(yōu)先級大于或等于接收上下文的優(yōu)先級(CnctPRI>=RCxtPRI),則將接收上下文的優(yōu)先級賦值為O (RCxtPRI=O),設(shè)置超時計數(shù)器的值為接收數(shù)據(jù)超時值(RTimer=TimerRcvData),設(shè)置接收上下文的狀態(tài)為“接收數(shù)據(jù)”(RStatus= “接收數(shù)據(jù)”),接收字節(jié)總數(shù)為連接申請請求報文的數(shù)據(jù)長度(RPcnt=報文中的數(shù)據(jù)長度),當前已接收字節(jié)數(shù)為O (RRcnt=O),消息標識信息高位為連接申 請請求報文的消息標識信息高位(RMsgmHigh=TMsgmHigh),消息標識信息低位為O (RMsgIDLow=O),錯誤次數(shù)為O (RERRcnt=O),目的節(jié)點構(gòu)造連接申請確認報文并依據(jù)預設(shè)路由策略RtPolicyTable [RERRcnt]發(fā)送連接申請確認報文給源節(jié)點,跳轉(zhuǎn)執(zhí)行步驟3.9)。否則目的節(jié)點網(wǎng)卡比較連接申請請求報文的連接申請優(yōu)先級和接收上下文的優(yōu)先級后,如果連接申請請求報文的連接申請優(yōu)先級大于接收上下文的優(yōu)先級(CnctPRI>RCxtPRI),則將接收上下文的優(yōu)先級賦值為連接申請請求報文的連接申請優(yōu)先級(RCxtPRI=CnctPRI )。目的節(jié)點構(gòu)造連接申請報錯報文,并依據(jù)預設(shè)路由策略RtPolicyTable [RERRcnt]發(fā)送連接申請報錯報文(Nack 報文,包含 SrcID、DestID、TCxt>TMsglDHigh、TMsgIDLow域)給源節(jié)點,跳轉(zhuǎn)執(zhí)行步驟3.11)。3.8)目的節(jié)點網(wǎng)卡判斷接收上下文數(shù)據(jù)結(jié)構(gòu)中的當前可用接收上下文個數(shù)RCxtFreeNum,如果當前可用接收上下文個數(shù)為O (RCxtFreeNum=O),則阻塞連接申請報文(Apply報文)的處理;如果當前可用接收上下文個數(shù)大于O (RCxtFreeNum>0),則在接收上下文數(shù)據(jù)結(jié)構(gòu)中分配接收上下文RCxt,接收上下文數(shù)據(jù)結(jié)構(gòu)中可用接收上下文個數(shù)RCxtFreeNum遞減。設(shè)置超時計數(shù)器的值為接收數(shù)據(jù)超時值(RTimer=TimerRcvData),設(shè)置接收上下文的狀態(tài)為“接收數(shù)據(jù)”(RStatus= “接收數(shù)據(jù)”),接收字節(jié)總數(shù)為連接申請請求報文的數(shù)據(jù)長度(RPcnt=報文中的數(shù)據(jù)長度)、當前已接收字節(jié)數(shù)為0(RRcnt=0)、消息標識信息高位為連接申請請求報文的消息標識信息高位(RMsgI腿gh=TMsgI腿gh)、消息標識信息低位為O (RMsgIDLow=O)、錯誤次數(shù)為O (RERRcnt=O),目的節(jié)點構(gòu)造連接申請確認報文,依據(jù)預設(shè)路由策略RtPoIicyTable [RERRcnt]發(fā)送連接申請確認報文(Ack報文)給源節(jié)點,跳轉(zhuǎn)執(zhí)行步驟3.9)。3.9)源節(jié)點網(wǎng)卡收到連接申請確認報文,首先對連接申請確認報文進行CRC校驗,如果連接申請報文(Apply報文)到達目的節(jié)點CRC檢查出錯,則丟棄該報文,并報錯。如果連接申請確認報文(Ack報文)正確到達源節(jié)點且CRC校驗,則跳轉(zhuǎn)執(zhí)行步驟3.10)。3.10)源節(jié)點網(wǎng)卡如果能找到匹配的發(fā)送上下文(SrcID、TCxt、MsgIDHigh匹配)且該發(fā)送上下文的狀態(tài)TStatus為“連接申請”或“延遲等待”,則設(shè)置發(fā)送上下文的超時計數(shù)器值為發(fā)送數(shù)據(jù)超時值(TTimer=TimerSendData)、狀態(tài)為“發(fā)送數(shù)據(jù)”(TStatus= “發(fā)送數(shù)據(jù)”),消息標識信息低位為連接申請確認報文的消息標識信息低位(TMsgIDLow=報文中的MsgIDLow),依據(jù)預設(shè)路由策略RtPolicyTable [TERRcnt]開始發(fā)送數(shù)據(jù)報文(包含SrcID、DestID、TCxt> RCxt、TMsglDHigh、TMsgIDLow域);否則,丟棄連接申請確認報文,并報錯退出。3.11)源節(jié)點網(wǎng)卡收到連接申請報錯報文,首先對連接申請報錯報文進行CRC校驗,如果連接申請報錯報文(Nack報文)正確到達源節(jié)點并通過CRC檢查,則跳轉(zhuǎn)執(zhí)行步驟3.12),否則丟棄申請報錯報文并報錯退出。3.12)源節(jié)點網(wǎng)卡判斷CnctReqNackEn值是否為1,如果CnctReqNackEn值為O(CnctReqNackEn=O),則丟棄報文并報錯退出。否則如果CnctReqNackEn值為1,則跳轉(zhuǎn)執(zhí)行步驟3.13)。3.13)源節(jié)點網(wǎng)卡在發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)中查找匹配的發(fā)送上下文,否則如果未能找到匹配的發(fā)送上下文,則丟棄報文并報錯退出;如果能找到匹配的發(fā)送上下文(SrcID、TCxt、MsgIDHigh+MsgIDLow匹配)且發(fā)送上下文狀態(tài)為“連接申請”(TStatus= “連接申請”),則檢查預先設(shè)置的MaxNackEn值和匹配的發(fā)送上下文中的連接申請優(yōu)先級,如果MaxNackEn值為I (MaxNack En=I)且匹配的發(fā)送上下文中的連接申請優(yōu)先級已經(jīng)為預設(shè)的最大值(CnctPRI=Max),報錯并回收匹配的發(fā)送上下文;否則如果不能同時滿足MaxNackEn值為I且匹配的發(fā)送上下文中的連接申請優(yōu)先級已經(jīng)為預設(shè)的最大值,則設(shè)置發(fā)送上下文中超時計數(shù)器的值為退火計數(shù)器的值(TTimer=TimerTH),退火計數(shù)器的值為原值乘以2的連接申請重試退火系數(shù)次冪(TimerTH=TimerTH〈〈THCo),狀態(tài)為“延遲等待”(TStatus= “延遲等待”),跳轉(zhuǎn)執(zhí)行步驟3.2)。其中MaxNackEn值用于表示當重試優(yōu)先級到達最大值時是否繼續(xù)重試,MaxNackEn值為I表示不繼續(xù)重試,MaxNackEn值為O表示繼續(xù)以最大優(yōu)先級進行重試。同時,源節(jié)點網(wǎng)卡對超時計數(shù)器進行遞減計數(shù),當超時計數(shù)器超時則跳轉(zhuǎn)執(zhí)行步驟 3.14)。3.14)源節(jié)點網(wǎng)卡檢查匹配的發(fā)送上下文的錯誤次數(shù)TERRcnt,如果錯誤次數(shù)TERRcnt小于發(fā)送方允許的最大錯誤次數(shù)MaxTxERRcnt (TERRcnt〈MaxTxERRcnt),則重置超時計數(shù)器的值為預設(shè)的連接申請超時值(TTimer=TimerCnct),遞增TERRcnt,注意退火計數(shù)器的值TimerTH和連接申請優(yōu)先級CnctPRI保持不變,源節(jié)點依據(jù)預設(shè)路由策略RtPolicyTable [TERRcnt]重發(fā)連接申請報文(Apply報文),跳轉(zhuǎn)執(zhí)行步驟3.2);否則報錯并回收匹配的發(fā)送上下文TCxt。如圖6所示,RDMA寫時的數(shù)據(jù)(RDMA報文)傳輸是在數(shù)據(jù)連接已經(jīng)建立的前提下啟動的,結(jié)合本實施例的配置參數(shù),本實施例步驟4)的數(shù)據(jù)處理流程如下:
      S4.1)源節(jié)點網(wǎng)卡以DMA方式從本機主存中取數(shù)據(jù),并封裝成RDMA報文根據(jù)預設(shè)路由策略發(fā)往目的節(jié)點,跳轉(zhuǎn)執(zhí)行步驟S4.2);同時,源節(jié)點網(wǎng)卡檢查發(fā)送上下文的超時計數(shù)器TTimer,如果超時計數(shù)器超時(TTimer=O),則同時跳轉(zhuǎn)執(zhí)行步驟S4.11)。S4.2)目的節(jié)點網(wǎng)卡接收RDMA報文,對RDMA報文進行CRC校驗,如果CRC校驗通過則說明數(shù)據(jù)報文正確到達目的節(jié)點,則跳轉(zhuǎn)執(zhí)行步驟S4.3),否則跳轉(zhuǎn)執(zhí)行步驟S4.6)。S4.3)目的節(jié)點網(wǎng)卡檢查接收上下文數(shù)據(jù)結(jié)構(gòu)中是否存在匹配的接收上下文,如果不存在匹配的接收上下文或者匹配的接收上下文的狀態(tài)并非“接收數(shù)據(jù)”,則丟棄該RDMA報文并報錯退出;如果存在匹配的接收上下文(報文中的SrcID、TCxt、RCxt、MsgIDHigh+MsgIDLow與RCxt匹配)且RStatus為“接收數(shù)據(jù)”,則接收該RDMA數(shù)據(jù)報文,將接收上下文中已經(jīng)接收的字節(jié)數(shù)加上RDMA報文攜帶的數(shù)據(jù)字節(jié)數(shù)(置RRcnt=RRcnt+報文攜帶的數(shù)據(jù)字節(jié)數(shù));同時目的節(jié)點網(wǎng)卡判斷已經(jīng)接收的字節(jié)數(shù)RRcnt是否等于RDMA消息包含的報文總數(shù)RPcnt,如果等于RDMA消息包含的報文總數(shù)(RRcnt=RPcnt)成立,則依據(jù)預設(shè)路由策略RtPolicyTable [RERRcnt]發(fā)送數(shù)據(jù)傳輸完成響應(yīng)報文(包括SrcID、DestID、TCxt、RCxt, TMsglDHigh、TMsgIDLow域),執(zhí)行中斷或事件通知操作,回收匹配的接收上下文RCxt資源,跳轉(zhuǎn)執(zhí)行步驟S4. 4);否則繼續(xù)接收RDMA報文。S4.4)源節(jié)點網(wǎng)卡收到傳輸完成響應(yīng)報文并進行CRC校驗,如果數(shù)據(jù)傳輸完成響應(yīng)報文(CmpAck報文)正確到達源節(jié)點并CRC校驗通過,則跳轉(zhuǎn)執(zhí)行步驟S4.5);否則如果數(shù)據(jù)傳輸完成響應(yīng)報文(CmpAck報文)到達源節(jié)點CRC檢查出錯,則丟棄報文并報錯退出。S4.5)源節(jié)點網(wǎng)卡檢查發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)在是否存在匹配的發(fā)送上下文,如果存在匹配的發(fā)送上下文(報文中的SrcID、TCxt、RCxt、MsgIDHigh與TCxt匹配)且匹配的發(fā)送上下文狀態(tài)為“發(fā)送數(shù)據(jù)”或“發(fā)送探測報文”,則執(zhí)行中斷或事件通知操作,回收匹配的發(fā)送上下文TCxt資源并退出,報文傳輸完成退出;否則,丟棄探測成功響應(yīng)報文并報錯退出。S4.6)目的節(jié)點網(wǎng)卡檢查接收上下文數(shù)據(jù)結(jié)構(gòu)中是否存在匹配的接收上下文,如果預設(shè)的ExplicitRetryEn=U存在匹配的接收上下文(報文中的SrcID、TCxt、RCxt、MsgIDHigh+MsgIDLow與RCxt匹配)且匹配的接收上下文狀態(tài)為“接收數(shù)據(jù)”,則跳轉(zhuǎn)執(zhí)行步驟S4.7),否則丟棄報文并報錯退出;其中,ExplicitRetryEn值用于判斷當源節(jié)點或目的節(jié)點檢測到數(shù)據(jù)報文CRC錯或目的節(jié)點RCxt超時時是否發(fā)送顯式重傳報文,ExplicitRetryEn值為I表示發(fā)送顯式重傳報文,ExplicitRetryEn值為O表示不發(fā)送顯式重傳報文。S4.7)目的節(jié)點網(wǎng)卡檢查接收上下文中的接收錯誤次數(shù),如果接收錯誤次數(shù)RERRcnt小于預設(shè)的接收方允許的最大錯誤次數(shù)MaxRxERRcnt (RERRcnt〈MaxRxERRcnt),則置匹配的接收上下文當前已接收字節(jié)數(shù)RRcnt為O、遞增消息標識信息低位RMsglDLow和接收錯誤次數(shù)RERRcnt、設(shè)置超時計數(shù)器為預設(shè)接收數(shù)據(jù)超時值(RTimer=TimerRcvData),依據(jù)預設(shè)路由策略RtPolicyTable [RERRcnt]發(fā)送顯式重傳報文(Retry報文,包括SrcID、DestID、TCxt、RCxt, RMsglDHigh、RMsgIDLow域)給源節(jié)點,跳轉(zhuǎn)執(zhí)行步驟S4.8);否則目的節(jié)點網(wǎng)卡報錯,回收匹配的接收上下文RCxt并退出。S4.8)源節(jié)點網(wǎng)卡收到顯式重傳報文,首先對顯式重傳報文進行CRC校驗,如果CRC校驗不通過,則丟棄該顯式重傳報文并報錯退出;如果CRC校驗通過,如果顯式重傳報文(Retry報文)正確到達源節(jié)點并CRC校驗通過,則跳轉(zhuǎn)執(zhí)行步驟S4.9)。S4.9)源節(jié)點網(wǎng)卡在發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)中查找匹配的發(fā)送上下文,如果找到匹配的發(fā)送上下文(報文中的SrcID、DestID、TCxt、RCxt、MsgIDHigh與TCxt匹配)且匹配的發(fā)送上下文狀態(tài)為“發(fā)送數(shù)據(jù)”或“發(fā)送探測報文”,則跳轉(zhuǎn)執(zhí)行步驟S4.10),否則,丟棄該報文并報錯退出。S4.10)源節(jié)點網(wǎng)卡檢查匹配的發(fā)送上下文的發(fā)送錯誤次數(shù),如果發(fā)送錯誤次數(shù)TERRcnt小于預設(shè)的發(fā)送方允許的最大錯誤次數(shù)MaxTxERRcnt (TERRcnt〈MaxTxERRcnt),則檢查匹配的發(fā)送上下文中的消息標識信息低位,如果發(fā)送上下文中的消息標識信息低位TMsgIDLow小于顯式重傳報文中的消息標識信息低位(TMsgIDLow<報文中的MsgIDLow),則置匹配的發(fā)送上下文中的消息標識信息低位為顯式重傳報文中的消息標識信息低位(TMsgIDLow=報文中的MsglDLow)、超時計數(shù)器為發(fā)送數(shù)據(jù)和回收響應(yīng)超時值(TTimer=TimerSendData)、狀態(tài)為“發(fā)送數(shù)據(jù)”(TStatus= “發(fā)送數(shù)據(jù),,)、遞增發(fā)送錯誤次數(shù)TERRcnt,依據(jù)預設(shè)路由策略RtPolicyTable [TERRcnt]重新發(fā)送數(shù)據(jù)報文,跳轉(zhuǎn)執(zhí)行步驟S4.2);如果發(fā)送上下文中的消息標識信息低位TMsgIDLow小于顯式重傳報文中的消息標識信息低位不成立,丟棄該報文并報錯退出;如果發(fā)送錯誤次數(shù)TERRcnt小于預設(shè)的發(fā)送方允許的最大錯誤次數(shù)MaxTxERRcnt不成立,則丟棄該報文,報錯并回收匹配的發(fā)送上下文TCxt資源后退出。S4.11)源 節(jié)點網(wǎng)卡根據(jù)超時計數(shù)器(TTimer=O)檢查發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)中的發(fā)送上下文狀態(tài),當超時計數(shù)器超時且對應(yīng)的發(fā)送上下文的狀態(tài)為“發(fā)送數(shù)據(jù)”(TTimer=O且TStatus= “發(fā)送數(shù)據(jù)”)時,檢查匹配的發(fā)送上下文中的錯誤次數(shù),如果錯誤次數(shù)TERRcnt小于發(fā)送方允許的最大錯誤次數(shù)MaxTxERRcnt (TERRcnt〈MaxTxERRcnt),則將發(fā)送上下文狀態(tài)修改為“發(fā)送探測報文”(TStatus= “發(fā)送探測報文”)、發(fā)送上下文中的超時計數(shù)器修改為探測請求超時值(TTimer=TimerDetect)、遞增錯誤次數(shù)TERRcnt,依據(jù)預設(shè)路由策略RtPolicyTable [TERRcnt]發(fā)送探測報文(Detect 報文,包括 SrcID、DestID、TCxt、RCxt,TMsglDHigh、TMsgIDLow域),跳轉(zhuǎn)執(zhí)行步驟S4.13);否則報嚴重錯,回收對應(yīng)的發(fā)送上下文TCxt并退出;當TTimer=O且TStatus= “發(fā)送探測報文”時跳轉(zhuǎn)執(zhí)行步驟S4.12)。S4.12)源節(jié)點網(wǎng)卡檢查匹配的發(fā)送上下文中的錯誤次數(shù),如果錯誤次數(shù)TERRcnt小于發(fā)送方允許的最大錯誤次數(shù)MaxTxERRcnt(TERRcnt〈MaxTxERRcnt),則將發(fā)送上下文中的超時計數(shù)器修改為探測請求超時值(TTimer=TimerDetect),遞增錯誤次數(shù)TERRcnt,依據(jù)預設(shè)路由策略RtPolicyTable [TERRcnt]發(fā)送探測報文(Detect報文),如果目的節(jié)點網(wǎng)卡收到探測報文并跳轉(zhuǎn)執(zhí)行步驟S4.13);否則如果錯誤次數(shù)TERRcnt小于發(fā)送方允許的最大錯誤次數(shù)MaxTxERRcnt不成立,則源節(jié)點網(wǎng)卡報嚴重錯,回收對應(yīng)的發(fā)送上下文TCxt并退出。S4.13)目的節(jié)點網(wǎng)卡收到探測報文并進行CRC校驗,如果CRC校驗出錯則丟棄探測報文并報錯退出;如果探測報文(Detect報文)CRC校驗通過,則跳轉(zhuǎn)執(zhí)行步驟S4.14)。S4.14)目的節(jié)點網(wǎng)卡檢查接收上下文數(shù)據(jù)結(jié)構(gòu)在是否存在匹配的接收上下文,如果存在匹配的接收上下文(報文中的SrcID、TCxt、RCxt、MsgIDHigh與RCxt匹配)且匹配的接收上下文狀態(tài)RStatus為“接收數(shù)據(jù)”,則跳轉(zhuǎn)執(zhí)行步驟S4.15);如果不存在匹配的接收上下文則向源節(jié)點返回探測失敗響應(yīng)報文,則目的節(jié)點網(wǎng)卡向源節(jié)點返回探測失敗響應(yīng)報文(DetectNack 報文,包括 SrcID、DestID、TCxt、RCxtID, TMsglDHigh、TMsglDLow、DR= “探測失敗”域),跳轉(zhuǎn)執(zhí)行步驟S4.17)。S4.15)目的節(jié)點網(wǎng)卡檢查匹配的接收上下文的消息標識信息低位,當探測報文的消息標識信息低位等于匹配的接收上下文的消息標識信息低位(MsgIDL0w=RMsgIDL0w)時,則置匹配的接收上下文的當前已接收字節(jié)數(shù)為O (RRcnt=O),遞增消息標識信息低位RMsgIDLow和錯誤次數(shù)RERRcnt,超時計數(shù)器為預設(shè)接收數(shù)據(jù)超時值(RTimer=TimerRcvData),目的節(jié)點網(wǎng)卡向源節(jié)點返回探測成功響應(yīng)報文(DetectAck報文,包括 SrcID、DestID、TCxt、RCxt、RMsglDHigh、RMsglDLow、DR= “探測成功”域),跳轉(zhuǎn)執(zhí)行步驟S4.17);否則當探測報文的消息標識信息低位不等于匹配的接收上下文的消息標識信息低位(MsgIDLow!=RMsgIDLow)時,跳轉(zhuǎn)執(zhí)行步驟S4.16)。S4.16)目的節(jié)點網(wǎng)卡判斷匹配的接收上下文的錯誤次數(shù)RERRcnt是否小于預設(shè)的接收方允許的最大錯誤次數(shù)MaxRxERRcnt ;如果匹配的接收上下文的錯誤次數(shù)RERRcnt小于預設(shè)的接收方允許的最大錯誤次數(shù)MaxRxERRcnt (RERRcnt<MaxRxERRcnt),則置接收上下文的當前已接收字節(jié)數(shù)為O (RRcnt=O),遞增消息標識信息低位RMsglDLow和錯誤次數(shù)RERRcnt,超時計數(shù)器為預設(shè)接收數(shù)據(jù)超時值(RTimer=TimerRcvData),目的節(jié)點網(wǎng)卡向源節(jié)點返回探測成功響應(yīng)報文(DetectAck報文,包括SrcID、DestID、TCxt、RCxt、RMsglDHigh、RMsglDLow、DR= “探測成功”域),跳轉(zhuǎn)執(zhí)行步驟S4.17);如果匹配的接收上下文的錯誤次數(shù)RERRcnt小于預設(shè)的接收方允許的最大錯誤次數(shù)MaxRxERRcnt(RERRcnt〈MaxRxERRcnt)不成立,則丟棄探測報文并報錯退出。S4.17)源節(jié)點網(wǎng)卡收到探測成功響應(yīng)報文或者探測失敗響應(yīng)報文并進行CRC校驗,如果探測成功響應(yīng)報文或者探測失敗響應(yīng)報文(DetectAck報文或DetectNack報文)CRC校驗通過,則跳轉(zhuǎn)執(zhí)行步 驟S4.18),否則丟棄報文并報錯退出。S4.18)源節(jié)點網(wǎng)卡檢查發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)在是否存在匹配的發(fā)送上下文,如果存在匹配的發(fā)送上下文(報文中的SrcID、DestID、TCxt、RCxt、MsgIDHigh與TCxt匹配)且匹配的發(fā)送上下文的狀態(tài)TStatus為“發(fā)送探測報文”,則跳轉(zhuǎn)執(zhí)行步驟S4.19),否則丟棄該報文并報錯退出。S4.19)檢測收到的探測成功響應(yīng)報文或者探測失敗響應(yīng)報文攜帶的探測結(jié)果類型(DR值),如果DR= “探測成功”且匹配的發(fā)送上下文的消息標識信息低位不等于收到的探測成功響應(yīng)報文或者探測失敗響應(yīng)報文的消息標識信息低位(TMsglDLow!=報文中的MsglDLow),置匹配的發(fā)送上下文的消息標識信息低位為收到的探測成功響應(yīng)報文或者探測失敗響應(yīng)報文的消息標識信息低位(TMs g I DLow=報文中的Ms g I DLow )、超時計數(shù)器的值為發(fā)送數(shù)據(jù)和回收響應(yīng)超時值(TTimer=TimerSendData)、狀態(tài)為“發(fā)送數(shù)據(jù)”(TStatus= “發(fā)送數(shù)據(jù)”),依據(jù)預設(shè)路由策略RtPolicyTable [TERRcnt]向目的節(jié)點重新發(fā)送數(shù)據(jù)報文,跳轉(zhuǎn)執(zhí)行步驟4.1);如果DR= “探測失敗”且匹配的發(fā)送上下文的消息標識信息低位等于探測成功響應(yīng)報文的消息標識信息低位(TMsgIDLow=報文中的MsgIDLow)則執(zhí)行中斷或事件通知操作,回收匹配的發(fā)送上下文TCxt資源并退出。以上所述僅是本發(fā)明的優(yōu)選實施方式,本發(fā)明的保護范圍并不僅局限于上述實施例,凡屬于本發(fā)明思路下的技術(shù)方案均屬于本發(fā)明的保護范圍。應(yīng)當指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理前提下的若干改進和潤飾,這些改進和潤飾也應(yīng)視為本發(fā)明的保護范圍 。
      權(quán)利要求
      1.一種基于片內(nèi)連接管理的RDMA通信方法,其特征在于實施步驟如下: 1)在源節(jié)點、目的節(jié)點的網(wǎng)卡中分別建立用于存儲發(fā)送上下文的發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)以及用于存儲接收上下文的接收上下文數(shù)據(jù)結(jié)構(gòu),在源節(jié)點、目的節(jié)點的內(nèi)存中分別建立用于提交通信請求描述符的描述符隊列、用于記錄描述符完成情況的完成事件隊列; 2)源節(jié)點主機在需要發(fā)送RDMA消息時向描述符隊列提交描述符并置門鈴標志,源節(jié)點網(wǎng)卡根據(jù)門鈴標識從描述符隊列中獲取描述符; 3)源節(jié)點網(wǎng)卡申請發(fā)送上下文,計算RDMA消息包含的報文總數(shù),獲取RDMA消息事務(wù)號,構(gòu)造連接申請請求報文并發(fā)往目的節(jié)點;目的節(jié)點網(wǎng)卡接收連接申請請求報文后,在目的節(jié)點網(wǎng)卡中分配接收上下文,將連接申請請求報文中的信息填入接收上下文并啟動接收計時器,向源節(jié)點網(wǎng)卡發(fā)送連接申請確認報文,源節(jié)點網(wǎng)卡接收到連接申請確認報文后,將連接申請確認報文中的信息保存在發(fā)送上下文中并啟動發(fā)送計時器; 4)源節(jié)點以DMA方式從本機主存中取數(shù)據(jù),并封裝成RDMA報文根據(jù)路由策略發(fā)往目的節(jié)點;目的節(jié)點網(wǎng)卡接收RDMA報文并檢測RDMA報文的正確性,將RDMA報文的數(shù)據(jù)載荷寫入主存,對接收到的RDMA報文進行計數(shù);當計數(shù)值等于RDMA消息的報文總數(shù)時目的節(jié)點網(wǎng)卡向主存中的完成事件隊列寫入完成事件,并向源節(jié)點網(wǎng)卡發(fā)送傳輸完成響應(yīng)報文,釋放接收上下文;源節(jié)點網(wǎng)卡接收到傳輸完成響應(yīng)報文后,向王存中的完成事件隊列與入完成事件,并釋放發(fā)送上下文。
      2.根據(jù)權(quán)利要求 1所述的基于片內(nèi)連接管理的RDMA通信方法,其特征在于:所述發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)中可容納發(fā)送上下文的數(shù)量為W ^RTT/!,其中W為網(wǎng)絡(luò)鏈路帶寬,RTT為最大RDMA消息往返時間,L為最小RDMA消息長度。
      3.根據(jù)權(quán)利要求1或2所述的基于片內(nèi)連接管理的RDMA通信方法,其特征在于,所述步驟3)的詳細步驟如下: 3.1)源節(jié)點網(wǎng)卡首先根據(jù)描述符申請發(fā)送上下文,所述發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)中的字段包括目的節(jié)點號、目的接收上下文號、消息標識信息高位、消息標識信息低位、超時計數(shù)器、退火計數(shù)器、狀態(tài)、連接申請優(yōu)先級、接收字節(jié)總數(shù)、當前已接收字節(jié)數(shù)、錯誤次數(shù);然后獲取發(fā)送上下文及其消息標識信息高位,計算RDMA消息包含的報文總數(shù),獲取RDMA消息事務(wù)號,初始化設(shè)置發(fā)送上下文的超時計數(shù)器的值為預設(shè)的連接申請超時值、退火計數(shù)器的值為預設(shè)的連接申請重試退火超時基值、發(fā)送狀態(tài)為“連接申請”、連接申請優(yōu)先級為O、錯誤次數(shù)為O、消息標識信息低位為O,構(gòu)造連接申請請求報文,根據(jù)預設(shè)路由策略發(fā)送連接申請報文給目的節(jié)點; 3.2)目的節(jié)點網(wǎng)卡接收到連接申請請求報文并進行CRC校驗; 3.3)目的節(jié)點網(wǎng)卡對報文CRC校驗結(jié)果進行判斷,如果連接申請報文正確到達目的節(jié)點后CRC校驗,則跳轉(zhuǎn)執(zhí)行步驟3.4),否則如果CRC校驗出錯,則丟棄連接申請請求報文并報錯退出; 3.4)目的節(jié)點網(wǎng)卡在接收上下文數(shù)據(jù)結(jié)構(gòu)中檢查是否有與連接申請請求報文匹配的接收上下文,如果有與連接申請請求報文匹配的接收上下文,則跳轉(zhuǎn)執(zhí)行步驟3.5),否則跳轉(zhuǎn)執(zhí)行步驟3.6); 3.5)目的節(jié)點網(wǎng)卡檢查連接申請請求報文的消息標識信息的高位是否與匹配的接收上下文的消息標識信息的高位相同,如果連接申請請求報文的消息標識信息的高位與匹配的接收上下文的消息標識信息的高位相同且匹配的接收上下文的接收狀態(tài)為“接收數(shù)據(jù)”,則依據(jù)預設(shè)路由策略發(fā)送連接申請確認報文給源節(jié)點,跳轉(zhuǎn)執(zhí)行步驟3.9);否則,丟棄連接申請請求報文并報錯退出; . 3.6)目的節(jié)點網(wǎng)卡檢查CnctReqNackEn值是否為I,所述CnctReqNackEn值具體是指當接收上下文數(shù)據(jù)結(jié)構(gòu)中的接收上下文資源耗光時是否對連接申請請求返回Nack報文響應(yīng),CnctReqNackEn值為I表示返回Nack報文響應(yīng)讓源節(jié)點重試;當CnctReqNackEn的值為O表示不返回Nack報文響應(yīng),阻塞連接請求通道;如果CnctReqNackEn等于I,則跳轉(zhuǎn)執(zhí)行步驟3.7);如果CnctReqNackEn等于O,則跳轉(zhuǎn)執(zhí)行步驟3.8); . 3.7)目的節(jié)點網(wǎng)卡比較連接申請請求報文的連接申請優(yōu)先級和接收上下文的優(yōu)先級,如果目的節(jié)點網(wǎng)卡的接收上下文數(shù)據(jù)結(jié)構(gòu)中的當前可用接收上下文個數(shù)大于零且連接申請請求報文的連接申請優(yōu)先級大于或等于接收上下文的優(yōu)先級,或目的節(jié)點網(wǎng)卡的接收上下文數(shù)據(jù)結(jié)構(gòu)中的當前可用接收上下文個數(shù)大于1,則首先在接收上下文數(shù)據(jù)結(jié)構(gòu)中分配接收上下文,所述接收上下文數(shù)據(jù)結(jié)構(gòu)中的字段包括源節(jié)點號、源節(jié)點、目的發(fā)送上下文號、消息標識信息高位、消息標識信息低位、當前可用接收上下文個數(shù)、當前接收上下文優(yōu)先級、超時計數(shù)器、狀態(tài)、接收字節(jié)總數(shù)、當前已接收字節(jié)數(shù)、錯誤次數(shù),其中當前可用接收上下文個數(shù)、當前接收上下文優(yōu)先級為所有接收上下文共享;然后將接收上下文數(shù)據(jù)結(jié)構(gòu)中可用接收上下文個數(shù)遞減,如果連接申請請求報文的連接申請優(yōu)先級大于或等于接收上下文的優(yōu)先級,則將接收上下文的優(yōu)先級賦值為O,設(shè)置超時計數(shù)器的值為接收數(shù)據(jù)超時值,設(shè)置接收上下文的接收狀態(tài)為“接收數(shù)據(jù)”,接收字節(jié)總數(shù)為連接申請請求報文的數(shù)據(jù)長度,當前已接收字節(jié)數(shù)為O,消息標識信息高位為連接申請請求報文的消息標識信息高位,消息標識信息低位為O,錯誤次數(shù)為O,目的節(jié)點構(gòu)造連接申請確認報文并依據(jù)預設(shè)路由策略發(fā)送連接申請確認報文給源節(jié)點,跳轉(zhuǎn)執(zhí)行步驟3.9);否則目的節(jié)點網(wǎng)卡比較連接申請請求報文的連接申請優(yōu)先級和接收上下文的優(yōu)先級后,如果連接申請請求報文的連接申請優(yōu)先級大于接收上下文的優(yōu)先級,則將接收上下文的優(yōu)先級賦值為連接申請請求報文的連接申請優(yōu)先級;目的節(jié)點構(gòu)造連接申請報錯報文,并依據(jù)預設(shè)路由策略發(fā)送連接申請報錯報文給源節(jié)點,跳轉(zhuǎn)執(zhí)行步驟3.11); . 3.8)目的節(jié)點網(wǎng)卡判斷接收上下文數(shù)據(jù)結(jié)構(gòu)中的當前可用接收上下文個數(shù),如果當前可用接收上下文個數(shù)為O,則阻塞連接申請報文的處理;如果當前可用接收上下文個數(shù)大于O,則在接收上下文數(shù)據(jù)結(jié)構(gòu)中分配接收上下文,接收上下文數(shù)據(jù)結(jié)構(gòu)中可用接收上下文個數(shù)遞減;設(shè)置超時計數(shù)器的值為接收數(shù)據(jù)超時值,設(shè)置接收上下文的接收狀態(tài)為“接收數(shù)據(jù)”、接收字節(jié)總數(shù)為連接申請請求報文的數(shù)據(jù)長度、當前已接收字節(jié)數(shù)為O、消息標識信息高位為連接申請請求報文的消息標識信息高位,消息標識信息低位為O、錯誤次數(shù)為O,目的節(jié)點構(gòu)造連接申請確認報文,依據(jù)預設(shè)路由策略發(fā)送連接申請確認報文給源節(jié)點,跳轉(zhuǎn)執(zhí)行步驟3.9); .3.9)源節(jié)點網(wǎng)卡收到連接申請確認報文,首先對連接申請確認報文進行CRC校驗,如果連接申請報文到達目的節(jié)點CRC檢查出錯,則丟棄該報文,并報錯;如果連接申請確認報文正確到達源節(jié)點且CRC校驗,則跳轉(zhuǎn)執(zhí)行步驟3.10); .3.10)源節(jié)點網(wǎng)卡如果能找到匹配的發(fā)送上下文且該發(fā)送上下文的發(fā)送狀態(tài)為“連接申請”或“延遲等待”,則設(shè)置發(fā)送上下文的超時計數(shù)器值為發(fā)送數(shù)據(jù)超時值、發(fā)送狀態(tài)為“發(fā)送數(shù)據(jù)”,消息標識信息低位為連接申請確認報文的消息標識信息低位,依據(jù)預設(shè)路由策略開始發(fā)送數(shù)據(jù)報文;否則,丟棄連接申請確認報文,并報錯退出; . 3.11)源節(jié)點網(wǎng)卡收到連接申請報錯報文,首先對連接申請報錯報文進行CRC校驗,如果連接申請報錯報文正確到達源節(jié)點并通過CRC檢查,則跳轉(zhuǎn)執(zhí)行步驟3.12),否則丟棄申請報錯報文并報錯退出; .3.12)源節(jié)點網(wǎng)卡判斷CnctReqNackEn值是否為1,如果CnctReqNackEn值為O(CnctReqNackEn=O),則丟棄報文并報錯退出;否則如果CnctReqNackEn值為1,則跳轉(zhuǎn)執(zhí)行步驟3.13); . 3.13)源節(jié)點網(wǎng)卡在發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)中查找匹配的發(fā)送上下文,否則如果未能找到匹配的發(fā)送上下文,則丟棄報文并報錯退出;如果能找到匹配的發(fā)送上下文且發(fā)送上下文的發(fā)送狀態(tài)為“連接申請”,則檢查預先設(shè)置的MaxNackEn值和匹配的發(fā)送上下文中的連接申請優(yōu)先級,如果MaxNackEn值為I且匹配的發(fā)送上下文中的連接申請優(yōu)先級已經(jīng)為預設(shè)的最大值,報錯并回收匹配的發(fā)送上下文;否則如果不能同時滿足MaxNackEn值為I且匹配的發(fā)送上下文中的連接申請優(yōu)先級已經(jīng)為預設(shè)的最大值,則設(shè)置發(fā)送上下文中超時計數(shù)器的值為退火計數(shù)器的值、退火計數(shù)器的值為原值乘以2的連接申請重試退火系數(shù)次冪、發(fā)送狀態(tài)為“延遲等待”,跳轉(zhuǎn)執(zhí)行步驟3.2);其中MaxNackEn值用于表示當重試優(yōu)先級到達最大值時是否繼續(xù)重試,MaxNackEn值為I表示不繼續(xù)重試,MaxNackEn值為O表示繼續(xù)以最大優(yōu)先級進行重試;同時,源節(jié)點網(wǎng)卡對超時計數(shù)器進行遞減計數(shù),當超時計數(shù)器超時則跳轉(zhuǎn)執(zhí)行步驟3.14); . 3.14)源節(jié)點網(wǎng)卡檢查匹配的發(fā)送上下文的錯誤次數(shù),如果錯誤次數(shù)小于發(fā)送方允許的最大錯誤次數(shù),則重置超時計數(shù)器的值為預設(shè)的連接申請超時值,遞增錯誤次數(shù),注意退火計數(shù)器的值和連接申請優(yōu)先級保持不變,源節(jié)點依據(jù)預設(shè)路由策略重發(fā)連接申請報文,跳轉(zhuǎn)執(zhí)行步驟3.2);否則報錯并回收匹配的發(fā)送上下文。
      4.根據(jù)權(quán)利要求3所述的基于片內(nèi)連接管理的RDMA通信方法,其特征在于,所述步驟4)的詳細步驟如下: S4.1)源節(jié)點網(wǎng)卡以DMA方式從本機主存中取數(shù)據(jù),并封裝成RDMA報文根據(jù)預設(shè)路由策略發(fā)往目的節(jié)點,跳轉(zhuǎn)執(zhí)行步驟S4.2);同時,源節(jié)點網(wǎng)卡檢查發(fā)送上下文的超時計數(shù)器,如果超時計數(shù)器超時,則同時跳轉(zhuǎn)執(zhí)行步驟S4.11); S4.2)目的節(jié)點網(wǎng)卡接收RDMA報文,對RDMA報文進行CRC校驗,如果CRC校驗通過則說明數(shù)據(jù)報文正確到達目的節(jié)點,則跳轉(zhuǎn)執(zhí)行步驟S4.3),否則跳轉(zhuǎn)執(zhí)行步驟S4.6); S4.3)目的節(jié)點網(wǎng)卡檢查接收上下文數(shù)據(jù)結(jié)構(gòu)中是否存在匹配的接收上下文,如果不存在匹配的接收上下文或者匹配的接收上下文的狀態(tài)并非“接收數(shù)據(jù)”,則丟棄該RDMA報文并報錯退出;如果存在匹配的接收上下文且匹配的接收上下文的狀態(tài)為“接收數(shù)據(jù)”,則接收該RDMA數(shù)據(jù)報文,將接收上下文中已經(jīng)接收的字節(jié)數(shù)加上RDMA報文攜帶的數(shù)據(jù)字節(jié)數(shù);同時目的節(jié)點網(wǎng)卡判斷已經(jīng)接收的字節(jié)數(shù)是否等于RDMA消息包含的報文總數(shù),如果等于RDMA消息包含的報文總數(shù),則依據(jù)預設(shè)路由策略發(fā)送數(shù)據(jù)傳輸完成響應(yīng)報文,執(zhí)行中斷或事件通知操作,回收匹配的接收上下文資源,跳轉(zhuǎn)執(zhí)行步驟S4.4);否則繼續(xù)接收RDMA報文; S4.4)源節(jié)點網(wǎng)卡收到傳輸完成響應(yīng)報文并進行CRC校驗,如果數(shù)據(jù)傳輸完成響應(yīng)報文正確到達源節(jié)點并CRC校驗通過,則跳轉(zhuǎn)執(zhí)行步驟S4.5);否則如果數(shù)據(jù)傳輸完成響應(yīng)報文到達源節(jié)點CRC檢查出錯,則丟棄報文并報錯退出; S4.5)源節(jié)點網(wǎng)卡檢查發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)在是否存在匹配的發(fā)送上下文,如果存在匹配的發(fā)送上下文且匹配的發(fā)送上下文狀態(tài)為“發(fā)送數(shù)據(jù)”或“發(fā)送探測報文”,則執(zhí)行中斷或事件通知操作,回收匹配的發(fā)送上下文資源并退出,報文傳輸完成退出;否則,丟棄探測成功響應(yīng)報文并報錯退出; S4.6)目的節(jié)點網(wǎng)卡檢查接收上下文數(shù)據(jù)結(jié)構(gòu)中是否存在匹配的接收上下文,如果預設(shè)的ExplicitRetryEn=U存在匹配的接收上下文且匹配的接收上下文狀態(tài)為“接收數(shù)據(jù)”,則跳轉(zhuǎn)執(zhí)行步驟S4.7),否則丟棄報文并報錯退出;其中,ExplicitRetryEn值用于判斷當源節(jié)點或目的節(jié)點檢測到數(shù)據(jù)報文CRC錯或目的節(jié)點RCxt超時時是否發(fā)送顯式重傳報文,ExplicitRetryEn值為I表示發(fā)送顯式重傳報文,ExplicitRetryEn值為O表示不發(fā)送顯式重傳報文; S4.7)目的節(jié)點網(wǎng)卡檢查接收上下文中的接收錯誤次數(shù),如果接收錯誤次數(shù)小于預設(shè)的接收方允許的最大錯誤次數(shù),則置匹配的接收上下文當前已接收字節(jié)數(shù)為O、遞增消息標識信息低位和接收錯誤次數(shù)、超時計數(shù)器為預設(shè)接收數(shù)據(jù)超時值,依據(jù)預設(shè)路由策略發(fā)送顯式重傳報文給源節(jié)點,跳轉(zhuǎn)執(zhí)行步驟S4.8);否則目的節(jié)點網(wǎng)卡報錯,回收匹配的接收上下文并退出; S4.8)源節(jié)點網(wǎng)卡收到顯式重傳報文,首先對顯式重傳報文進行CRC校驗,如果CRC校驗不通過,則丟棄該顯式重傳報文并報錯退出;如果CRC校驗通過,如果顯式重傳報文正確到達源節(jié)點并CRC校驗通過,則跳轉(zhuǎn)執(zhí)行步驟S4.9); S4.9)源節(jié)點網(wǎng)卡在發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)中查找匹配的發(fā)送上下文,如果找到匹配的發(fā)送上下文且匹配的發(fā)送上下文狀態(tài)為“發(fā)送數(shù)據(jù)”或“發(fā)送探測報文”,則跳轉(zhuǎn)執(zhí)行步驟S4.10),否則,丟棄該報文并報錯退出; S4.10)源節(jié)點網(wǎng)卡檢查匹配的發(fā)送上下文的發(fā)送錯誤次數(shù),如果發(fā)送錯誤次數(shù)小于預設(shè)的發(fā)送方允許的最大錯誤次數(shù),則檢查匹配的發(fā)送上下文中的消息標識信息低位,如果發(fā)送上下文中的消息標識信息低位小于顯式重傳報文中的消息標識信息低位,則置匹配的發(fā)送上下文中的消息標識信息低位為顯式重傳報文中的消息標識信息低位、超時計數(shù)器為發(fā)送數(shù)據(jù)和回收響應(yīng)超時值、狀態(tài)為“發(fā)送數(shù)據(jù)”、遞增發(fā)送錯誤次數(shù),依據(jù)預設(shè)路由策略重新發(fā)送數(shù)據(jù)報文,跳轉(zhuǎn)執(zhí)行步驟S4.2);如果發(fā)送上下文中的消息標識信息低位小于顯式重傳報文中的消息標識信息低位不成立,丟棄該報文并報錯退出;如果發(fā)送錯誤次數(shù)小于預設(shè)的發(fā)送方允許的最大錯誤次數(shù)不成立,則丟棄該報文,報錯并回收匹配的發(fā)送上下文資源后退出; S4.11)源節(jié)點網(wǎng)卡根據(jù)超時計數(shù)器檢查發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)中的發(fā)送上下文狀態(tài),當超時計數(shù)器超時且對應(yīng)的發(fā)送上下文的狀態(tài)為“發(fā)送數(shù)據(jù)”時,檢查對應(yīng)的發(fā)送上下文中的錯誤次數(shù),如果錯誤次數(shù)小于發(fā)送方允許的最大錯誤次數(shù),則將發(fā)送上下文狀態(tài)修改為“發(fā)送探測報文”、發(fā)送上下文中的超時計數(shù)器修改為探測請求超時值、遞增錯誤次數(shù),依據(jù)預設(shè)路由策略發(fā)送探測報文,跳轉(zhuǎn)執(zhí)行步驟S4.13);否則報嚴重錯,回收發(fā)送上下文并退出;當超時計數(shù)器超時且對應(yīng)的發(fā)送上下文的狀態(tài)為“發(fā)送探測報文”時跳轉(zhuǎn)執(zhí)行步驟S4.12);S4.12)源節(jié)點網(wǎng)卡檢查對應(yīng)的發(fā)送上下文中的錯誤次數(shù),如果錯誤次數(shù)小于發(fā)送方允許的最大錯誤次數(shù),則將對應(yīng)的發(fā)送上下文中的超時計數(shù)器修改為探測請求超時值、遞增錯誤次數(shù),依據(jù)預設(shè)路由策略發(fā)送探測報文,如果目的節(jié)點網(wǎng)卡收到探測報文并跳轉(zhuǎn)執(zhí)行步驟S4.13);否則如果錯誤次數(shù)小于發(fā)送方允許的最大錯誤次數(shù)不成立,則源節(jié)點網(wǎng)卡報嚴重錯,回收對應(yīng)的發(fā)送上下文并退出; S4.13)目的節(jié)點網(wǎng)卡收到探測報文并進行CRC校驗,如果CRC校驗出錯則丟棄探測報文并報錯退出;如果探測報文CRC校驗通過,則跳轉(zhuǎn)執(zhí)行步驟S4.14); S4.14)目的節(jié)點網(wǎng)卡檢查接收上下文數(shù)據(jù)結(jié)構(gòu)在是否存在匹配的接收上下文,如果存在匹配的接收上下文且匹配的接收上下文的狀態(tài)為“接收數(shù)據(jù)”,則跳轉(zhuǎn)執(zhí)行步驟S4.15);如果不存在匹配的接收上下文則向源節(jié)點返回探測失敗響應(yīng)報文,則目的節(jié)點網(wǎng)卡向源節(jié)點返回探測失敗響應(yīng)報文,跳轉(zhuǎn)執(zhí)行步驟S4.17); S4.15)目的節(jié)點網(wǎng)卡檢查匹配的接收上下文的消息標識信息低位,當探測報文的消息標識信息低位等于匹配的接收上下文的消息標識信息低位時,則置匹配的接收上下文的當前已接收字節(jié)數(shù)為O、遞增消息標識信息低位和錯誤次數(shù),超時計數(shù)器為預設(shè)接收數(shù)據(jù)超時值、目的節(jié)點網(wǎng)卡向源節(jié)點返回探測成功響應(yīng)報文,跳轉(zhuǎn)執(zhí)行步驟S4.17);否則當探測報文的消息標識信息低位不等于匹配的接收上下文的消息標識信息低位時,跳轉(zhuǎn)執(zhí)行步驟S4.16); S4.16)目的節(jié)點網(wǎng)卡判斷匹配的接收上下文的錯誤次數(shù)是否小于預設(shè)的接收方允許的最大錯誤次數(shù);如果匹配的接收上下文的錯誤次數(shù)小于預設(shè)的接收方允許的最大錯誤次數(shù),則置接收上下文的當前已接收字節(jié)數(shù)為O,遞增消息標識信息低位和錯誤次數(shù),超時計數(shù)器為預設(shè)接收數(shù)據(jù)超時值,目的節(jié)點網(wǎng)卡向源節(jié)點返回探測成功響應(yīng)報文,跳轉(zhuǎn)執(zhí)行步驟S4.17);如果匹配的接收上下文的錯誤次數(shù)小于預設(shè)的接收方允許的最大錯誤次數(shù)不成立,則丟棄探測報文并報錯退出; S4.17)源節(jié)點網(wǎng)卡收到探測成功響應(yīng)報文或者探測失敗響應(yīng)報文并進行CRC校驗,如果探測成功響應(yīng)報文或者探測失敗響應(yīng)報文CRC校驗通過,則跳轉(zhuǎn)執(zhí)行步驟S4.18),否則丟棄報文并報錯退出; S4.18)源節(jié)點網(wǎng)卡檢查發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)在是否存在匹配的發(fā)送上下文,如果存在匹配的發(fā)送上下文且匹配的發(fā)送上下文的狀態(tài)為“發(fā)送探測報文”,則跳轉(zhuǎn)執(zhí)行步驟S4.19),否則丟棄該報文并報錯退出; S4.19)檢測收到的探測成功響應(yīng)報文或者探測失敗響應(yīng)報文攜帶的探測結(jié)果類型,如果探測結(jié)果類型為“探測成功”且匹配的發(fā)送上下文的消息標識信息低位不等于收到的探測成功響應(yīng)報文或者探測失敗響應(yīng)報文的消息標識信息低位,置匹配的發(fā)送上下文的消息標識信息低位為收到的探測成功響應(yīng)報文或者探測失敗響應(yīng)報文的消息標識信息低位、超時計數(shù)器的值為發(fā)送數(shù)據(jù)和回收響應(yīng)超時值、狀態(tài)為“發(fā)送數(shù)據(jù)”,依據(jù)預設(shè)路由策略向目的節(jié)點重新發(fā)送數(shù)據(jù)報文,跳轉(zhuǎn)執(zhí)行步驟4.1);如果探測結(jié)果類型為“探測失敗”且匹配的發(fā)送上下文的消息標識信息低位等于探測成功響應(yīng)報文的消息標識信息低位則執(zhí)行中斷或事件通知操作,回收匹配的發(fā)送上下文資源并退出。
      全文摘要
      本發(fā)明公開了一種基于片內(nèi)連接管理的RDMA通信方法,實施步驟如下1)在網(wǎng)絡(luò)接口卡中建立發(fā)送上下文數(shù)據(jù)結(jié)構(gòu)、接收上下文數(shù)據(jù)結(jié)構(gòu);在主機內(nèi)存中建立的描述符隊列、短消息接收隊列、完成事件隊列;2)源節(jié)點主機向主機內(nèi)存中的描述符隊列提交RDMA寫描述符,源節(jié)點網(wǎng)卡獲取待處理描述符。3)源節(jié)點網(wǎng)卡檢查當前已獲取的描述符為RDMA寫描述符,在源節(jié)點和目的節(jié)點網(wǎng)卡芯片之間建立連接;4)在已建立連接的基礎(chǔ)上,源節(jié)點以DMA方式從本機內(nèi)存中獲取數(shù)據(jù)并發(fā)往目的節(jié)點網(wǎng)卡。本發(fā)明具有可擴展性好、支持多路徑傳輸、數(shù)據(jù)傳輸可靠、多核處理效率高、單報文消息傳輸延遲低的優(yōu)點。
      文檔編號H04L1/00GK103248467SQ201310177030
      公開日2013年8月14日 申請日期2013年5月14日 優(yōu)先權(quán)日2013年5月14日
      發(fā)明者肖立權(quán), 王克非, 曹繼軍, 劉路, 肖燦文, 龐征斌, 夏軍, 王永慶, 張鶴穎, 張磊, 沈勝宇, 戴藝, 高蕾 申請人:中國人民解放軍國防科學技術(shù)大學
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1