一種遠程直接存儲器存取的方法及裝置的制造方法
【技術領域】
[0001]本發明涉及電子技術領域,尤其涉及一種遠程直接存儲器存取的方法及裝置。
【背景技術】
[0002]遠端直接數據存取(Remote direct memory access,RDMA)一般用于網絡中主機之間的數據傳輸。在數據傳輸過程中,數據源端和數據目的端的主機CPU不需要參與數據的搬移和復制,從而減輕CPU的負擔,降低網絡上主機之間數據交換的延時。根據底層承載的協議的不同,RDMA技術可以基于TCP協議和無損融合以太網實現。三種實現方式在傳輸層及以上是相同的。
[0003]RDMA協議中,如圖1所示,任意兩個主機之間需要交互的應用之間需要建立一個隊列對(QP)進行通信。
[0004]在建立的隊列對中包括主機和設備,主機和設備之間的通信,需要主機先將報文傳遞到設備,設備完成處理后再將報文返回給主機,標準的RDMA寫請求操作流程,完成一次報文從主機到設備,設備處理完后再到主機處理流程如圖2所示:
[0005]步驟201,設備將本地數據緩存地址B傳給主機,用于緩存主機發給設備處理的數據的存儲;
[0006]步驟202,主機返回響應給設備,表面主機已經正確接收到地址信息;
[0007]步驟203,主機將需要設備處理的數據通過RDMA寫請求報文方式寫到設備上的地址B中;
[0008]步驟204,設備返回響應給主機,表面設備已經正確接收到報文,設備對報文進行處理,比如壓縮解壓縮、加解密等硬件加速處理;
[0009]步驟205,主機將地址A傳遞給設備,用于設備處理完成后返回給主機時的存儲地址;
[0010]步驟206,設備返回響應給主機,表面設備已經正確接收到地址信息;
[0011]步驟207,設備將處理完成的數據通過RDMA寫請求報文方式寫到主機上的地址A中;
[0012]步驟208,主機返回響應給設備,表面主機已經正確接收到處理完成后的報文。
[0013]現有技術中的主機和設備之間的數據傳遞基于標準的RDMA協議,數據傳遞過程交互頻繁,對數據交互的時延和速率都有很大的影響。并且,設備接收到報文后可以直接處理報文,或者只需要在設備的接口進行協議無關的緩存,并不需要按照RDMA協議進行地址的申請、注冊等管理,所以對應這種主機和設備之間的數據交互,使用標準的RDMA造成了部分無效的交互,浪費了傳輸帶寬資源和數據交互的延時。
【發明內容】
[0014]本發明提供一種遠程直接存儲器存取的方法及裝置,本發明所提供的方法和裝置解決現有技術中使用標準的RDMA造成了部分無效的交互,浪費了傳輸帶寬資源和數據交互的延時問題。
[0015]第一方面,提供一種遠程直接存儲器存取的方法,該方法應用于第一電子設備中,第一電子設備與第二電子設備之間建立有遠程直接存儲器存取RDMA連接;其中,一種典型的應用場景是第一電子設備可以是用于進行業務加速的加速器(例如,基于FPGA等硬件實現的,具備比通用CPU處理能力更強的專用加速器),加速器通常只接收請求,然后返回結果,是一個被動執行的單元;第二電子設備可以是業務請求方,通常也稱為主機,實際產品中,可以是服務器、終端等需要進行業務處理的各類產品。
[0016]該方法包括:
[0017]第一電子設備通過所述RDMA連接接收到第二電子設備發送的第一RDMA寫請求報文后,從該第一 RDMA寫請求報文的RDMA協議頭中獲取第一地址;
[0018]其中,第一電子設備在收到第一RDMA寫請求報文時,會先解析報文,得到相應字段的信息,在解析報文時,可以一次性將全部的信息完成解析出來,也可以先解析一部分(如先解析報文頭),然后再根據需要解析另外一些部分的信息(如凈荷字段),這些都為本領域技術人員所公知的技術,本發明實施例并不對此進行限定及詳細描述。
[0019]將所述第一地址與預存的標志地址進行比較,如果第一地址與所述標志地址相同,則從所述第一RDMA寫請求報文的協議擴展頭中獲取第二地址,對第一RDMA寫請求報文的凈荷進行處理得到處理后得到的結果數據;
[0020]上述兩個步驟中的“預存的標志地址”可以理解為一個“偽地址”,該地址的作用僅在于滿足協議的要求(因為RDMA協議規定在頭中需要攜帶這個地址),同時,該地址也是通信雙約定,共同知道的一個地址,在實際中,會將這個約定地址作為“預存的標志地址”來判斷收到的第一地址是不是這個偽地址。在具體實現時,“預存的標志地址”可以保存在一個存儲在易失或非易失存器中的文件中,或者也可以通過編程的方式寫入代碼,在程序執行時,被存在一個臨時的存儲區中;當“第一地址”與“預存的標志地址”相同時,就判斷這是一個“偽地址”,然后進行后續操作;
[0021]上述步驟中的“協議擴展頭”可以是用戶自定義的一個字段,例如,可以采用協議預留的字段,或者也可以在凈荷字段中預留一部分來作為這個協議擴展頭;
[0022]上述步驟中的,“第二地址”即為要寫入到第二設備中的存儲地址,這是一個真實的地址(并不是前面提到的“偽地址”),后續也是按照正常的流程將其放入到RDMA協議頭中(而不是放入到“擴展協議頭”);
[0023]用所述第二地址和所述結果數據構造第二RDMA寫請求報文,并利用所述第二地址將所述第二 RDMA寫請求報文寫到所述第二電子設備中所述第二地址對應的存儲區域中。
[0024]結合第一方面,在第一種可能的實現方式中,第一電子設備接收到第二電子設備發送的第一RDMA寫請求報文之前,當第一電子設備和第二電子設備協商建立RDMA連接時,所述該方法還包括:
[0025]第一電子設備接收到第二電子設備發起的RDMA建鏈請求報文,在響應報文中攜帶第一電子設備的屬性標志;其中,該屬性標志用于標示所述第一電子設備對于接收到的RDMA寫請求報文直接處理不進行緩存;
[0026]接收第二電子設備反饋的所述標志地址;其中,所述標志地址是所述第二電子設備根據所述響應報文中的屬性標志構造的地址;
[0027]將所述標志地址記錄在建立地RDMA連接對應的上下文信息中。
[0028]結合第一方面的第一種可能的實現方式,在第二種可能的實現方式中,所述將所述第一地址與預存的標志地址進行比較之前,該方法還包括:
[0029]從所述第一 RDMA寫請求報文中獲取所述RDMA連接對應的連接號;
[0030]利用所屬連接號查詢所述RDMA連接對應的上下文信息,從所述上下文信息中獲取所述標志地址。
[0031]第二方面,提供一種遠程直接存儲器存取的裝置,該裝置應用于第一電子設備中,第一電子設備與第二電子設備之間建立有遠程直接存儲器存取RDMA連接,該裝置包括:
[0032]獲取模塊,用于通過所述RDMA連接接收到第二電子設備發送的第一RDMA寫請求報文后,從該第一 RDMA寫請求報文的RDMA協議頭中獲取第一地址;
[0033]數據處理模塊,用于將所述第一地址與預存的