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 S
oben). 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.
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
und dann rennen
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.
quelle