iotop mostrando 1,5 MB / s de gravação em disco, mas todos os programas possuem 0,00 B / s

18

Eu não entendo a iotopsaída: mostra ~ 1,5 MB / s de gravação no disco (canto superior direito), mas todos os programas têm 0,00 B / s. Por quê?

insira a descrição da imagem aqui

O vídeo foi filmado quando eu estava excluindo o conteúdo de uma pasta com alguns milhões de arquivos usando perl -e 'for(<*>){((stat)[9]<(unlink))}' , no Kubuntu 14.04.3 LTS x64.

iotopfoi lançado usando sudo iotop.

Franck Dernoncourt
fonte

Respostas:

22

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/iorcharwcharreadwritereadvwritevrecvsend
  • Os valores globais "reais" são lidos /proc/vmstat, especificamente os valores pgpgine 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/fsalguns 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
11
Resposta bastante agradável, obrigado. Você recomendaria uma maneira mais confiável de acompanhar a evolução da produção?
Rui F Ribeiro
11
@RuiFRibeiro Você pode observar qual arquivo rm -restá sendo processado no stracemomento, 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ção df -iinformará quantos arquivos foram processados.
Gilles 'SO- stop be evil'