天天看點

基于Java的RDMA高性能通信庫(二):Java Socket Over RDMA

目錄

1.Comparing JSOR with Java TCP communications

2.Comparing JSOR to Java Sockets Direct Protocol (SDP) communications

3.JSOR features and design

3.1 JSOR Desgin

3.2 JSOR Zero copy function

4. JSOR limitions

JSOR為現有的Java™ Socket應用程式提供了一種機制,可以利用InfiniBand等高性能網絡基礎架構。通過減少網絡延遲并改善Java伺服器和用戶端配置之間的網絡帶寬,可以提高應用程式性能。

通過指定運作時配置檔案來啟用遠端直接記憶體通路(RDMA), 這種方式與Sockets Direct Protocol(SDP)配置檔案具有類似格式的。啟用RDMA後,傳統的TCP套接字會透明地切換到RDMA套接字。與傳統以太網連接配接相比,此連接配接允許用戶端和伺服器端點通過InfiniBand交換結構以更高的資料傳輸速率進行通信。JSOR仍然使用Java Socket接口,使用JSOR,應用程式開發者不必更改現有的代碼,因為它仍然使用相同的Java Socket套接字接口。JSOR是IBM公司開發的一種基于RDMA的高性能通信庫,現在已經放入到IBM SDK, Java Technology Edition 8.0.0 作為IBM Java基礎通信庫。

1.Comparing JSOR with Java TCP communications

TCP協定依賴于作業系統核心,而RDMA協定繞過作業系統核心,進而實作不同支援RDMA的主機系統上的Java™應用程式之間的直接通信。是以,RDMA網絡操作需要較少的處理器資源并提高網絡吞吐量。

在傳統的Java TCP套接字處理模型中,主機作業系統核心起着關鍵作用。所有常見網絡操作都需要作業系統調用,例如:

  • 建立套接字Socket
  • 綁定到端口port
  • 監聽一個知道的位址
  • 連接配接到遠端主機
  • 接受傳入的連接配接請求
  • 在連接配接的端口之間傳輸資料

當Java用戶端和伺服器應用程式存在于不同的主機系統上時,在不同主機系統之間傳輸資料涉及在網絡接口之間與緩沖區之間的多個複制操作。 每個主機系統在此過程中涉及以下緩沖區:

  • Java應用緩沖區到Java套接字緩沖區
  • Java socket緩沖區到作業系統套接字緩沖區
  • 作業系統套接字緩沖區到網絡接口驅動程式

在主機系統之間傳輸資料之前,這些複制操作使用CPU進行資料複制和移動。

與TCP協定不同,RDMA協定是在高速交換結構之上定義的,如InfiniBand,它獨立于作業系統核心。相反,網絡處理被解除安裝到專用的RDMA網絡接口擴充卡。RDMA協定允許一個主機上的Java應用程式直接通路不同主機上的Java應用程式的記憶體。此功能支援在Java應用程式之間直接傳輸資料。

下圖說明了Java用戶端和伺服器應用程式之間用于TCP / IP通信和RDMA通信所需的連接配接:

基于Java的RDMA高性能通信庫(二):Java Socket Over RDMA

與TCP處理相比,RDMA使用更少的處理器資源,并且可以利用高性能交換結構來最大化支援RDMA的系統之間的資料吞吐量。

2.Comparing JSOR to Java Sockets Direct Protocol (SDP) communications

     JSOR在本機級别使用R-Sockets協定API,允許Java™TCP套接字應用程式利用支援RDMA的硬體,而無需對應用程式代碼進行任何更改。雖然SDP提供類似的功能,但在Java應用程式可以使用RDMA基礎架構之前,需要特定的作業系統才能支援。

     套接字直接協定(SDP)是一種标準協定,定義為加速支援RDMA的硬體上的TCP流套接字。但是,此協定依賴于作業系統核心,必須由底層主機作業系統支援。

     作為SDP的替代方案,IBM®SDK實作了基于R-Sockets協定的解決方案。R-Sockets在Native Level級别提供RDMA套接字API。此API行為、建立連接配接、和流資料傳輸都和之前Scoket傳輸實作相似。測試表明,與SDP和純RDMA本機實作相比,此R-Sockets解決方案表現良好。

      JSOR使用R-Sockets作為透明地将Java TCP套接字切換到端口之間的RDMA通信的基礎。RDMA通信基于運作時配置詳細資訊。基于Java套接字的應用程式可以在啟用RDMA的基礎架構上運作時不需要任何代碼更改,進而提高網絡性能。

3.JSOR features and design

