A biblioteca libioil
pode ser usada para melhorar o desempenho das operações de leitura e escrita no DFuse a partir de aplicações que usam a libc. A biblioteca ignora o kernel intercetando as chamadas de leitura e escrita POSIX da aplicação e processando-as diretamente no espaço do utilizador.
Usar a libioil
Para usar a biblioteca de interceção, defina LD_PRELOAD
para apontar para a biblioteca partilhada no diretório de instalação do DAOS:
LD_PRELOAD=/usr/lib64/libioil.so
Por exemplo:
$ 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
Também é possível associar aplicações à biblioteca de interceção no momento da compilação com a flag -lioil
.
Para avaliar o desempenho através da biblioteca de interceção, consulte as Considerações sobre o desempenho e Teste o desempenho.
Monitorize a atividade
Para ativar os relatórios de atividade para a biblioteca de interceção, defina a variável de ambiente D_IL_REPORT
. Isto devolve um breve resumo da atividade no destruidor da biblioteca partilhada, normalmente quando um programa é terminado.
O valor atribuído a D_IL_REPORT
define o número de chamadas de leitura e escrita a registar em stderr. Para registar todas as chamadas, defina o valor como -1
. Para imprimir o resumo apenas quando o programa for terminado, defina o valor como 0
.
Por exemplo:
$ 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
Alguns programas, incluindo a maioria dos utilitários GNU do pacote coreutils
, têm uma função destrutora para fechar stderr na saída. Isto significa que, embora a biblioteca de interceção funcione para muitos comandos básicos, como cp e cat, não é possível ver o resumo gerado pela biblioteca de interceção.