Como um fluxo de E / S em um determinado diretório ou arquivo do Linux pode ser monitorado para bytes lidos / gravados?

1

Eu tenho um problema com o monitoramento de um fluxo de E / S em um diretório específico: a quantidade de bytes lidos e escritos durante um período especificado.

Eu tenho tentado usar iostat , inotifywait e inotifywatch , mas infelizmente eles medem apenas a atividade no diretório (abrir, fechar, modificar, etc), eles não fornecem informações sobre os bytes lidos e gravados .

    
por user1856533 22.01.2013 / 07:59

2 respostas

4

Uma opção é usar o sistema audit . Algo como:

sudo auditctl -a exit,always -F dir=/the/directory -p rw

E, em seguida, analise o audit.log para as chamadas do sistema de E / S.

    
por 22.01.2013 / 12:06
3

Até onde sei, não existe uma ferramenta padrão capaz de fazer isso. No entanto, posso pensar em várias maneiras de conseguir isso, cada uma com suas desvantagens.

Se você souber qual processo acessará o arquivo / diretório e tiver certeza de que esse processo faz apenas poucas ou nenhuma outra E / S, será possível analisar /proc/PID/io e determinar a quantidade de bytes lidos / gravados, observando rchar / wchar (qualquer E / S) ou read_bytes / write_bytes (disco E / S) ou mesmo syscr / syscw (número de chamadas de sistema semelhantes a leitura () / gravação ()). / p>

Se você não souber qual processo acessará o arquivo / diretório (mas tem certeza de que esses processos fazem apenas poucas ou nenhuma outra E / S), observe o local usando o recurso inotify , determine os PIDs e então faça o mecanismo descrito no parágrafo anterior.

Se o processo determinado faz outras E / S, fica um pouco mais complicado. Você tem que strace e somar as compensações de todas as chamadas de leitura / gravação de todos os descritores de arquivos apontando para o seu arquivo / diretório.

Todas essas soluções não são precisas para um único byte, mas podem fornecer uma boa estimativa.

    
por 22.01.2013 / 09:28