As informações mostradas pelo iotop não são coletadas 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 valores 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 , especificamente os valores e . Estes são o número de bytes no transmitidos e chamadas do sistema (incluindo variantes, tais como , , , , etc.).
/proc/PID/io
rchar
wchar
read
write
readv
writev
recv
send
- Os valores globais "reais" são lidos
/proc/vmstat
, especificamente os valores pgpgin
e pgpgout
. Eles medem os dados trocados entre o kernel e o hardware (mais precisamente, esses são os dados embaralhados pela camada de dispositivo de bloco no kernel).
Há muitas razões pelas quais os dados por processo e os dados da camada do dispositivo de bloco diferem. Em particular:
- Armazenamento em cache e buffer significam que a E / S acontecendo em uma camada pode não estar acontecendo ao mesmo tempo, ou o mesmo número de vezes, na outra camada. Por exemplo, os dados lidos do cache são contabilizados como lidos do processo que os acessa, mas não há leitura correspondente do hardware (o que já aconteceu anteriormente, possivelmente em nome de outro processo).
- Os dados no nível do processo incluem dados trocados em tubos, soquetes e outras entradas / saídas que não envolvem um disco subjacente ou outro dispositivo de bloco.
- Os dados no nível do processo representam apenas o conteúdo do arquivo, não os metadados.
Essa última diferença explica o que você está vendo aqui. A remoção de arquivos afeta apenas os metadados, não os 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 é pequeno o suficiente para passar despercebido.
Acho que o Linux não oferece nenhuma maneira de monitorar as atualizações de metadados de arquivos. Você pode monitorar a E / S por sistema de arquivos através de entradas em /sys/fs
alguns sistemas de arquivos. Eu não acho que você possa contabilizar a E / S de metadados em processos específicos, seria muito complicado no caso geral, pois vários processos podem estar causando a leitura ou alteração dos mesmos metadados.
Gilles 'SO- parar de ser mau'
fonte
rm -r
está sendo processado nostrace
momento, mas isso não fornecerá uma estimativa muito útil da porcentagem de conclusão, pois a ordem de travessia em cada diretório é algo imprevisível. Se houver apenas uma operação massiva nesse sistema de arquivos e não houver muitos links físicos envolvidos, a observaçãodf -i
informará quantos arquivos foram processados.