So überprüfen Sie, ob ein Prozess mit hoher E/A-Nutzung ordnungsgemäß ausgeführt wird

So überprüfen Sie, ob ein Prozess mit hoher E/A-Nutzung ordnungsgemäß ausgeführt wird

Ich verwalte derzeit einen Computercluster für wissenschaftliche Berechnungen. Einige Prozesse im Cluster benötigen viel E/A. Jetzt habe ich einen solchen Prozess gefunden:

  1. Sein Status ändert sich schnell zwischen DOWN und RUN und seine CPU-Auslastung ändert sich schnell zwischen 1 % und 100 %.
  2. In topder Ausgabe beträgt iowait 0 % und idle etwa 90 %

Ich denke, dass dieser Prozess einige Probleme aufweisen könnte, aber der Prozessbesitzer behauptet, dass er ordnungsgemäß läuft, da er weiterhin Daten auf die Festplatten schreibt.

Mehr Info:

  1. Der Prozess schreibt Daten auf eine Remote-Festplatte, die auf /home gemountet ist
  2. Der Prozess basiert auf leicht modifiziertem Code. Die ursprüngliche Software ist multithreadingfähig, benötigt aber sehr viel Speicher. Der modifizierte Code benötigt mehr Festplatte und weniger Speicher, aber derjenige, der den Code modifiziert, weiß nichts über Multithreading.
  3. Kleine Tests zeigen, dass der Code das richtige Ergebnis liefern kann

Fragen:

  1. warum nutzt der Prozess nicht 100 % der CPU und wenn das am Warten auf E/A liegt, warum beträgt die E/A-Wartezeit 0 %?
  2. Wie kann beurteilt werden, ob im Prozess Probleme vorliegen und um welche Art von Problemen es sich handelt?

Antwort1

 The process is writing data to a remote disk mounted on /home

Das ist wahrscheinlich Ihre Antwort. Der Prozessstatus Dist nichtRUNTER, es istununterbrochener Schlafund bedeutet normalerweise, dass noch einige I/O-Vorgänge abgeschlossen werden müssen. Da Sie eine Netzwerkfreigabe haben, wird diese unter Umständen nicht als wartende I/O-Vorgänge angezeigt und verbraucht möglicherweise nicht viel CPU, während Ihr System wartet.

Wenn die Netzwerkfreigabe jedoch aufgrund der Art und Weise, wie die Anwendung schreibt, aufgrund des Netzwerks oder aufgrund der Leistung des Dateiservers langsam ist, laufen die Dinge für Sie und Ihre Anwendung sehr langsam.

Wie finden Sie heraus, ob Ihre Anwendung oder die Netzwerkfreigabe die Ursache ist? Ganz einfach: Testen Sie die Leistung der Netzwerkfreigabe mit den anderen Tools und anderen Nutzungsmustern. Kopieren Sie viele Daten hin und her, von /home an einen anderen Ort und zurück, führen Sie einige Benchmarks aus, wie z. B. iozone, testen Sie die reine Netzwerkleistung mit iperfund ähnliches.

Wenn diese zufriedenstellende Ergebnisse liefern, prüfen Sie, was Ihre Anwendung macht.

Oft liegt der Grund jedoch woanders. Ohne etwas über Ihr System zu wissen, würde ich vermuten, dass Sie die NFS-Mount-Einstellungen anpassen müssen. Aber im Moment bleibt es nur eine Vermutung, da ich nicht weiß, ob Sie überhaupt NFS verwenden.

Antwort2

Wenn die CPU nicht ausgelastet ist, wartet Ihr Prozess vermutlich auf etwas Externes. Ich könnte mir vorstellen, dass Sie dies gut verstehen, wenn Sie sich ansehen, welche Systemaufrufe mit strace am längsten dauern.

Versuchen Sie andernfalls mithilfe eines Profilers herauszufinden, was der Code macht.

Verwendet Ihr Code mmap'd IO? Ich denke, das wird möglicherweise nicht als iowait-Zeit für Ihren Prozess gemeldet, sondern als Systemprozess, der viel Speicherplatz verbraucht, da er Seiten auf den Datenträger schreibt.

verwandte Informationen