Qualcuno ha capito come eseguire il bypass Kernel in Java? Qualunque buongiorno da qualche parte o questa è scienza missilistica?Networking con Kernel Bypass in Java
risposta
Cerca "Java Zero-Copy Buffers" o "Java NIO" o "Java Netty".
Ecco una presentazione su Netty e una copia zero: http://www.slideshare.net/danbim/zerocopy-eventdriven-servers-with-netty. Ecco un esempio di progetto con Netty.
Oppure si può andare piano inferiore e utilizzare le java.nio.channels classi, che potete leggere qui http://www.ibm.com/developerworks/linux/library/j-zerocopy/
Ecco grandi informazioni eSniff. Sto usando Java NIO ma questo non aggira il kernel. – chrisapotek
Non ho programmato in Java da anni quindi non sono sicuro di quanto sia rilevante la risposta. Ma perché i downvotes di recente? – eSniff
Se si utilizza Solarflare, è possibile utilizzare le loro API per fare kernel bypass (non sto usando direttamente, quindi non posso fornire ulteriori dettagli). È inoltre possibile utilizzare un broduct di messaggistica come 29West LBM o IBM LLM che supportano funzionalità avanzate su vari hardware.
Come @eSniff menzionato, JRE ha l'API transferFrom()
/transferTo()
che ora viene utilizzata per esporre l'equivalente sendfile(2)
per i sistemi che lo supportano. La semantica dell'API è definita in modo che possa essere implementata in modo trasparente per supportare i trasferimenti DMA tra qualsiasi 2 canali.
Ehi, ma transferFrom e transferPer avere a che fare con FileChannel! Sto parlando di SocketChannel e DatagramChannel qui per il networking :( – chrisapotek
@chrisapotek un socketChannel è sia un WritableByteChannel che un ReadableByteChannel, quindi .... someFileChannel.transferFrom (someSocketChannel, pos, count)/someFileChannel.transferTo (pos, count, someSocketChannel) Ho usato solo i wrapper Netty, ma questo dovrebbe funzionare – eSniff
Il transferXxx è l'API standard per l'esposizione delle funzionalità in stile DMA.Nell'HostS HotSpot Oracle, a partire dalla versione 7, è implementato solo per file e socket. Non penso che funzionerebbe tra il buffer e il socket di memoria spazio utente (es. RDMA). Detto questo, il codice ha punti di estensione e se non erro, i nuovi tipi di canale possono essere aggiunti dalle librerie provider da terze parti. – ddimitrov
Le persone che hanno chiuso questo sono senza tracce sul networking. Bel lavoro ragazzi! – chrisapotek
C'è una buona ragione per cui esiste questa domanda. Il kernel non ci dà la stessa quantità di throughput del pacchetto dell'API dell'utente. Sinceramente mi piacerebbe ricorrere a @Makoto, John Palmer, Don Roby, Rene, Ben a riguardo. –