The following JSOR features are available with this release:

  • RMDA-enabled Java plain stream sockets
  • Support for IPv6
  • TCP/IP fall back support for RDMA server sockets
  • Extensive call tracing at the JSOR native level

3.1 JSOR Desgin

JSOR庫使用兩個路由與RDMA網絡接口擴充卡互動,如下圖所示:

基于Java的RDMA高性能通信庫(二):Java Socket Over RDMA

Fast data path: JSOR庫使用OpenFabrics軟體(OFS)User verbs子產品直接與RDMA網絡接口擴充卡通信。此路由通常用于發送資料。

Slow control path: JSOR庫與依賴于裝置的Kernel verbs子產品互動,以控制和管理RDMA資源對象。該路徑主要用于建立連接配接。

3.2 JSOR Zero copy function

預設情況下,JSOR資料傳輸涉及使用中間緩沖區複制操作。對于大型資料傳輸,您可以通過啟用零複制功能來提高性能。此函數将資料直接從一台主機上的Java™應用程式記憶體複制到另一台主機上的Java應用程式記憶體,而無需在任一主機上使用處理器。

如下圖所示,緩沖區複制過程始終使用主機作業系統,進而在使用者空間和核心空間之間産生多個中間副本和計算上昂貴的上下文切換。僅當注冊緩沖區以用于直接複制操作時,零複制過程才使用主機CPU。注冊緩沖區後,資料傳輸将直接進行。

基于Java的RDMA高性能通信庫(二):Java Socket Over RDMA

當應用程式2在圖中具有可用于接收資料的緩沖區時,應用程式通過注冊緩沖區來直接資料放置來通告該可用性。當應用程式1有要發送的資料時,它會将資料直接寫入已注冊的緩沖區。當寫操作完成時,應用程式1将寫完成消息發送到另一側。當應用程式2收到此消息時,它可以處理傳輸的資料。資料傳輸完成後,應用程式2可以取消注冊接收緩沖區。

由于緩沖區注冊開銷,僅當資料傳輸大小很大時才能實作CPU周期的預期減少。例如,對于單個連接配接,在資料傳輸大小超過256 KB之前,您可能看不到減少。如果多個并行連接配接共享相同的緩沖區以進行直接資料放置,則可以減少此資料門檻值。

由于僅在大資料大小時才能實作性能提升,是以預設情況下不啟用零複制功能。要啟用該功能,請使用-Dcom.ibm.net.rdma.zeroCopy = true屬性。

4. JSOR limitions

4.1兩個RDMA端口之間長時間運作的并行用戶端數量有限

此行為與較舊的Mellanox卡及其驅動程式相關聯。限制是由底層接口驅動程式配置設定和重新配置設定隊列對(連結的發送和接收隊列)的方式引起的。隊列對是在RDMA端點之間釋出發送或接收請求的基礎。

例如,第一代Mellanox卡MT25208将同時打開的連接配接數限制為大約300,而第二代Mellanox卡MT26428将該數量限制為大約30。

4.2啟用RDMA的Java應用程式在運作後不會立即關閉

RDMA運作時環境配置設定和管理許多資源對象,作為每個連接配接建立的一部分。關閉連接配接時,将釋放這些資源。RDMA運作時環境等待大約1秒,以便在釋放資源之前完成并發連接配接線程。此等待時間反映在啟用RDMA的Java應用程式的關閉中

4.3RDMA連接配接比TCP連接配接花費更多時間

連接配接建立過程在RDMA中比在TCP内更複雜。RDMA連接配接建立涉及RDMA特定資源對象的建立和管理以及雙向事件控制。這種時間增加是使用RDMA的衆所周知的副作用。

4.4RDMA連接配接比TCP連接配接花費更多時間

JSOR實作不支援臨時端口。是以,必須事先修複服務端點并在配置檔案中指定。

4.5當RDMA伺服器上未啟用TCP回退選項時,RDMA用戶端使用TCP進行連接配接

在這種不尋常的情況下,在未啟用TCP回退的情況下運作的啟用RDMA的伺服器的規則中列出的RDMA用戶端嘗試使用TCP進行連接配接。

除非您設定了接受逾時,否則RDMA伺服器會等待無限期的時間嘗試使用RDMA接受連接配接。預設情況下,每個RDMA端點都有兩個部分,一個用于TCP,另一個用于RDMA。在RDMA伺服器和RDMA用戶端之間建立連接配接時,它會在背景隐式打開TCP連接配接。TCP部分用于偵聽傳入的連接配接請求。

繼續閱讀