2012-08-25 5 views
6

Hat jemand herausgefunden, wie Kernel-Bypass in Java zu tun? Irgendwelche Hallo Welt irgendwo oder das ist Raketenwissenschaft?Netzwerk mit Kernel-Bypass in Java

+11

Die Leute, die das geschlossen haben, haben keine Ahnung von Vernetzung. Gute Arbeit, Leute! – chrisapotek

+0

Es gibt einen guten Grund, warum diese Frage existiert. Der Kernel gibt uns nicht den gleichen Paketdurchsatz wie die Benutzer-API. Ich würde ehrlich @Makoto, John Palmer, Don Roby, Rene, Ben darüber ansprechen. –

Antwort

1

Suche nach "Java Zero-Copy Buffers" oder "Java NIO" oder "Java Netty".

Hier ist eine Diashow über Netty und Null-Kopie: http://www.slideshare.net/danbim/zerocopy-eventdriven-servers-with-netty. Hier ist ein Beispielprojekt mit Netty.

Oder können Sie unteren Ebene gehen und verwenden Sie die java.nio.channels Klassen, die Sie hier lesen können http://www.ibm.com/developerworks/linux/library/j-zerocopy/

+0

Das ist eine gute Info eSniff. Ich benutze Java NIO, aber das umgeht den Kernel nicht. – chrisapotek

+0

Ich habe nicht in Java in Jahren programmiert, so bin ich mir nicht sicher, wie relevant die Antwort ist mehr. Aber warum die Downvotes in letzter Zeit? – eSniff

5

Wenn Sie Solarflare verwenden, können Sie ihre API verwenden Kernel Bypass zu tun (ich benutze es nicht direkt, kann also keine näheren Angaben machen). Sie können auch ein Messaging-Produkt wie 29West LBM oder IBM LLM verwenden, die umfangreiche Funktionen über verschiedene Hardware unterstützen.

@eSniff Wie erwähnt, hat die JRE transferFrom()/transferTo() API, die das Äquivalent sendfile(2) für die Systeme zu belichten wird jetzt verwendet, die es unterstützen. Die Semantik der API ist so definiert, dass sie transparent implementiert werden kann, um DMA-Übertragungen zwischen beliebigen 2 Kanälen zu unterstützen.

+0

Hey, aber transferFrom und transferTo haben mit FileChannel zu tun! Ich spreche von SocketChannel und DatagramChannel hier für die Vernetzung :( – chrisapotek

+0

@chrisapotek ein SocketChannel ist sowohl ein WriteableByteChannel und ein ReadableByteChannel, also .... someFileChannel.transferFrom (someSocketChannel, pos, count)/someFileChannel.transferTo (pos, count, someSocketChannel) Ich habe nur die Netty-Wrapper selbst verwendet, aber das sollte funktionieren – eSniff

+1

Die TransferXxx ist die Standard-API für die Offenlegung von DMA-artigen Funktionen.In der Oracle HotSpot JRE ab Version 7 ist sie nur für Dateien und Sockets implementiert. Ich denke nicht, dass es zwischen User-Space-Speicher-Puffer und Socket (dh RDMA) funktionieren würde.Der Code hat Erweiterungspunkte und wenn ich nicht irre, können neue Kanaltypen von Provider-Bibliotheken von Dritten hinzugefügt werden. – ddimitrov

Verwandte Themen