Linux AIO / io_submit / io_getevents / on fifo (pipes nomeados)

Linux AIO / io_submit / io_getevents / on fifo (pipes nomeados)

Eu tenho que escrever muitos dados em um pipe. Posso usar as chamadas do Linux io_submit/io_geteventspara gravar em Named Pipes ou elas são definidas apenas para arquivos regulares. Tentei encontrar qualquer documento que explicasse o AIO sobre pipes, mas não consegui. Alguém pode ajudar aqui.

Principalmente estou preocupado com o aio_offsetcampo em struct iocb. E se um pacote de dados com deslocamento 8096 estiver programado para leitura/gravação antes de um pacote de dados com deslocamento 4096.

Responder1

O Linux AIO não se limita apenas a arquivos regulares - elepodeser usado em arquivos especiais de dispositivos de bloco. Espero que as gravações AIO não possam ser usadas em pipes, porque os pipes não são capazes de buscar.

IOCB_CMD_PWRITE

pwrite() grava para contar bytes do buffer começando em buf até o descritor de arquivo fd em offset offset. O deslocamento do arquivo não é alterado.

O arquivo referenciado por fd deve ser capaz de buscar.

O objetivo do AIO é ser capaz de enfileirar várias gravações (ou leituras) diretas de IO em um dispositivo de bloco sem precisar usar threads.

Para melhorar o desempenho de transferências em massa através de um pipe, eu sugeriria aumentar o tamanho do buffer do pipe de 4kB para não mais que 64kB... exceto que 64kB já é o padrão no Linux moderno.

informação relacionada