0

重複の可能性:
パイプバッファサイズは4kまたは64kですか?

  1. Linuxでは、パイプへの書き込みに使用できるサイズを指定するヘッダーファイルはどれですか?

  2. 構成可能なサイクルごとにメインアプリケーションのレイテンシーをキャプチャし、そのデータをパイプに書き込みます。別のレポートプロセスがそのパイプを読み取ります。通常、メインアプリケーションは1秒あたり約10,000件のメッセージを交換します。したがって、1秒のサイクルが与えられると、メインアプリケーションはメッセージ交換ごとに10kのレイテンシデータポイントを収集し、それらを1秒の境界のパイプに書き込みます。このシナリオでは、次の質問があります

    • 作成時にパイプのサイズを指定する方法はありますか?パイプに十分な書き込みスペースがあることを確認できますか?
    • パイプへの書き込みは高価ですか?パイプはどのように実装されていますか?パイプへの書き込みは、mmapファイルまたはメモリ内バッファに対して行われますか?
4

1 に答える 1

1
  • 作成時にパイプのサイズを指定する方法はありますか? 多分。Linux 2.6.35以降では、操作でfcntl(2)F_SETPIPE_SZを使用して、パイプバッファーをに設定できます/proc/sys/fs/pipe-max-size。以前のバージョンではありませんが、代わりにソケットメカニズムを使用できると思います。ほとんどの目的では遅くなりますが、wmem_maxまでのバッファリングの量を指定できます。socket(7)を参照してください。また、カーネルメモリの割り当てに対して他の特定の制御があります。
  • パイプへの書き込みは高価ですか? いいえ。ただし、write(2)カーネル呼び出しであるため、可能であればパイプI/Oをバッファリングする必要があります。
  • パイプはどのように実装されていますか?システムバッファキャッシュとの間でデータを転送するカーネルコードを使用します。
  • パイプへの書き込みは、mmapファイルまたはメモリ内バッファに対して行われますか? これはメモリ内のバッファです
于 2012-12-16T22:58:14.987 に答える