Richtige Interpretation der Systemlast auf einem 4-Kern-8-Thread-Prozessor

13

Wie wir alle wissen, bedeutet eine Auslastung von 1,00 auf einem einzelnen Prozessor eine Auslastung von 100% . Analog wäre eine 4,00- Last auf einem Quad-Core 100% .

Wie soll ich die Auslastung eines 4-Kern-8-Thread-Prozessors interpretieren? Wann erreiche ich die maximale CPU-Kapazität? Um 4.00 oder 8.00 ?

Bartek Szablowski
quelle

Antworten:

17

Nicht sicher, aber meistens am 1.00*n_cpu.

Die Auslastung bedeutet Folgendes: Wenn auf einem einzelnen CPU-System mehrere Prozesse vorhanden sind, werden diese scheinbar parallel ausgeführt. Das stimmt aber nicht. Was praktisch passiert: Der Kernel gibt einem Prozess 1/100 Sekunde und bricht ihn dann mit einem Interrupt ab. Und gibt die nächste 1 / 100stel Sekunde an einen anderen Prozess.

Praktisch wird die Frage, "welcher Prozess unser nächstes 1 / 100stel Sekundenintervall erhalten soll", durch eine komplexe Heuristik entschieden. Es wird als benannte Aufgabe Scheduling .

Natürlich sind Prozesse, die blockiert sind, zum Beispiel darauf warten, dass ihre Daten von der Festplatte gelesen werden, von dieser Aufgabenplanung ausgenommen.

Welche Last sagt: Wie viele Prozesse warten derzeit auf ihren nächsten 1/100 Sekunden-Zeitraum? Natürlich ist es ein Mittelwert. Dies liegt daran, dass Sie in a mehrere Zahlen sehen können cat /proc/loadavg.

Die Situation in einem Multi-CPU-System ist etwas komplexer. Es gibt mehrere CPUs, deren Zeitrahmen mehreren Prozessen zugewiesen werden können. Das macht die Aufgabenplanung ein wenig - aber nicht zu viel - komplexer. Aber die Situation ist dieselbe.

Der Kernel ist intelligent, er versucht, die Systemressourcen für eine optimale Effizienz gemeinsam zu nutzen, und das ist in der Nähe (es gibt kleinere Optimierungsprobleme, zum Beispiel ist es besser, wenn ein Prozess so lange wie möglich auf derselben ausgeführt wird cpu wegen Caching-Überlegungen, aber sie spielen dort keine Rolle). Dies liegt daran, dass, wenn wir Load 8 haben, dies bedeutet, dass tatsächlich 8 Prozesse auf ihre nächste Zeitscheibe warten. Wenn wir 8 cpus haben, können wir diese Zeitscheiben eins zu eins an den cpus weitergeben und somit wird unser System optimal genutzt.

Wenn Sie eine sehen top , sehen Sie, dass die Anzahl der tatsächlich ausgeführten Prozesse überraschend niedrig ist: Es handelt sich um die dort markierten Prozesse R. Sogar auf einem nicht wirklich Hardcore-System ist es oft unter 5. Dies liegt teilweise daran, dass die Prozesse, die auf ihre Daten von den Festplatten oder vom Netzwerk warten, ebenfalls angehalten werden (markiert mit Soben). Die Last zeigt nur die CPU-Auslastung.

Es gibt auch Tools zum Messen der Festplattenlast, obwohl sie zumindest für die Überwachung der CPU-Auslastung wichtig sein sollten, aber in unserer professionellen Sysadmin-Welt ist dies nicht so bekannt.


Windows-Tools teilen die Last häufig mit der tatsächlichen CPU-Nummer. Dies führt dazu, dass einige professionelle Windows-Systemadministratoren die Systemlast in diesem durch die CPU aufgeteilten Sinne verwenden. Sie haben nicht Recht und werden wahrscheinlich glücklicher sein, wenn Sie ihnen dies erklären.


Multicore-CPUs sind praktisch mehrere CPUs auf demselben Siliziumchip. Es gibt keinen Unterschied.

Bei Hyperthread-CPUs gibt es einen interessanten Nebeneffekt: Durch das Laden einer CPU werden die Hyperthread-Paare langsamer. Dies geschieht jedoch auf einer tieferen Ebene, die von der normalen Aufgabenplanung behandelt wird, obwohl dies die prozessbewegenden Entscheidungen des Schedulers beeinflussen kann (und sollte).

Aber aus unserer Sicht - was die Systemlast bestimmt - spielt es keine Rolle.

