Lo que parece de entender:Diferencia entre POSIX AIO y libaio en Linux?
POSIX AIO
API se prototipos en <aio.h>
y que enlaza con su programa librtad (-lrt), mientras que los libaio
API en <libaio.h>
y su programa está vinculado con libaio (-laio).
Lo que no puedo averiguar:
1.Does el núcleo manejar la cualquiera de estos métodos de manera diferente?
2.¿Es obligatorio el marcado O_DIRECT
para usar cualquiera de ellos?
Como se mencionó en this post, libaio funciona bien sin O_DIRECT
cuando se utiliza libaio
.Okay, pero entiende:
acuerdo con el sistema Linux de R.Love Programación libro, Linux soporta AIO (que supongo es POSIX AIO) en archivos regulares solo si está abierto con O_DIRECT
. Pero un pequeño programa que escribí (usando aio.h, vinculado con -lrt) que llama a aio_write
en un archivo abierto sin el indicador O_DIRECT
funciona sin problemas.
Gracias por la respuesta.Entonces, para POSIX AIO, O_DIRECT es * no * obligatorio, pero para kerenel AIO, es (para asegurarse de que no ocurra ningún repliegue)? Esto parece contradecir lo que se menciona en el libro. En el código del kernel, VFS tiene estos aio_read/write funciones que se llaman (?) por aio_read/write system calls (que es POXIS AIO y no kernel AIO). – itisravi
No hay aio_ * syscalls (http://linux.die.net/man/2/syscalls). Las funciones aio_ * que ve en vfs son probablemente parte de kernel aio. las funciones * user level * aio_ * no asignan 1: 1 a las llamadas al sistema. – Arvid
@Arvid ¿Podría explicar en qué circunstancias io_submit() está bloqueando? (en algún momento menciona que puede bloquear el disco) – ARH