問題タブ [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.
c++ - Visual Studio 2010 のファイル転送機能
関数で使用する関数を作成TransmitFile
API
しましrecv
た。プログラムは次のとおりです。
しかし、次のようなエラーが発生します。
ライブラリのリンクの失敗か何かが原因ですか? クライアント ソケットからファイルにデータを受信する API はありますか? また、ゼロ コピー アプローチも実現しますか?
string - 文字列をコピーせずに zmq::message_t に割り当てます
高パフォーマンスの C++ を実行する必要があるため、可能な限りデータのコピーを避ける必要があります。
したがって、文字列バッファーを zmq::message_t オブジェクトにコピーせずに直接割り当てたいと考えています。しかし、送信の成功を回避する文字列の割り当てが解除されているようです。
コードの一部は次のとおりです。
メッセージが送信される前に文字列の割り当てが解除されないようにするにはどうすればよいですか? そして、文字列の割り当てが正確に解除されるのはいつですか?
よろしく
c++ - Intel I/OAT を使用する場合、仮想アドレッシングでデバイスメモリはどこにマップされますか?
async_memcpyを介した DMA ゼロコピー/ゼロサイクル (CPU なし) 転送にIntel I/OATを使用する場合、仮想アドレッシングでデバイスメモリがマップされる場所: カーネルバッファ (カーネル空間) またはユーザーバッファ(ユーザー空間)?
また、最新の x86_64 CPU (CPU コアがチップセットのノースブリッジなしで RAM に高速アクセスできる場合) で I/OAT を使用する意味はありますか?
http://www.intel.com/content/www/us/en/wireless-network/accel-technology.html
linux - NettyのゼロコピーはOSレベルのゼロコピーと違うのですか?
Nettyのドキュメントには、ビルドインに「透過的なゼロ コピー」機能があると書かれていることがわかりましたByteBuffer
。しかし、読んだ後、カーネル空間とユーザー空間の切り替えについては言及されておらず、バッファの再利用についてのみ言及されていることに気付きました。
では、Netty の「ゼロ コピー」機能は、OS レベルの「ゼロ コピー」(ユーザー空間メモリからカーネル空間メモリへのコピーを削減することを意味します) とは異なるのでしょうか?
java - Java を使用して 2 つ以上のソケット間でゼロ コピー データ転送を実行する
2つ以上のソケット間でゼロコピーデータ転送を実行する優れたJavaライブラリ/ APIパッケージを知っている人はいますか? Java の NIO API は、それぞれ java.nio.channels.FileChannel.transferTo メソッドと java.nio.channels.FileChannel.transferFrom メソッドを使用して、ディスクからソケットへ、またはその逆にゼロ コピー データ転送を実行できることを知っています。ただし、Java ソケットからソケットへのゼロ コピー転送はサポートされていないようです。さらに、システム コール スプライス (ファイル記述子からパイプへ、またはその逆にデータを転送できる) を実行できる Java ライブラリ/API は、できれば Linux プラットフォームでプラスになります。
返信ありがとうございます。
さらに、以前のゼロ コピーに関するブログや、 http://www.ibm.com/developerworks/library/j-zerocopy/などの他の有益なサイトのほとんどを読みました。ただし、上記の問題は解決されていないようです。
linux-kernel - mmap を使用した奇妙な動作
Technexion ディストリビューションに基づく Angtsrom 組み込み Linux カーネル v.2.6.37 を使用しています。DM3730 SoC、TDM3730 モジュール、カスタム ベースボード。CodeSourcery ツールチェーン v. 2010-09.50
これが私のシステムのデータフローです: http://i.stack.imgur.com/kPhKw.png
FPGA は増分データを生成し、カーネルは GPMC DMA 経由でそれを読み取ります。GPMC パック サイズ = 512 データ サンプル。バッファ サイズ = 61440 32 ビット サンプル (= 60 RAM ページ)。
DMA バッファは dma_alloc_coherent によって割り当てられ、mmap() 呼び出しによってユーザー空間にマップされます。ユーザー アプリケーションは、DMA バッファからデータを直接読み取り、fwrite() 呼び出しを使用して NAND に保存します。ユーザーは一度に 4096 サンプルのデータを読み取ります。
そして、ファイルに何が表示されますか? http://i.stack.imgur.com/etzo0.png 赤線はリングバッファの最初の境界を意味します。おっと!小さなパック (~16 サンプル) は境界の後に隠れ始めます。それらの値は正確に = 対応するバッファ位置の「古い」値です。しかし、なぜ?16 サンプルは、DMA パック サイズおよびユーザー読み取りパック サイズよりもはるかに小さいため、ポインターの不一致はあり得ません。
mmap() 機能がどこかに隠れていると思います。MAP_LOCKED、MAP_POPULATE、MAP_NONBLOCK など、mmap() のさまざまなフラグを試しましたが、成功しませんでした。私はこの振る舞いを完全に誤解しています:(
PS mmap() とゼロコピー アクセスの代わりにカーネルから copy_to_user() を使用している場合、そのような動作はありません。