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

9

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

    
por l0b0 18.03.2011 / 09:31

3 respostas

10

Eu percebo que isso soará simplista e absurdo, mas se você tiver controle sobre os aplicativos em questão (talvez em um ambiente de teste) você poderia montar APENAS aquele diretório em uma partição própria, então iostat , etc. diga apenas sobre isso e nada mais nesse ponto.

Se houver drives físicos envolvidos, você pode fingir com um loopback monte à 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 de que a saída de iostat seria mais específica para sua necessidade.

    
por 18.03.2011 / 23:02
3

Eu não acho que haja um caminho direto. Uma maneira de obter os dados que você deseja seria acessar a árvore de diretórios por meio de um sistema de arquivos virtual que registra os 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. 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
    
por 18.03.2011 / 21:55
2

Você pode usar inotifywait -m DIRNAME das inotify-tools .

    
por 18.03.2011 / 10:24