Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use DMA or RDMA in java?

Tags:

java

dma

rdma

"DMA" here means: Direct memory access, and "RDMA" is: remote direct memory access.

I used Java to created an application to transfer stock data, but I found the latency is bigger than I expected. I heard someone developed same type application used "DMA/RDMA", which has good performance, so I wonder if I can use "DMA/RDMA" in Java?

If not, what language should I use, and if there are any good libraries to use?

like image 622
Freewind Avatar asked Oct 19 '11 10:10

Freewind


4 Answers

This article from IBM developers work give a great overview of how DMA access can be achieved using java

like image 180
LordDoskias Avatar answered Oct 09 '22 18:10

LordDoskias


You have two options (that I know of):

  1. Java SDP -- has been deprecated
  2. JXIO [1], a high-performance messaging library built on RDMA and supported by Mellanox

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

like image 35
JC1 Avatar answered Oct 09 '22 17:10

JC1


There is DiSNI, a new library to program RDMA in Java. DiSNI is the open source variant of IBM's jVerbs. There are some performance numbers here that illustrate how RDMA with Java compares to sockets in C and Java, and also to RDMA in C.

like image 28
pstuedi Avatar answered Oct 09 '22 19:10

pstuedi


RDMA as I know it is a property of the networking infrastructure (along with the relevant kernel modules etc), not of the application-level programming language.

In other words, you'd have to get specialized kit to make use of RDMA to reduce network latency. Here is an example of a 10GbE network card that supports RDMA: link.

like image 21
NPE Avatar answered Oct 09 '22 17:10

NPE