iotop zeigt 1,5 MB / s Schreibgeschwindigkeit an, aber alle Programme haben 0,00 B / s

18

Ich verstehe die iotopAusgabe nicht: Sie zeigt ~ 1,5 MB / s Schreibgeschwindigkeit (oben rechts), aber alle Programme haben 0,00 B / s. Warum?

Bildbeschreibung hier eingeben

Das Video wurde genommen , während ich den Inhalt eines Ordners mit einem paar Millionen von Dateien zu löschen verwenden perl -e 'for(<*>){((stat)[9]<(unlink))}' , auf Kubuntu 14.04.3 LTS x64.

iotopwurde mit gestartet sudo iotop.

Franck Dernoncourt
quelle

Antworten:

22

Die von iotop angezeigten Informationen werden nicht in gleicher Weise für einzelne Prozesse und für das gesamte System erfasst. Die "tatsächlichen" globalen Zahlen sind nicht die Summe der prozessbezogenen Zahlen (das ist, was "insgesamt" ist).

Alle Informationen stammen aus dem proc-Dateisystem .

  • Für jeden Prozess liest iotop Daten aus , insbesondere die Werte und . Dies sind die Anzahl von Bytes übergeben und Systemaufrufen (einschließlich Varianten wie , , , , etc.)./proc/PID/iorcharwcharreadwritereadvwritevrecvsend
  • Die globalen "tatsächlichen" Werte werden gelesen /proc/vmstat, insbesondere die pgpginund pgpgoutWerte. Diese messen die zwischen dem Kernel und der Hardware ausgetauschten Daten (genauer gesagt die Daten, die von der Block-Device-Schicht im Kernel gemischt werden).

Es gibt viele Gründe, warum sich die Daten pro Prozess und die Daten der Blockgeräte-Schicht unterscheiden. Im Speziellen:

  • Zwischenspeichern und Puffern bedeuten, dass E / A-Vorgänge auf einer Ebene möglicherweise nicht zur gleichen Zeit oder genauso oft auf der anderen Ebene stattfinden. Beispielsweise werden aus dem Cache gelesene Daten als Lesevorgänge des auf sie zugreifenden Prozesses gewertet, es gibt jedoch keine entsprechenden Lesevorgänge von der Hardware (die bereits früher stattgefunden haben, möglicherweise im Auftrag eines anderen Prozesses).
  • Die Daten auf Prozessebene umfassen Daten, die über Pipes, Sockets und andere Ein- / Ausgaben ausgetauscht werden, bei denen keine zugrunde liegende Festplatte oder ein anderes Blockgerät beteiligt ist.
  • Die Daten auf Prozessebene berücksichtigen nur Dateiinhalte, keine Metadaten.

Dieser letzte Unterschied erklärt, was Sie hier sehen. Das Entfernen von Dateien wirkt sich nur auf Metadaten aus, nicht auf Daten. Der Prozess schreibt also nichts. Es kann sein, dass Verzeichnisinhalte gelesen werden, um die zu löschenden Dateien aufzulisten, aber das ist klein genug, um unbemerkt einen Bildlauf durchzuführen.

Ich glaube nicht, dass Linux eine Möglichkeit bietet, Dateimetadaten-Updates zu überwachen. /sys/fsBei einigen Dateisystemen können Sie die E / A pro Dateisystem über die Einträge unter überwachen . Ich glaube nicht, dass Sie Metadaten-E / A für bestimmte Prozesse berücksichtigen können. Dies wäre im Allgemeinen sehr kompliziert, da mehrere Prozesse dazu führen könnten, dass dieselben Metadaten gelesen oder geändert werden.

Gilles 'SO - hör auf böse zu sein'
quelle
1
Ganz nette Antwort, danke. Würden Sie eine zuverlässigere Methode empfehlen, um die Entwicklung der Ausgabe zu verfolgen?
Rui F Ribeiro
1
@RuiFRibeiro Sie können beobachten, welche Datei rm -rgerade verarbeitet wird strace, da die Reihenfolge der Durchquerung in jedem Verzeichnis etwas unvorhersehbar ist. Wenn in diesem Dateisystem nur ein einziger massiver Vorgang ausgeführt wird und es nicht zu viele feste Links gibt, können df -iSie sehen, wie viele Dateien verarbeitet wurden.
Gilles 'SO- hör auf böse zu sein'