Peterh: Setzen Sie Monica wieder ein
quelle
4

Da Hyperthreading eigentlich kein 2. Kern ist, wird es niemals einen Kern auf 200% bringen, aber für bestimmte Workloads wird es über 100% hinausgehen.

Ihre maximale Belastung liegt also irgendwo zwischen ca. 4 und 6

(Natürlich kann dies bei Überlastung höher sein, da es tatsächlich ausführbare Prozesse zählt, insbesondere wenn sie auf IO warten.)

JamesRyan
quelle
4

Lastdurchschnitt bedeutet nicht, was Sie denken, dass es bedeutet. Es geht nicht um die sofortige CPU-Auslastung, sondern darum, wie viele Prozesse darauf warten, ausgeführt zu werden. In der Regel das an vielen Dingen, die CPU benötigen, aber nicht immer. Ein häufiger Täter ist ein Prozess, der auf eine E / A-Platte oder ein Netzwerk wartet.

Versuchen Sie, ps -e vProzessstatusflags auszuführen und zu suchen.

state    The state is given by a sequence of characters, for example, "RWNA". The      first character indicates the run state of the process:
D    Marks a process in disk (or other short term, uninterruptible) wait.
I    Marks a process that is idle (sleeping for longer than about 20 seconds).  
L    Marks a process that is waiting to acquire a lock.
R    Marks a runnable process.
S    Marks a process that is sleeping for less than about 20 seconds.
T    Marks a stopped process.
W    Marks an idle interrupt thread.
Z    Marks a dead process (a "zombie").

Dies ist aus der psManpage, so dass Sie dort mehr Details finden - Rund DProzesse sind wahrscheinlich von besonderem Interesse.

Sie können aus den unterschiedlichsten Gründen zu durchschnittlichen Lastspitzen führen, sodass sie kein wirklich gutes Maß für etwas anderes sind als "Ist dieses System ausgelastet?". Sich bei der Zuordnung des Lastdurchschnitts zu den CPU-Kernen zu verzetteln, hilft Ihnen nicht weiter.

Sobrique
quelle
3

Auf einem Linux-System werden nicht nur die Prozesse in der ausführbaren Warteschlange hochgezählt, um die Auslastung zu berechnen, sondern auch diejenigen, die sich in einem unterbrechungsfreien Ruhezustand befinden ( Wikipedia). Dies führt zu einem Anstieg der Auslastung, wenn viele Prozesse auf die Festplatte warten.

przRocco
quelle
Das wusste ich nicht, ich werde es mir merken!
Bartek Szablowski
2

Ich habe einige Experimente mit unserem 24-Kern-Xeon-System (2 Sockel x 12 Kerne) durchgeführt. Die maximale Last beträgt in diesem Fall 48,0, da Linux das Hyperthreading einrichtet.

Sie erhalten jedoch nicht das Äquivalent von 48 Kernen Durchsatz. Was ich beobachtet habe, ist, dass Sie ungefähr 90% des Durchsatzes in den ersten 24 logischen Prozessoren erhalten, dh wenn die Last auf 24.0 läuft. Dann erhalten Sie für die verbleibenden 24 logischen Prozessoren einen zusätzlichen Durchsatz von ca. 10% (die Auslastung beträgt 48,0). Wenn Sie 48 Threads auf den 24 Kernen ausführen, erhalten Sie einen Anstieg von ca. 10-20%, wenn Sie das Hyperthreading aktivieren. Es ist nicht 100% Boost, wie es die Marketing-Leute andeuten würden.

Eine Möglichkeit zum Testen dieser Beobachtung besteht beispielsweise darin, einen Prozess auszuführen, der 48 Threads ausführt (z. B. mit TBB oder einem handgeführten Threading-Modell) und anschließend ausgeführt wird

time numactl --physcpubind=0-23  ./myprocess

und dann rennen

time numactl --physcpubind=0-47  ./myprocess

Letzteres sollte in ca. 10-20% weniger Zeit ausgeführt werden. Wenn Ihr Prozess stark E / A-blockiert ist, ist das Ergebnis möglicherweise anders.

Ersteres deaktiviert das Hyperthreading, indem nur die Threads auf einem einzigen logischen Prozessor (jedes Kerns) ausgeführt werden, während letzteres das Hyperthreading aktiviert, indem die Threads auf zwei logischen Prozessoren (jedes Kerns) ausgeführt werden.

Die Belastung sollte in beiden Fällen mit 48,0 angegeben werden, was, wie Sie sehen, sehr irreführend ist.

Mark Lakata
quelle