iotop pokazuje 1,5 MB / s zapisu na dysku, ale wszystkie programy mają 0,00 B / s

18

Nie rozumiem iotopdanych wyjściowych: pokazuje ~ 1,5 MB / s zapisu na dysku (prawy górny róg), ale wszystkie programy mają 0,00 B / s. Dlaczego?

wprowadź opis zdjęcia tutaj

Film został wzięty jako ja usuwanie zawartości folderu z kilku milionów plików z wykorzystaniem perl -e 'for(<*>){((stat)[9]<(unlink))}' , na Kubuntu 14.04.3 LTS x64.

iotopzostał uruchomiony przy użyciu sudo iotop.

Franck Dernoncourt
źródło

Odpowiedzi:

22

Informacje wyświetlane przez iotop nie są gromadzone w ten sam sposób dla poszczególnych procesów i dla całego systemu. „Rzeczywiste” liczby globalne nie są sumą liczb na proces (to jest „suma”).

Wszystkie informacje są zbierane z systemu plików proc .

  • Dla każdego procesu iotop odczytuje dane , w szczególności wartości i . Są to liczba bajtów w minęły i wywołań systemowych (w tym warianty, takie jak , , , , itd.)./proc/PID/iorcharwcharreadwritereadvwritevrecvsend
  • Odczytywane są globalne „rzeczywiste” wartości /proc/vmstat, w szczególności wartości pgpgini pgpgout. Mierzą one dane wymieniane między jądrem a sprzętem (a dokładniej są to dane przetasowane przez warstwę urządzenia blokowego w jądrze).

Istnieje wiele powodów, dla których dane dla poszczególnych procesów i dane warstwy urządzenia blokowego są różne. W szczególności:

  • Buforowanie i buforowanie oznaczają, że operacje we / wy na jednej warstwie mogą nie zachodzić w tym samym czasie lub tyle samo razy na drugiej warstwie. Na przykład dane odczytane z pamięci podręcznej są rozliczane jako odczyt z procesu, który uzyskuje do nich dostęp, ale nie ma odpowiedniego odczytu ze sprzętu (co już wcześniej miało miejsce, być może w imieniu innego procesu).
  • Dane na poziomie procesu obejmują dane wymieniane na potokach, gniazdach i innych wejściach / wyjściach, które nie wymagają dysku lub innego urządzenia blokowego.
  • Dane na poziomie procesu uwzględniają tylko zawartość pliku, a nie metadane.

Ta ostatnia różnica wyjaśnia, co tu widzisz. Usunięcie plików wpływa tylko na metadane, a nie dane, więc proces nic nie zapisuje. Być może odczytuje zawartość katalogu, aby wyświetlić listę plików do usunięcia, ale jest wystarczająco mała, aby przewijać ją niezauważalnie.

Nie sądzę, że Linux oferuje sposób monitorowania aktualizacji metadanych plików. W /sys/fsniektórych systemach plików można monitorować operacje wejścia / wyjścia dla poszczególnych systemów plików. Nie sądzę, aby można było rozliczać operacje we / wy metadanych względem określonych procesów, byłoby to bardzo skomplikowane w ogólnym przypadku, ponieważ wiele procesów może powodować odczyt lub zmianę tych samych metadanych.

Gilles „SO- przestań być zły”
źródło
1
Całkiem niezła odpowiedź, dziękuję. Czy doradziłbyś bardziej niezawodny sposób śledzenia ewolucji wyników?
Rui F Ribeiro,
1
@RuiFRibeiro Możesz sprawdzić, który plik rm -rjest aktualnie przetwarzany, wprowadzając stracego, ale nie da to bardzo przydatnego oszacowania procentu ukończenia, ponieważ kolejność przechodzenia w każdym katalogu jest nieco nieprzewidywalna. Jeśli w tym systemie plików dzieje się tylko jedna ogromna operacja i nie ma w niej zbyt wielu twardych łączy, oglądanie df -ipowie ci, ile plików zostało przetworzonych.
Gilles „SO- przestań być zły”