Linux AIO / io_submit / io_getevents / en fifo (canalizaciones con nombre)

Linux AIO / io_submit / io_getevents / en fifo (canalizaciones con nombre)

Tengo que escribir muchos datos en una tubería. ¿Puedo usar las llamadas de Linux io_submit/io_geteventspara escribir en Named Pipes o está definido solo para archivos normales? Intenté encontrar algún documento que explique el AIO sobre tuberías, pero no pude. ¿Alguien puede ayudar aquí?

Lo que más me preocupa es el aio_offsetcampo en struct iocb. ¿Qué sucede si un paquete de datos con desplazamiento 8096 está programado para lectura/escritura antes que un paquete de datos con desplazamiento 4096?

Respuesta1

Linux AIO no se limita sólo a archivos normales:poderser utilizado en archivos especiales del dispositivo de bloque. Sin embargo, espero que las escrituras AIO no se puedan usar en tuberías, debido a que las tuberías no son capaces de realizar búsquedas.

IOCB_CMD_PWRITE

pwrite() escribe hasta contar bytes desde el búfer comenzando en buf en el descriptor de archivo fd en el desplazamiento. El desplazamiento del archivo no se modifica.

El archivo al que hace referencia fd debe ser capaz de buscar.

El objetivo de AIO es poder poner en cola múltiples escrituras (o lecturas) de IO directas en un dispositivo de bloque sin tener que usar subprocesos.

Para mejorar el rendimiento de las transferencias masivas a través de una tubería, sugeriría aumentar el tamaño del buffer de la tubería de 4kB a no más de 64kB... excepto que 64kB ya es el valor predeterminado en Linux moderno.

información relacionada