RDMA程式設計的基本流程

2021-10-21 21:31:44 字數 862 閱讀 2192

通常情況下,乙個rdma通訊程式的編寫由以下幾個步驟組成:

(1)得到裝置清單,清單上的每乙個裝置都要有乙個名字和乙個全球唯一識別符號(globally unique identifier,簡稱guid);具體參見2.3.2中devices functions

(2)根據名字或者guid開啟指定裝置,返回ib上下文,並對裝置的效能進行檢查;具體參見2.3.2中context functions

(3)分配乙個保護區域,以便儲存資訊,允許並限制使用者只能與唯一的使用者進行傳遞,其中包括位址處理,記憶體區域,共享的接收佇列;具體參見2.3.2中 protection domains

(4)註冊乙個記憶體區域;具體參見2.3.2中memory regions

(5)(可選)對於完成佇列的監聽如果選用事件通知的方式,先建立完成通道(completion channel);具體參見2.3.2中completion event channels和requesting/managing cq events

(5)建立乙個完成佇列,乙個完成佇列包含對完成工作的要求,每個要求將在完成佇列中產生乙個佇列完成事件,佇列完成事件用來判讀工作要求是否成功的完成了;具體參見2.3.2中completion queues control

(6)建立乙個佇列,包含傳送佇列和接收佇列,並進入準備傳送狀態;具體參見2.3.2中queue pair control

(7)利用佇列進行通訊,完成任務要求;具體參見2.3.2中posting work requests to qps/srqs

(8)進行清理,反序清除已建立的資料:刪除佇列,刪除完成佇列,登出記憶體區,釋放保護區,關閉裝置。

注:在rdma程式設計中,需要首先建立包括pd,mr,qp等資源,下圖展示了這些資源建立過程中的依賴關係和順序。

rdma程式設計

在分布式應用中,用乙太網組網往往成為效能的瓶頸,所以需要低時延大頻寬,使用rdma傳輸協議,能滿足低時延要求。目前有兩張硬體可以使用rdma傳輸,乙個是infiniband,乙個是rdma over ethernet,由於ib的成本較高,所以roce成為一種趨勢。roce可以在乙太網上執行rdma協...

Socket 程式設計基本流程

這裡所講的是基於windows套接字程式設計的基本流程,linux下的socket程式設計也是大同小異,可以參考。今天先大概講一下基本流程 1.建立套接字 使用csocket類建立套接字物件時通過該類的建構函式建立的 csocket csocket 例如 csocket sock 2.繫結位址資訊 ...

基本TCP套介面的程式設計流程

要實現客戶端和伺服器端的通訊,則需要客戶端和伺服器端共同完成。其中,tcp伺服器和客戶端的程式設計流程如圖所示 首先由伺服器端建立socket,然後bind繫結通訊埠,建立listen監聽佇列。之後便開始了通訊的過程。此時伺服器阻塞在accept這裡,直到tcp客戶端主動進行connect進行三次握...