Quello che mi sembra per capire:Differenza tra POSIX AIO e libaio su Linux?
POSIX AIO
API sono prototipati in <aio.h>
e si collegano con il vostro programma di librt (-lrt), mentre i libaio
API in <libaio.h>
e il vostro programma è collegato con libaio (-laio).
Quello che non riesco a capire: Maniglia
1.Does il kernel l'uno di questi metodi in modo diverso?
2. Il flag O_DIRECT
è obbligatorio per l'utilizzo di entrambi?
Come accennato in this post, libaio funziona bene senza O_DIRECT
quando si utilizza libaio
.Okay, capito, ma:
Secondo il R.Love Linux sistema di programmazione libro, Linux supporta AIO (che presumo sia POSIX AIO) su file regolari solo se aperto con O_DIRECT
. Ma un piccolo programma che ho scritto (utilizzando aio.h, collegato con -lrt) che chiama aio_write
su un file aperto senza il flag O_DIRECT
funziona senza problemi.
Grazie per la risposta.Quindi per POSIX AIO, O_DIRECT è * non * obbligatorio, ma per kerenel AIO, è (per assicurarsi che non si verifichi alcun fallback)? Questo sembra contraddire ciò che è menzionato nel libro.Nel codice del kernel, VFS ha questi aio_read/write funzioni chiamate (?) da aio_read/write chiamate di sistema (che è POXIS AIO e non kernel AIO). – itisravi
Non ci sono aio_ * syscalls (http://linux.die.net/man/2/syscalls). Le funzioni di aio_ * che vedi in vfs sono probabilmente parte del kernel aio. le funzioni * user level * aio_ * non mappano 1: 1 alle chiamate di sistema. – Arvid
@Arvid Ti piacerebbe approfondire in che tipo di circostanze io_submit() sta bloccando? (si cita a volte potrebbe bloccare il disco) – ARH