Mit der libioil
-Bibliothek lässt sich die Leistung von Lese- und Schreibvorgängen von Anwendungen, die libc verwenden, für DFuse verbessern. Die Bibliothek umgeht den Kernel, indem sie POSIX-Lese- und Schreibaufrufe von der Anwendung abfängt und direkt im Userspace verarbeitet.
libioil verwenden
Wenn Sie die Interception-Bibliothek verwenden möchten, müssen Sie LD_PRELOAD
so festlegen, dass es auf die freigegebene Bibliothek im DAOS-Installationsverzeichnis verweist:
LD_PRELOAD=/usr/lib64/libioil.so
Beispiel:
$ 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, 14.1946 s, 1.5 GB/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, 5.0483 s, 4.3 GB/s
Es ist auch möglich, Anwendungen mit der Interception Library zur Kompilierungszeit mit dem Flag -lioil
zu verknüpfen.
Aktivität im Blick behalten
Wenn Sie Aktivitätsberichte für die Interception Library aktivieren möchten, legen Sie die Umgebungsvariable D_IL_REPORT
fest. Dies gibt eine kurze Zusammenfassung der Aktivitäten im Destruktor der freigegebenen Bibliothek zurück, in der Regel beim Beenden eines Programms.
Der D_IL_REPORT
zugewiesene Wert definiert die Anzahl der Lese- und Schreibaufrufe, die in stderr protokolliert werden sollen. Wenn alle Anrufe protokolliert werden sollen, legen Sie den Wert auf -1
fest. Wenn die Zusammenfassung nur beim Beenden des Programms ausgegeben werden soll, setzen Sie den Wert auf 0
.
Beispiel:
$ D_IL_REPORT=1 LD_PRELOAD=/usr/lib64/libioil.so dd if=/dev/zero of=./bar bs=1G count=20
[libioil] Intercepting write of size 1073741824
20+0 records in
20+0 records out
21474836480 bytes (21 GB, 20 GiB) copied, 5.17297 s, 4.2 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, 1.27362 s, 4.2 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, 1.29935 s, 4.1 GB/s
Einige Programme, einschließlich der meisten GNU-Dienstprogramme aus dem Paket coreutils
, haben eine Destruktorfunktion, um stderr beim Beenden zu schließen. Das bedeutet, dass die Interception Library zwar für viele grundlegende Befehle wie „cp“ und „cat“ funktioniert, die von der Interception Library generierte Zusammenfassung jedoch nicht angezeigt werden kann.