2011-10-19 7 views
6

"DMA" significa: accesso diretto alla memoria e "RDMA" è: accesso diretto alla memoria remota.Come utilizzare DMA o RDMA in java?

Ho usato Java per creare un'applicazione per trasferire i dati di magazzino, ma ho trovato che la latenza è più grande di quanto mi aspettassi. Ho sentito che qualcuno ha sviluppato la stessa applicazione di tipo "DMA/RDMA", che ha buone prestazioni, quindi mi chiedo se posso usare "DMA/RDMA" in Java?

In caso contrario, quale lingua devo usare e se ci sono buone librerie da usare?

risposta

1

RDMA come so che è una proprietà dell'infrastruttura di rete (insieme ai relativi moduli del kernel, ecc.), Non del linguaggio di programmazione a livello di applicazione.

In altre parole, è necessario ottenere kit specializzati per utilizzare RDMA per ridurre la latenza di rete. Ecco un esempio di una scheda di rete 10GbE che supporta RDMA: link.

1

Le applicazioni Java sono in grado di eseguire il mmaping dei file tramite i pacchetti nio. Questi file mmaped possono essere accessi da più programmi - I affraid questo è chiude cosa da DMA disponibile in java

5

This articolo da parte degli sviluppatori IBM lavoro dare una grande panoramica di come l'accesso DMA può essere ottenuto utilizzando Java

+1

L'articolo mostra come consentire ad altre parti del sistema operativo di eseguire DMA su dati creati da Java e ottenere trasferimenti di dati a copia zero. (Cool, se me lo chiedi.) – 9000

+0

@LordDoskias, grazie, zerocopy è un buon consiglio, proverò più tardi – Freewind

+0

Bene per poter ottenere un accesso DMA di qualsiasi tipo, devi affidarti al sistema operativo sottostante. Quindi ogni versione di JVM ha un codice specifico per piattaforma che espone questa capacità attraverso i canali di filtraggio. Quindi, in un certo senso, stai ricevendo tutti i benefici che derivano dall'uso di DMA – LordDoskias

0

Java 7 supporta il protocollo SDP su Solaris e Linux (con driver OpenFabrics.org). Sfortunatamente il protocollo SDP è stato deprecato nella versione 2.x di OFED. Le persone ricorrono a wrapper JNI come jVerbs.

1

si hanno due opzioni (che io sappia):

  1. Java SDP - è stato deprecato
  2. JXIO [1], una libreria di messaggistica ad alte prestazioni costruita su RDMA e sostenuta da Mellanox

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

1

C'è DiSNI, una nuova libreria per RDMA programma in Java. DiSNI è la variante open source di IBM jVerbs. Esistono alcuni numeri di prestazione here che illustrano come RDMA con Java è paragonabile ai socket in C e Java e anche a RDMA in C.