Linux AIO / io_submit / io_getevents / fifo (名前付きパイプ)

Linux AIO / io_submit / io_getevents / fifo (名前付きパイプ)

パイプに大量のデータを書き込む必要があります。 io_submit/io_getevents名前付きパイプへの書き込みに Linux 呼び出しを使用できますか、それとも通常のファイルに対してのみ定義されていますか。パイプ上の AIO について説明しているドキュメントを探しましたが、見つかりません。誰か助けていただけませんか。

aio_offset主に、のフィールドについて懸念していますstruct iocb。オフセット 8096 のデータ パケットが、オフセット 4096 のデータ パケットの前に読み取り/書き込み用にスケジュールされた場合はどうなるでしょうか。

答え1

Linux AIOは通常のファイルに限定されるものではなく、できるブロック デバイスの特殊ファイルで使用できます。ただし、パイプはシークできないため、AIO 書き込みはパイプでは使用できないと思います。

IOCB_CMD_PWRITE

pwrite() は、buf から始まるバッファから count バイトまでをオフセット offset のファイル記述子 fd に書き込みます。ファイル オフセットは変更されません。

fd によって参照されるファイルはシーク可能である必要があります。

AIO のポイントは、スレッドを使用せずに、ブロック デバイスへの複数の直接 IO 書き込み (または読み取り) をキューに入れることができることです。

パイプ経由のバルク転送のパフォーマンスを向上させるには、パイプ バッファー サイズを 4kB から 64kB 以下に増やすことをお勧めします...ただし、64kB は最新の Linux ではすでにデフォルトになっています。

関連情報