La libreria libioil
può essere utilizzata per migliorare le prestazioni delle operazioni di lettura e scrittura su DFuse da applicazioni che utilizzano libc. La libreria aggira il kernel intercettando le chiamate di lettura e scrittura POSIX dall'applicazione e gestirle direttamente nello spazio utente.
Utilizzo di libioil
Per utilizzare la libreria di intercettazione, imposta LD_PRELOAD
in modo che punti alla libreria condivisa nella directory di installazione di DAOS:
LD_PRELOAD=/usr/lib64/libioil.so
Ad esempio:
$ dd if=/dev/zero of=./foo bs=1G count=20
20+0 records in
20+0 records out
21474836480 bytes (21 GB, 20 GiB) copied, 45.6925 s, 470 MB/s
$ LD_PRELOAD=/usr/lib64/libioil.so dd if=/dev/zero of=./bar bs=1G count=20
20+0 records in
20+0 records out
21474836480 bytes (21 GB, 20 GiB) copied, 15.735 s, 1.4 GB/s
È anche possibile collegare le applicazioni alla libreria di intercettazione al compilatore con il flag -lioil
.
Per valutare il rendimento utilizzando la libreria di intercettazione, consulta Considerazioni sul rendimento e Testare il rendimento.
Monitorare l'attività
Per attivare i report sulle attività per la libreria di intercettazione, imposta la variabile di ambiente D_IL_REPORT
. Restituisce un breve riepilogo dell'attività nel distruttore della biblioteca condivisa, in genere quando un programma esce.
Il valore assegnato a D_IL_REPORT
definisce il numero di chiamate di lettura e scrittura da registrare in stderr. Per registrare tutte le chiamate, imposta il valore su -1
. Per stampare il riepilogo solo al termine del programma, imposta il valore su 0
.
Ad esempio:
$ D_IL_REPORT=1 LD_PRELOAD=/usr/lib64/libioil.so dd if=/dev/zero of=./bar bs=1G count=5
[libioil] Intercepting write of size 1073741824
5+0 records in
5+0 records out
5368709120 bytes (5.4 GB, 5.0 GiB) copied, 4.13708 s, 1.3 GB/s
$ D_IL_REPORT=3 LD_PRELOAD=/usr/lib64/libioil.so dd if=/dev/zero of=./bar bs=1G count=5
[libioil] Intercepting write of size 1073741824
[libioil] Intercepting write of size 1073741824
[libioil] Intercepting write of size 1073741824
5+0 records in
5+0 records out
5368709120 bytes (5.4 GB, 5.0 GiB) copied, 4.18626 s, 1.3 GB/s
$ D_IL_REPORT=-1 LD_PRELOAD=/usr/lib64/libioil.so dd if=/dev/zero of=./bar bs=1G count=5
[libioil] Intercepting write of size 1073741824
[libioil] Intercepting write of size 1073741824
[libioil] Intercepting write of size 1073741824
[libioil] Intercepting write of size 1073741824
[libioil] Intercepting write of size 1073741824
5+0 records in
5+0 records out
5368709120 bytes (5.4 GB, 5.0 GiB) copied, 4.12114 s, 1.3 GB/s
Alcuni programmi, inclusa la maggior parte delle utilità GNU del pacchetto coreutils
, hanno una funzione di distruttore per chiudere stderr all'uscita. Ciò significa che, sebbene la libreria di intercettazione funzioni per molti comandi di base come cp e cat, non è possibile visualizzare il riepilogo generato dalla libreria di intercettazione.