Libreria di intercettazione

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.