約5MBのバッファを持つFIFOパイプを作成したいと思います。 LinuxのデフォルトのFIFOパイプバッファの最大値は約1MBであることがわかります。 /proc/sys/fs/pipe-max-sizeにあることを確認しました。
私は次のように設定してみました。
sudo sysctl fs.pipe-max-size=4194304
次に、値が実際に変更されたことを確認します。
$ cat /proc/sys/fs/pipe-max-size
4194304
その後、新しいFIFOパイプを作成しましたが、パフォーマンスが向上することを感じませんでした。以前の1MBのFIFOパイプと同じ速度で満たされているようです。だから私の新しいFIFOパイプに実際に4MBのバッファがあるかどうかはわかりません。
1)システムFIFOパイプバッファの最大値を増やし、2)このバッファ最大値を使用するFIFOパイプを作成するにはどうすればよいですか?
ベストアンサー1
コマンドは、デフォルトのバッファサイズではなく最大バッファサイズを変更します。
~からPipe(7) マンページ:
/proc/sys/fs/pipe-max-size
(Linux 2.6.35以降)CAP_SYS_RESOURCE機能を持たないユーザーが単一のパイプに対して設定できる最大サイズ(バイト単位)。
そして:
Linux 2.6.11以降、パイプ容量は16ページです(つまり、ページサイズが4096バイトのシステムでは65,536バイト)。 Linux 2.6.35以降、デフォルトのパイプ容量は16ページですが、
fcntl
(2)とF_GETPIPE_SZ
操作を使用してF_SETPIPE_SZ
容量を照会して設定できます。
したがって、fcntl(F_SETPIPE_SZ)
オープンパイプでシステムコールを呼び出さない限り、基本容量である64 kBを維持します。これを行うには、システムコールバインディングを提供する言語(C / C ++、Python、PHP、perl ...ただsh / bashを除く)を使用する必要があります。