2010-12-29 3 views
4

Ich habe eine Analyse, die über eine andere Anzahl von Prozessen parallelisiert werden kann. Es wird erwartet, dass die Dinge sowohl IO- als auch CPU-intensiv sind (DNA-Alignment mit sehr hohem Durchsatz, wenn jemand neugierig ist.)Wird ein IO-blockierter Prozess eine 100% ige CPU-Auslastung in der "obersten" Ausgabe anzeigen?

Das System, das dies ausführt, ist ein 48-Kern-Linux-Server.

Die Frage ist, wie man die optimale Anzahl von Prozessen so bestimmt, dass der Gesamtdurchsatz maximiert wird. An einem gewissen Punkt werden die Prozesse vermutlich IO-gebunden, so dass das Hinzufügen von mehr Prozessen keinen Nutzen bringt und möglicherweise schädlich ist.

Kann ich von den Standard-Systemüberwachungstools sagen, wann dieser Punkt erreicht wurde? Würde die Ausgabe von top (oder einem anderen Tool) es mir ermöglichen, zwischen einem IO-gebundenen und einem CPU-gebundenen Prozess zu unterscheiden? Ich bin verdächtig, dass ein Prozess, der auf IO blockiert wird, immer noch 100% CPU-Auslastung anzeigt.

+1

Im Allgemeinen sollte die Anzahl der nicht blockierten Threads der Anzahl der Prozessoren entsprechen. Ist es möglich, nicht blockierende IO zu verwenden? Es kann Dinge vereinfachen, wenn Sie es in Ihre Architektur integrieren können. –

Antwort

1

Selbst ein einzelner IO-gebundener Prozess zeigt selten eine hohe CPU-Auslastung, da das Betriebssystem seinen IO geplant hat und normalerweise nur darauf wartet, dass es abgeschlossen wird. Daher kann top nicht genau zwischen einem IO-gebundenen Prozess und einem nicht IO-gebundenen Prozess unterscheiden, der die CPU nur periodisch verwendet. Tatsächlich kann ein System, das fürchterlich überlastet ist mit allen IO-gebundenen Prozessen, die kaum in der Lage sind, etwas zu erreichen, eine sehr geringe CPU-Auslastung aufweisen.

Wenn Sie nur top verwenden, können Sie in der Tat nur Threads/Prozesse hinzufügen, bis die CPU-Auslastung abfällt, um die ungefähre Konfiguration für eine bestimmte Maschine zu bestimmen.

1

Sie können Tools wie iostat und vmstat verwenden, um zu zeigen, wie viel Zeit die Ausgaben für E/A blockiert haben. Es ist normalerweise nicht schädlich, mehr Prozesse hinzuzufügen, als Sie benötigen, aber der Nutzen nimmt ab. Sie sollten den Durchsatz gegenüber Prozessen als Maß für die Gesamteffizienz messen.

6

Wenn ein Prozess bei IO blockiert ist, wird er nicht ausgeführt, daher wird keine Zeit dafür berechnet. Wenn ein anderer Prozess ausgeführt werden kann, wird dieser stattdessen ausgeführt. Wenn dies nicht der Fall ist, wird die Zeit als "IO-Wartezeit" gezählt, die als globale Statistik berechnet wird.

IO warten wäre eine nützliche Sache zu überwachen. Es erscheint im oberen Bereich als etwas wie% iw. Sie können es mit Werkzeugen wie iostat und vmstat detaillierter überwachen. Serverfault ist möglicherweise ein besserer Ort, um danach zu fragen.

Verwandte Themen