La biblioteca libioil
se puede usar para mejorar el rendimiento de las operaciones de lectura y escritura en DFuse desde aplicaciones que usan libc. La biblioteca evita el kernel interceptando las llamadas de lectura y escritura de POSIX de la aplicación y atendiéndolas directamente en el espacio de usuario.
Usar libioil
Para usar la biblioteca de intercepción, define LD_PRELOAD
para que apunte a la biblioteca compartida en el directorio de instalación de DAOS:
LD_PRELOAD=/usr/lib64/libioil.so
Por ejemplo:
$ 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
También es posible vincular aplicaciones con la biblioteca de intercepción en tiempo de compilación con la marca -lioil
.
Para evaluar el rendimiento con la biblioteca de intercepción, consulte las secciones Consideraciones sobre el rendimiento y Probar el rendimiento.
Monitorizar la actividad
Para habilitar los informes de actividad de la biblioteca de intercepción, define la variable de entorno D_IL_REPORT
. Devuelve un breve resumen de la actividad en el destructor de la biblioteca compartida, normalmente cuando se cierra un programa.
El valor asignado a D_IL_REPORT
define el número de llamadas de lectura y escritura
que se registrarán en stderr. Para registrar todas las llamadas, asigna el valor -1
. Para imprimir el resumen
solo al salir del programa, asigna el valor 0
.
Por ejemplo:
$ 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
Algunos programas, incluidas la mayoría de las utilidades de GNU del paquete coreutils
, tienen una función de destructor para cerrar stderr al salir. Esto significa que, aunque la biblioteca de interceptación funciona con muchos comandos básicos, como cp y cat, no es posible ver el resumen generado por la biblioteca de interceptación.