Como posso monitorar a E / S de disco em um diretório específico?

10

Eu tenho alguns processos com um nome conhecido que gravam em arquivos em um único diretório. Gostaria de registrar o número de leituras e gravações de blocos de disco durante um período ( não apenas o acesso a arquivos) para testar se uma alteração de parâmetro reduz significativamente a quantidade de E / S. Atualmente estou usando iostat -d -p, mas isso é limitado a toda a partição.

l0b0
fonte
1
Isso é diferente dessas perguntas, porque não estou interessado nos arquivos, mas na quantidade de E / S.
l0b0

Respostas:

10

Sei que isso parecerá simplista e absurdo, mas se você tiver controle sobre os aplicativos em questão (talvez em um ambiente de teste), poderá montar APENAS esse diretório em uma partição própria iostat, etc. etc. sobre isso, e nada mais naquele local.

Se houver unidades físicas envolvidas, você poderá falsificá-lo com uma montagem de loopback à la

dd if=/dev/zero of=/bigdisk/LOOPFILE bs=1024m count=1024m # 1gb loopback file
mke2fs -j /bigdisk/LOOPFILE
mkdir /tmpcopy
mount -o loop /tmpcopy /bigdisk/LOOPFILE
cp -r -p $SPECIALDIR2MONITOR /tmpcopy
umount /tmpcopy
mount -o loop $SPECIALDIR2MONITOR  /bigdisk/LOOPFILE,

Isso não removeria completamente todas as E / S de disco concorrentes, mas tenho certeza que iostata saída seria mais específica para sua necessidade.

dianevm
fonte
3

Eu não acho que exista um caminho direto. Uma maneira de obter os dados desejados seria acessar a árvore de diretórios através de um sistema de arquivos virtual que registra acessos. O Loggedfs é um desses sistemas de arquivos, embora eu não saiba se ele pode mostrar todos os dados nos quais você está interessado. (Caso contrário, provavelmente seria um esforço de codificação modesto para esses dados.)

mkdir /tmp/replica
loggedfs /path/to/directory /tmp/replica
mycommand --root=/tmp/replica
fusermount -u /tmp/replica
Gilles 'SO- parar de ser mau'
fonte
2

Você pode usar a inotifywait -m DIRNAMEpartir das ferramentas inotify .

Tobias Kienzler
fonte
-dnão existe no inotifywait 3.13. Você quer dizer -m?
L0b0 18/03
@ l0b0: oh, eu uso 3.14 do repositório git. desculpa. Mas a página de manual afirma que é a mesma coisa, -mcom a exceção de executar em segundo plano e exigir um arquivo externo.
Tobias Kienzler 18/03/11
também -rpode ser útil
Tobias Kienzler 18/03/11
1
Testei. Sinto muito pelo mal-entendido, mas não estou interessado em quais arquivos (ou mesmo em quantos arquivos) foram acessados, mas na quantidade de E / S.
L0b0 18/03/11
2
Observe que isso é específico do Linux. Os BSDs possuem chamadas de sistema kqueue e pnotify, mas não sei se eles fazem exatamente o que o autor está solicitando.
Shawn J. Goff