Linux AIO / io_submit / io_getevents / on fifo(命名管道)

Linux AIO / io_submit / io_getevents / on fifo(命名管道)

我必须将大量数据写入管道。我可以使用 Linux io_submit/io_getevents调用写入命名管道吗?或者它仅为常规文件定义。我试图找到任何解释 AIO 通过管道的文档,但找不到。有人可以帮忙吗?

我主要关心的aio_offsetstruct iocb.如果将偏移量为 8096 的数据包安排在偏移量为 4096 的数据包之前进行读/写会怎样?

答案1

Linux AIO 不仅限于常规文件 - 它用于块设备特殊文件。但我预计 AIO 写入不能在管道上使用,因为管道无法查找。

IOCB_CMD_PWRITE

pwrite() 将从 buf 开始的缓冲区中写入 count 个字节到文件描述符 fd 的偏移量 offset 处。文件偏移量未更改。

fd 引用的文件必须能够查找。

AIO 的要点是能够对块设备的多个直接 IO 写入(或读取)进行排队,而无需使用线程。

为了提高管道上批量传输的性能,我建议将管道缓冲区大小从 4kB 增加到不超过 64kB...不过 64kB 已经是现代 Linux 上的默认值。

相关内容