2011-10-19 17 views
6

"DMA" aquí significa: Acceso a la memoria directa, y "RDMA" es: acceso directo a memoria remota.¿Cómo usar DMA o RDMA en Java?

Utilicé Java para crear una aplicación para transferir datos de stock, pero encontré que la latencia es más grande de lo que esperaba. Escuché que alguien desarrolló la misma aplicación tipo "DMA/RDMA", que tiene un buen rendimiento, por lo que me pregunto si puedo usar "DMA/RDMA" en Java.

En caso negativo, ¿qué idioma debo usar y si hay alguna buena biblioteca para usar?

Respuesta

1

RDMA como sé que es una propiedad de la infraestructura de red (junto con los módulos de kernel pertinentes, etc.), no del lenguaje de programación de nivel de aplicación.

En otras palabras, tendrías que obtener un kit especializado para usar RDMA para reducir la latencia de la red. Aquí hay un ejemplo de una tarjeta de red de 10 GbE que admite RDMA: link.

1

Las aplicaciones Java son capaces de mmaping archivos a través de paquetes nio. Esos archivos mmaped pueden ser accedidos por los múltiples programas - que participaban esto es cierra cosa a DMA disponible en java

5

This artículo de desarrolladores de IBM una labor dará una gran visión general de cómo el acceso DMA se puede lograr utilizando java

+1

El artículo muestra cómo permitir que otras partes del sistema operativo realicen DMA en datos creados por Java y lograr transferencias de datos de copia cero. (Genial, si me preguntas.) – 9000

+0

@LordDoskias, gracias, zerocopy es un buen consejo, lo intentaré más tarde – Freewind

+0

Bueno, para poder acceder a DMA de cualquier tipo, TIENES que confiar en el SO subyacente. Entonces, cada versión de JVM tiene un código específico de plataforma que expone esta capacidad a través de canales de archivos. Entonces, en cierto sentido, obtienes todos los beneficios que provienen de usar DMA – LordDoskias

0

Java 7 admite el protocolo SDP en Solaris y Linux (con controladores OpenFabrics.org). Lamentablemente, el protocolo SDP ha quedado obsoleto en la versión 2.x de OFED. La gente recurre a envoltorios de JNI como jVerbs.

1

tiene dos opciones (que yo sepa):

  1. Java SDP - ya no se utiliza
  2. JXIO [1], una biblioteca de mensajería de alto rendimiento basada en RDMA y apoyado por Mellanox

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

1

No es DiSNI, una nueva biblioteca para RDMA programa en Java. DiSNI es la variante de código abierto de jVerbs de IBM. Hay algunos números de rendimiento here que ilustran cómo RDMA con Java se compara con sockets en C y Java, y también con RDMA en C.