2012-08-25 20 views
6

¿Alguien ha descubierto cómo hacer omisión de Kernel en Java? ¿Algún mundo de hola en algún lado o esto es ciencia de cohetes?Redes con omisión de Kernel en Java

+11

Las personas que cerraron esto no tienen idea acerca de la creación de redes. ¡Buen trabajo muchachos! – chrisapotek

+0

Hay una buena razón para que esta pregunta exista. El kernel no nos da la misma cantidad de rendimiento de paquetes que la API del usuario. Honestamente, apelaría a @Makoto, John Palmer, Don Roby, René, Ben sobre esto. –

Respuesta

1

Busque "Java Zero-Copy Buffers" o "Java NIO" o "Java Netty".

Aquí hay una presentación de diapositivas sobre Netty y copia cero: http://www.slideshare.net/danbim/zerocopy-eventdriven-servers-with-netty. Aquí hay un proyecto de ejemplo con Netty.

O puede ir nivel inferior y utilizar los java.nio.channels clases, que se puede leer aquí http://www.ibm.com/developerworks/linux/library/j-zerocopy/

+0

Esa es una gran información eSniff. Estoy usando Java NIO, pero eso no pasa por alto el kernel. – chrisapotek

+0

No he programado en Java en años, así que no estoy seguro de cuán relevante es la respuesta. Pero, ¿por qué los downvotes recientemente? – eSniff

5

Si está utilizando solarflare, puede utilizar su API para hacer de derivación del núcleo (no estoy usando directamente, así que no puedo proporcionar más detalles). También puede usar un producto de mensajería como 29West LBM o IBM LLM, que admite una amplia funcionalidad en varios tipos de hardware.

Como mencionó @eSniff, el JRE tiene transferFrom()/transferTo() API que ahora se usa para exponer el equivalente sendfile(2) para los sistemas que lo soportan. La semántica de la API se define para que se pueda implementar de forma transparente para admitir transferencias de DMA entre dos canales.

+0

¡Oye, pero transferFrom y transferTo tiene que ver con FileChannel! Estoy hablando de SocketChannel y DatagramChannel aquí para la creación de redes :( – chrisapotek

+0

@chrisapotek un socketChannel es tanto un canal de bits por escrito como por un canal de datos legible, por lo que ... someFileChannel.transferFrom (someSocketChannel, pos, count)/someFileChannel.transferTo (pos, count, someSocketChannel) Solo he usado las envolturas de Netty, pero esto debería funcionar – eSniff

+1

La transferencia Xxx es la API estándar para exponer la funcionalidad de estilo DMA. En Oracle HotSpot JRE, a partir de la versión 7, se implementa solo para archivos y sockets. No creo que funcione entre el búfer de memoria de espacio de usuario y el zócalo (es decir, RDMA). Dicho esto, el código tiene puntos de extensión y, si no me equivoco, las bibliotecas de proveedores pueden agregar nuevos tipos de canales a terceros. – ddimitrov

Cuestiones relacionadas