2012-08-25 8 views
6

Javaでカーネルバイパスを実行する方法を知りましたか?どこかのこんにちは世界か、これはロケット科学ですか?Javaでカーネルバイパスを使用したネットワーク

+11

これを閉じた人々は、ネットワーキングについては無知です。いいぞ! – chrisapotek

+0

この質問には正当な理由があります。カーネルは、ユーザーAPIと同じ量のパケットスループットを与えません。私は正直なところ、@Makoto、John Palmer、Don Roby、rene、Benにアピールします。 –

答えて

1

「Javaゼロコピーバッファ」または「Java NIO」または「Java Netty」を検索します。

スライドショーは約Nettyで、ゼロコピー:http://www.slideshare.net/danbim/zerocopy-eventdriven-servers-with-nettyです。以下は、Nettyのプロジェクトの例です。

それとも、低いレベルに行くと、あなたがsolarflareを使用している場合について、ここでhttp://www.ibm.com/developerworks/linux/library/j-zerocopy/

+0

それは素晴らしい情報eSniffです。私はJava NIOを使用していますが、カーネルをバイパスしません。 – chrisapotek

+0

私は何年ものうちにjavaでプログラミングしていないので、これ以上の関連性は分かりません。しかし、なぜdownvotesは最近ですか? – eSniff

5

、あなたは私が直接それを使用していない(カーネルバイパスを行うために彼らのAPIを使用することができます読み取ることができjava.nio.channelsクラスを使用することができ、詳細を提供することはできません)。さまざまなハードウェア上で豊富な機能をサポートする29West LBMやIBM LLMなどのメッセージング製品を使用することもできます。

@eSniffに記載されているように、JREにはtransferFrom()/transferTo() APIがあり、これをサポートするシステムではsendfile(2)相当のものが公開されています。 APIのセマンティクスは、任意の2つのチャネル間のDMA転送をサポートするように透過的に実装できるように定義されています。

+0

ねえ、しかしtransferFromとtransferToはFileChannelと関係があります!私はSocketChannelとDatagramChannelについてここではネットワーキングについて話しています。( – chrisapotek

+0

@chrisapotek socketChannelはWritableByteChannelとReadableByteChannelの両方であるため、someFileChannel.transferFrom(someSocketChannel、pos、count)/ someFileChannel.transferTo(pos、count、someSocketChannel – eSniff

+1

transferXxxは、DMAスタイルの機能を公開するための標準APIであり、Oracle HotSpot JREでは、バージョン7以降、ファイルとソケットに対してのみ実装されています。つまり、コードに拡張ポイントがあり、私が間違っていなければ、新しいチャンネルタイプをサードパーティのプロバイダライブラリによって追加することができます。 – ddimitrov

関連する問題