iotop mostrando 1.5 MB / s de gravação em disco, mas todos os programas têm 0.00 B / s

13

Eu não entendo iotop output: mostra ~ 1.5 MB / s de gravação em disco (canto superior direito), mas todos os programas têm 0.00 B / s. Por quê?

Ovídeofoitiradoporqueeuestavaexcluindooconteúdodeumapastacomalgunsmilhõesdearquivos usando perl -e 'for(<*>){((stat)[9]<(unlink))}' , no Kubuntu 14.04.3 LTS x64.

iotop foi lançado usando sudo iotop .

    
por Franck Dernoncourt 08.12.2015 / 23:17

1 resposta

15

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 valores rchar e wchar . Estes são o número de bytes passados em read e write chamadas do sistema (incluindo variantes como readv , writev , recv , send , etc.).
  • Os valores globais "reais" são lidos em /proc/vmstat , especificamente os valores pgpgin e pgpgout . 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.

    
por 09.12.2015 / 01:58