用于使用rdma的低等待時間fifo消息收發中支持多個發送器的系統和方法
【技術領域】
[0001] 本文描述的本主題通常涉及消息收發系統,且尤其涉及用于在使用RDMA的低等 待時間消息收發中支持多個發送器的系統。
【背景技術】
[0002] 消息收發系統的重要方面是消息的等待時間和吞吐量。隨著網絡速度的穩步提 升,現在期望消息收發系統在幾微秒內在多個發布器和訂閱器之間傳遞數百萬的消息。迄 今為止所使用的各種消息收發系統都帶有鎖定機制,且忍受緩慢的處理速度。除此之外,它 們僅僅支持從單個發送器到單個接收器的消息收發。
[0003] 現有技術中的進程之一公開了,用于數據中心的消息收發應用中的消息總線提供 通信機制,以便提供具有高吞吐量的低等待時間消息收發。然而,這種應用提供從單個發送 器向單個接收器發送消息的機制,且不存在對多個發送器在無需知道其他發送器的存在的 情況下同時發送消息的支持。
[0004] 進一步,另一應用公開在公布節點和訂閱器節點之間的動態訂閱和消息路由,其 中,在多個節點中,通過總線將訂閱模塊、公布模塊和其他模塊耦合在一起。盡管這種方法 使用多個隊列,但它不能提供無鎖機制以及多個發送器同時向隊列寫入的解決方案。
[0005] 現有技術中的進程之一公開用于低等待時間消息收發系統的無鎖機制,其中,在 隊列中提供存儲緩沖器,以便存儲和檢索由自由指針元件指向的消息。來自隊列的存儲緩 沖器在循環鏈表中相互鏈接,且據此讀取消息。然而,該方案不提供用于支持多個發布器的 任何裝置。
[0006] 另一現有技術進程提供用于實現使用用于遠程消息收發的RDMA技術的消息收發 軟件的系統和方法。但是它不提供對多個發布器的任何支持。因而現有技術進程無法以無 縫方式提供多發布器支持。現有技術方法中,消息被存儲在隊列中,多個發布器向隊列寫 入,且當寫入器中的一個正在向隊列寫入時,其他寫入器被鎖定以免寫入。一旦第一寫入器 完成其寫入,在此之后另一寫入器可以向隊列寫入。這阻礙了消息收發系統的速度和性能。 因此,有必要增強消息收發的速度而不管同時向系統寫入的發布器的數量。
【發明內容】
[0007] 提供本
【發明內容】
以便介紹與用于在進程間通信中傳送和接收主宿在至少一個宿 主節點上的多個消息的系統和方法相關的多個方面,以及下面在【具體實施方式】中進一步描 述的多個方面。本
【發明內容】
不旨在標識所要求保護的主題的必要特征,也不旨在用于確定 或限制所要求保護的主題的范圍。
[0008] 在一種實現中,描述了用于在進程間通信中傳送主宿在至少一個宿主節點上的多 個消息的系統。該系統包括處理器、耦合到處理器的網絡接口卡(NIC)、消息收發庫以及存 儲器,其中,網絡接口卡啟用遠程直接內存訪問(RDMA)以便發送消息,消息收發庫包括一個 或多個消息發送和消息接收函數,這些消息發送和消息接收函數以無鎖方式同時允許多個 消息收發。其中,存儲器被耦合到處理器。處理器能夠執行被存儲在存儲器中的多個模塊。 所述多個模塊進一步包括組織模塊、映射模塊和傳送模塊。映射模塊被配置為將每個遠程 發送器進程映射到與宿主節點相關聯的每個FIFO子隊列,并通過使用一個或多個存儲器 映射文件,將遠程發送器進程中的每一個和與接收節點相關聯的相應FIFO子隊列映射起 來。組織模塊被配置為從與宿主節點相關聯的至少一個用戶接收消息,并將從用戶接收到 的消息排列在與宿主節點相關聯的一個或多個先進先出(FIFO)子隊列中,其中,FIFO子隊 列是專用于每個用戶的,且被存儲在存儲器映射文件中。傳送模塊被配置為使用相應遠程 發送器進程將來自與宿主節點相關聯的每個FIFO子隊列的消息傳送到與接收節點相關聯 的相應FIFO子隊列。
[0009]在一種實現中,描述了用于在進程間通信中接收主宿在至少一個宿主節點上的多 個消息的系統。該系統包括處理器、耦合到處理器的網絡接口卡(NIC)、消息收發庫和耦合 到處理器的存儲器,其中,網絡接口卡啟用遠程直接內存訪問(RDMA)以便接收消息,其中, 消息收發庫包括一個或多個消息發送和消息接收函數,這些消息發送和消息接收函數以無 鎖方式同時允許多個消息收發。處理器能夠執行被存儲在存儲器中的多個模塊。多個模塊 包括檢索模塊和讀取模塊。檢索模塊被配置為接收從具有至少一個用戶的一個或多個宿 主節點傳送的多個消息,并將這樣接收的消息排列在先進先出(FIFO)子隊列中,其中,每個 FIFO子隊列是專用于每個用戶的,且被存儲在存儲器映射文件中。讀取模塊被配置為通過 在FIFO模式中使用循環技術從FIFO子隊列中的每一個讀取多個消息。
[0010] 在一種實現中,描述了用于在進程間通信中傳送主宿在至少一個宿主節點上的多 個消息的方法。該方法包括執行以無鎖方式同時允許多個消息收發的消息發送和消息接 收函數,并使用遠程直接內存訪問(RDMA)來傳送多個用戶消息。傳送進一步包括將遠程發 送器進程中的每一個映射到與宿主節點相關聯的FIFO子隊列中的每一個,并通過使用一 個或多個存儲器映射文件,將遠程發送器進程中的每一個和與接收節點相關聯的相應FIFO 子隊列映射起來。該方法進一步包括從至少一個用戶接收消息,并將從至少一個用戶這樣 接收的消息排列在與宿主節點相關聯的先進先出(FIFO)子隊列中,其中,每個FIFO子隊列 是專用于每個用戶的,且被存儲在存儲器映射文件中。該方法進一步包括使用相應遠程發 送器進程將來自與宿主節點相關聯的每個FIFO子隊列的消息傳送到與接收節點相關聯的 相應FIFO子隊列。借助于處理器執行排列、映射和傳送的方法步驟。
[0011] 在一種實現中,描述了用于在進程間通信中接收主宿在至少一個宿主節點上的多 個消息的方法。該方法包括執行以無鎖方式同時允許多個消息收發的消息發送和消息接收 函數,以及使用遠程直接內存訪問(RDMA)來接收多個用戶消息。接收消息的方法進一步包 括接收從具有至少一個用戶的一個或多個宿主節點傳送的多個消息并將這樣接收的消息 排列在先進先出(FIFO)子隊列中,其中,FIFO子隊列是專用于每個用戶的,且被存儲在存 儲器映射文件中。該方法進一步包括通過在FIFO模式中使用循環技術從FIFO子隊列中的 每一個讀取多個消息。借助于處理器執行接收、排列和讀取的方法步驟。
【附圖說明】
[0012] 參考附圖描述【具體實施方式】。附圖中,附圖標記最左邊數字標識首次出現該附圖 標記的附圖。貫穿附圖,使用相同的數字來指示相似的特征和組件。
[0013] 圖1示出根據本主題的實施方式用于在所示出的進程間通信中傳送和接收主宿 在至少一個宿主節點上的多個消息的系統的網絡實現。
[0014] 圖2示出根據本主題的實施方式用于傳送主宿在至少一個宿主節點上的多個消 息的系統。
[0015] 圖3示出根據本主題的實施方式用于接收主宿在至少一個宿主節點上的多個消 息的系統。
[0016] 圖4示出根據本主題的示例性實施方式用于傳送和接收主宿在至少一個宿主節 點上的多個消息的本發明的實現的配置1。
[0017] 圖5示出根據本主題的示例性實施方式用于傳送和接收主宿在至少一個宿主節 點上的多個消息的本發明的實現的配置2。
[0018] 圖6示出本發明中所使用的隊列和子隊列的結構。
[0019] 圖7示出根據本主題的實施方式用于傳送主宿在至少一個宿主節點上的多個消 息的方法。
[0020] 圖8示出根據本主題的實施方式用于接收主宿在至少一個宿主節點上的多個消 息的方法。
[0021] 圖9示出用于多發布器吞吐量測試的測試設置。
[0022] 圖10示出用于多發布器吞吐量測試結果的最大吞吐量統計。
[0023] 圖11示出用于多發布器等待時間測試的測試設置。
[0024] 圖12示出用于多個發布器的平均往返等待時間統計的測試結果。
[0025] 圖13示出在無限帶寬(InfiniBand)上使用RDMA的多個發布器的不同吞吐量率 下的平均往返等待時間統計。
【具體實施方式】
[0026] 公開了用于在進程間通信中傳送和接收主宿在至少一個宿主節點上的多個消息 的系統和方法。本發明的系統和方法提供對多發布器同時向異步無鎖消息隊列寫入的支 持,本發明的系統和方法使用RDMA技術來將其遠程訂閱器連接到發布器。用于由多發布器 的無鎖消息收發的本系統和方法的實現機制包括通過收發系統內部地以無縫方式消息向 每個發布器指派專用的子隊列,無縫方式不需要手動干預來向所有發布器給出它們正在寫 入到相同的消息隊列的通知。進一步,在RDMA握手進程時,在發布器和訂閱器端處共享適 當的子隊列。具有多發布器的隊列的訂閱器將以循環方式從出現在系統中的所有子隊列讀 取以便以接近FIFO方式獲取消息。根據本發明,所有發布器向自身的子隊列寫入,從而避 免了對鎖的需要,且訂閱器按每個發布器將消息插入到自身的子隊列中的順序接收消息。
[0027] 根據實施方式,在授讓給本申請人的印度專利申請1745/MUM/2011中公開了運 行在兩個節點之間的支持RDMA的網絡上的用于遠程消息收發的系統和方法。申請1745/ MUM/2011公開了主宿在第一宿主節點上的存儲器映射文件,該第一宿主節點被配置為將消 息的靜態循環隊列與主宿在第二宿主節點上的第二存儲器映射文件進行同步;并且,運行 在第一宿主節點上的至少一個遠程發送器進程異步地將至少一批消息以及相應的RDMA工 作請求從所述隊列發送到第二宿主節點。申請1745/MUM/2011的全部內容通過引用合并于 此,且為簡潔起見不再重復。
[0028] 盡管可以在任何數量的不同計算系統、環境和/或配置中實現所描述的用于傳送 和接收主宿在至少一個宿主節點上的多個消息的系統和方法的多個方面,但在下列示例性 系統的上下文中描述各實施方式。
[0029] 現在參見圖1,根據本主題的實施方式,示出用于傳送主宿在至少一個宿主節點上 的多個消息的系統102的網絡實現100。在一個實施方式中,系統102在進程間通信中從多 個用戶接收多個消息,并排列這樣接收的消息。進一步,系統102將消息傳送給接收器。進 一步,根據本主題的一個實施方式,示出用于接收主宿在至少一個宿主節點上的多個消息 的系統103的網絡實現100。在一個實施方式中,系統103接收從具有至少一個用戶的一個 或多個宿主節點傳送的多個消息。在另一實施方式中,系統103讀取這樣從一個或多個宿 主節點接收到的多個消息。
[0030] 盡管考慮到充當宿主節點的一個或多個服務器上實現系統102和系統103而解釋 本主題,但應理解,也可以在各種計算系統中實現系統102和系統103,諸如膝上型計算機、 臺式計算機、筆記本、工作站、大型計算機、服務器、網絡服務器等等。應理解,系統102和系 統103可由多個用戶通過在下文中統稱為用戶104的一個或多個用戶設備104-1、104-2-104-N或駐留在用戶設備104上的應用來訪問。用戶設備104的示例可以包括但不限于便 攜式計算機、個人數字助理、手持式設備和工作站。用戶設備104通過網絡106通信地耦合 到系統102和系統103。
[0031] 在一個實現中,網絡106可以是無線網絡、有線網絡或其組合。網絡106可以被實 現為不同類型的網絡中的一種,例如內聯網、局域網(LAN)、廣域網(WAN)、因特網等等。網 絡106可以是專用網絡或共享網絡。共享網絡表示使用各種協議來相互通信的不同類型的 網絡的關聯,這些協議例如超文本傳輸協議(HTTP)