此處的「DMA」表示:直接存儲器訪問,「RDMA」是:遠程直接存儲器訪問。如何在java中使用DMA或RDMA?
我用Java創建了一個應用程序來傳輸股票數據,但是我發現延遲比我預期的要大。我聽說有人開發了使用「DMA/RDMA」的相同類型的應用程序,它具有良好的性能,所以我想知道我能否在Java中使用「DMA/RDMA」?
如果不是,我應該使用什麼語言,以及是否有任何好的庫可以使用?
此處的「DMA」表示:直接存儲器訪問,「RDMA」是:遠程直接存儲器訪問。如何在java中使用DMA或RDMA?
我用Java創建了一個應用程序來傳輸股票數據,但是我發現延遲比我預期的要大。我聽說有人開發了使用「DMA/RDMA」的相同類型的應用程序,它具有良好的性能,所以我想知道我能否在Java中使用「DMA/RDMA」?
如果不是,我應該使用什麼語言,以及是否有任何好的庫可以使用?
RDMA,據我所知它是網絡基礎設施(以及相關的內核模塊等)的屬性,而不是應用級編程語言的屬性。
換句話說,您必須獲得專門的工具包才能使用RDMA來減少網絡延遲。以下是支持RDMA的10GbE網卡示例:link。
Java應用程序能夠通過nio包壓縮文件。這些mmaped文件可以由多個程序訪問 - 我affraid這是Java關閉的事情DMA可從IBM開發人員
This文章做工給出瞭如何DMA訪問可以使用Java
Java 7的實現一個很好的概述支持Solaris和Linux上的SDP協議(使用OpenFabrics.org驅動程序)。不幸的是,SDP協議在OFX的2.x版本中已被棄用。人們訴諸jVerbs之類的JNI包裝。
你有兩個選擇(據我所知):
本文展示如何允許OS的其他部分對Java創建的數據執行DMA,以及實現零拷貝數據傳輸。 (Cool,如果你問我。) – 9000
@LordDoskias,謝謝你,zerocopy是一個很好的建議,我會稍後再嘗試 – Freewind
那麼爲了實現任何類型的DMA訪問,你必須依賴底層操作系統。因此,每個JVM版本都具有特定於平臺的代碼,通過filechannel來公開此功能。所以從某種意義上說,你可以獲得使用DMA所帶來的所有好處 – LordDoskias