如何在java中使用DMA或RDMA?

如何在java中使用DMA或RDMA?,java,dma,rdma,Java,Dma,Rdma,这里的“DMA”是指:直接内存访问,“RDMA”是指:远程直接内存访问 我使用Java创建了一个应用程序来传输股票数据,但我发现延迟比我预期的要大。我听说有人开发了使用“DMA/RDMA”的同类型应用程序,它有很好的性能,所以我想知道我是否可以在Java中使用“DMA/RDMA” 如果没有,我应该使用哪种语言,如果有好的库可以使用?据我所知,RDMA是网络基础设施(以及相关内核模块等)的属性,而不是应用程序级编程语言的属性 换句话说,您必须使用专门的工具包来利用RDMA来减少网络延迟。下面是一个

这里的“DMA”是指:直接内存访问,“RDMA”是指:远程直接内存访问

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


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

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


换句话说,您必须使用专门的工具包来利用RDMA来减少网络延迟。下面是一个支持RDMA的10GbE网卡示例:。

Java应用程序能够通过nio包对文件进行MMA。这些mmaped文件可以由多个程序访问-我很抱歉,这是java中可用的DMA的一部分。

来自IBM开发者工作的文章对如何在Solaris和Linux(使用OpenFabrics.org驱动程序)上使用java

java 7支持SDP协议实现DMA访问进行了概述。不幸的是,SDP协议在OFED的2.x版本中已被弃用。人们求助于JNI包装,比如jVerbs

你有两个选择(据我所知):

  • JavaSDP——已被弃用
  • JXIO[1],一个基于RDMA构建并由Mellanox支持的高性能消息传递库

  • [1]

    有一个新的库可以用Java编写RDMA。DiSNI是IBM jVerbs的开源变体。有一些性能数字说明了使用Java的RDMA如何与C和Java中的套接字以及C中的RDMA进行比较。

    本文介绍了如何允许操作系统的其他部分对Java创建的数据进行DMA,并实现零拷贝数据传输。(很酷,如果你问我。)@LordDoskias,谢谢你,zerocopy是一个很好的建议,我稍后会尝试它。为了实现任何类型的DMA访问,你必须依赖底层操作系统。因此,每个JVM版本都有特定于平台的代码,这些代码通过文件通道公开此功能。因此,从某种意义上讲,您可以从IBM获得使用DMAAlso JSOR的所有好处: