如何在java中使用DMA或RDMA?

时间:2011-10-19 10:49:29

标签: java dma rdma

“DMA”在这里表示:直接内存访问,“RDMA”是:远程直接内存访问。

我使用Java创建了一个传输股票数据的应用程序,但我发现延迟比我预期的要大。我听说有人开发了使用“DMA / RDMA”的相同类型的应用程序,它具有良好的性能,所以我想知道我是否可以在Java中使用“DMA / RDMA”?

如果没有,我应该使用哪种语言,以及是否有好的库可供使用?

6 个答案:

答案 0 :(得分:6)

来自IBM开发人员工作的

This文章概述了如何使用java实现DMA访问

答案 1 :(得分:3)

您有两种选择(我知道):

  1. Java SDP - 已被弃用
  2. JXIO [1],一个基于RDMA构建并由Mellanox支持的高性能消息库
  3. [1] https://github.com/accelio/JXIO

答案 2 :(得分:2)

DiSNI,一个用Java编写RDMA的新库。 DiSNI是IBM的jVerbs的开源变种。有一些性能数字here说明了RDMA with Java与C和Java中的套接字以及C中的RDMA的比较。

答案 3 :(得分:1)

RDMA,因为我知道它是网络基础设施的属性(以及相关的内核模块等),而不是应用程序级编程语言。

换句话说,您必须获得专门的工具包才能使用RDMA来减少网络延迟。以下是支持RDMA的10GbE网卡示例:link

答案 4 :(得分:1)

Java应用程序能够通过nio包mmaping文件。那些mmaped文件可以被多个程序访问 - 我担心这对于java中可用的DMA来说是关闭的东西

答案 5 :(得分:0)

Java 7支持Solaris和Linux上的SDP协议(使用OpenFabrics.org驱动程序)。不幸的是,在2.00版本的OFED中已经弃用了SDP协议。人们诉诸于jVerbs这样的JNI包装器。