.png)
パイプに大量のデータを書き込む必要があります。
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 ではすでにデフォルトになっています。