As informações mostradas pela iotop não são reunidas da mesma maneira para processos individuais e para o sistema como um todo. Os números globais “reais” não são a soma dos números por processo (é o que é “total”).
Todas as informações são coletadas do sistema de arquivos proc .
- Para cada processo, o iotop lê dados de
/proc/PID/io
, especificamente os valoresrchar
ewchar
. Estes são o número de bytes passados emread
ewrite
chamadas do sistema (incluindo variantes comoreadv
,writev
,recv
,send
, etc.). - Os valores globais "reais" são lidos em
/proc/vmstat
, especificamente os valorespgpgin
epgpgout
. Estes medem os dados trocados entre o kernel e o hardware (mais precisamente, são os dados arrastados pela camada de dispositivos de bloco no kernel).
Existem muitas razões pelas quais os dados por processo e os dados da camada de dispositivo de bloco diferem. Em particular:
- O armazenamento em cache e o armazenamento em buffer significam que a ocorrência de E / S em uma camada pode não estar acontecendo ao mesmo tempo ou no mesmo número de vezes na outra camada. Por exemplo, os dados lidos do cache são contabilizados como uma leitura do processo que os acessa, mas não há leitura correspondente do hardware (que já aconteceu anteriormente, possivelmente em nome de outro processo).
- Os dados em nível de processo incluem dados trocados em pipes, soquetes e outras entradas / saídas que não envolvem um disco subjacente ou outro dispositivo de bloco.
- Os dados em nível de processo contabilizam apenas o conteúdo dos arquivos, não os metadados.
Essa última diferença explica o que você está vendo aqui. A remoção de arquivos afeta apenas metadados, não dados, portanto, o processo não está gravando nada. Pode estar lendo o conteúdo do diretório para listar os arquivos a serem excluídos, mas isso é pequeno o suficiente para que ele possa rolar sem ser notado.
Eu não acho que o Linux ofereça alguma maneira de monitorar atualizações de metadados de arquivos. Você pode monitorar a E / S por sistema de arquivos por meio de entradas em /sys/fs
para alguns sistemas de arquivos. Não acho que você possa contabilizar E / S de metadados em processos específicos, o que seria muito complicado no caso geral, já que vários processos poderiam estar causando a leitura ou alteração dos mesmos metadados.