問題タブ [zero-copy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - クライアントとサーバーがファイルの読み取り/書き込みに何らかのプロトコルを使用するアプリケーションでゼロコピーを実装する方法
Javaを使用することで、ヘッダー情報を追加してファイルを読み書きする必要があります。クライアントが 1 つのファイルを書きたい場合と同様に、最初にヘッダー情報 (長さ、ファイル情報など) を DataOutputStream で送信し、次に実際のファイル コンテンツを送信します。
私のファイル コンテンツは、アプリケーション レベルでは必要ありません。同じソケット チャネルでゼロ コピーを実装することは可能ですか? ファイルのヘッダー情報を転送してからファイル コンテンツを転送できます。
この場合、ゼロコピーを実装するにはどうすればよいですか。
c - Linux にはゼロコピーがありますか? スプライスまたはsendfile?
splice が導入されたとき、sendfile が splice に基づいて再実装されたことがカーネル リストで議論されました。スプライス SLICE_F_MOVE のドキュメントには次のように記載されています。
コピーする代わりにページを移動してみてください。これはカーネルへのヒントにすぎません。カーネルがページをパイプから移動できない場合、またはパイプ バッファがフル ページを参照していない場合でも、ページはコピーされる可能性があります。このフラグの最初の実装にはバグがありました。そのため、Linux 2.6.21 以降では何もしません (ただし、splice() 呼び出しでは引き続き許可されます)。将来的には、正しい実装が復元される可能性があります。
ということは、Linux にはソケットに書き込むためのゼロコピー方式がないということでしょうか? それとも、これはある時点で修正され、何年もの間誰もドキュメントを更新していませんでしたか? 最新の 3.x カーネル バージョンのいずれかで、sendfile または splice のいずれかにゼロ コピー実装がありますか?
Google はこのクエリに対する回答を持っていないので、vmsplice と splice または sendfile を単純な古い書き込みよりも使用する利点があるかどうかを知りたがっている次の貧弱なシュマックのために、stackoverflow の質問を作成しています。
java - Channels.newChannel() は、実際の ZeroCopy を達成するのに役立ちます
zeroCopy 操作で Channels.newChannel(OutputStream/InputStream) を使用することに疑問があります。zeroCopy として機能しますか。最初のヘッダー部分(ファイルとユーザー関連情報)を送信してからファイルコンテンツを送信する必要があるなど、いくつかの制限があります。テストのために、BufferedOutputStreamもオーバーライドしますが、fileChannel.transferTo呼び出しでオーバーライドメソッドを呼び出しています...そのような状況(ヘッダー+コンテンツ)でzeroCopyを達成する方法を教えてください。
テストコードの一部:
routing - netfilter - PRErouting ゼロ コピー?
環境
Debian 64 ビット カスタム カーネル 3.14-3.16
質問
ポート フォワーディングについて多くのことを読んだ後、nftable/iptables が splice (またはその他のもの) を使用してゼロ コピーを実行し、パケットが事前ルーティング ルールにのみ一致する場合にパケットを宛先にルーティングするかどうかを知りたいと思います。
私の仮定は、「はい、もちろん、彼らはシステム内のそのような重要なツールを最適化したに違いありません」です。しかし、私はまだ尋ねています。
ありがとう