2011-10-19 116 views
6

此處的「DMA」表示:直接存儲器訪問,「RDMA」是:遠程直接存儲器訪問。如何在java中使用DMA或RDMA?

我用Java創建了一個應用程序來傳輸股票數據,但是我發現延遲比我預期的要大。我聽說有人開發了使用「DMA/RDMA」的相同類型的應用程序,它具有良好的性能,所以我想知道我能否在Java中使用「DMA/RDMA」?

如果不是,我應該使用什麼語言,以及是否有任何好的庫可以使用?

回答

1

RDMA,據我所知它是網絡基礎設施(以及相關的內核模塊等)的屬性,而不是應用級編程語言的屬性。

換句話說,您必須獲得專門的工具包才能使用RDMA來減少網絡延遲。以下是支持RDMA的10GbE網卡示例:link

1

Java應用程序能夠通過nio包壓縮文件。這些mmaped文件可以由多個程序訪問 - 我affraid這是Java關閉的事情DMA可從IBM開發人員

5

This文章做工給出瞭如何DMA訪問可以使用Java

+1

本文展示如何允許OS的其他部分對Java創建的數據執行DMA,以及實現零拷貝數據傳輸。 (Cool,如果你問我。) – 9000

+0

@LordDoskias,謝謝你,zerocopy是一個很好的建議,我會稍後再嘗試 – Freewind

+0

那麼爲了實現任何類型的DMA訪問,你必須依賴底層操作系統。因此,每個JVM版本都具有特定於平臺的代碼,通過filechannel來公開此功能。所以從某種意義上說,你可以獲得使用DMA所帶來的所有好處 – LordDoskias

0

Java 7的實現一個很好的概述支持Solaris和Linux上的SDP協議(使用OpenFabrics.org驅動程序)。不幸的是,SDP協議在OFX的2.x版本中已被棄用。人們訴諸jVerbs之類的JNI包裝。

1

你有兩個選擇(據我所知):

  1. 的Java SDP - 已棄用
  2. JXIO [1],高性能的消息庫建立在RDMA和支持Mellanox公司

[1] https://github.com/accelio/JXIO

1

DiSNI,一個新的庫中的Java程序RDMA。 DiSNI是IBM的jVerbs的開源變體。有一些性能數字here說明了如何將Java RDMA與C和Java中的套接字以及RD中的RDM相比較。

相關問題