Wie kann ich die tatsächliche Verwendung einer Multicore-Hyperthreading-fähigen CPU ermitteln?
Betrachten wir zum Beispiel eine 2-Kern-CPU, die 4 virtuelle Kerne ausdrückt.
Eine einzelne Thread-Workload wird jetzt zu 100% angezeigt top
, da ein Kern der virtuellen Kerne vollständig verwendet wird. Die CPU und top
arbeiten wie erwartet, als gäbe es 4 echte Kerne.
Bei zwei Threads werden die Dinge jedoch schwierig: Wenn alles gut funktioniert, werden sie auf die beiden realen Kerne abgestimmt, sodass wir eine Auslastung von 200% haben: Zweimal 100% und zwei virtuelle Kerne im Leerlauf und nutzen die gesamte verfügbare CPU-Leistung . Scheint mir in Ordnung zu sein.
Wenn die beiden Threads jedoch auf einem einzelnen realen Kern ausgeführt würden, würden sie zweimal 100% verwenden, was einer Auslastung des virtuellen Kerns von 200% entspricht. Auf der realen Seite wäre dies jedoch ein Kern, der seine Leistung auf die beiden Threads verteilt, die dann nur die Hälfte der gesamten CPU-Leistung verbrauchen.
Die von angezeigten Nutzungsnummern top
können daher nicht zur Messung der gesamten CPU-Arbeitslast verwendet werden.
Ich frage mich auch, wie Hyperthreading zwei virtuelle auf einem realen Kern balanciert. Wenn zwei Threads unterschiedlich viele Zyklen benötigen, würden sich die virtuellen Kerne so anpassen, dass beide eine 100% ige Last aufweisen, selbst wenn sich die tatsächliche Last unterscheidet?
quelle
Antworten:
Martin Tegtmeier von Oracle hat einen interessanten Blog-Beitrag über dieses letzte Jahr geschrieben: https://blogs.oracle.com/solaris/cpu-utilization-of-multi-threaded-architectures-explained-v2
Die kurze Antwort; Hyperthreading beeinträchtigt die Fähigkeit von top, die prozentualen Anteile an CPU-Auslastung / CPU-Leerlauf insgesamt zu melden.
Im schlimmsten Fall könnte eine 2-Kern-CPU mit 4 virtuellen Kernen, die 2 Threads mit 100% Auslastung pro Kern ausführt, die CPU nahezu sättigen. (Abhängig von der Verwendung des Ausführungsports können nur Threads ausgeführt werden, die völlig unterschiedliche Computerressourcen auf der CPU verwenden, ohne die Leistung des aktuellen Threads zu beeinträchtigen.) In diesem Fall meldet top jedoch weiterhin 50% Leerlauf.
quelle
Die Kernauslastung unterscheidet sich stark von der Belastung des Systems. Die Kernauslastung zeigt nur an, wie viel der Kern etwas berechnet oder auf Anweisungen wartet. Es kann 100% sein, was einer bestimmten Zeit entspricht, zu der die CPU etwas berechnet.
Die Last ist jedoch eine andere Sache. Die Last wird im Allgemeinen gemessen, um festzustellen, ob ein Prozess auf eine Ressource warten muss oder nicht. Wenn Prozesse nicht auf Ressourcen warten, sehen Sie ein sehr leistungsfähiges System. Aber manchmal sehen Sie langsame Systeme, aber eine geringe CPU-Auslastung. Dies bedeutet im Allgemeinen, dass einige Prozesse auf eine Ressource warten und die CPU nicht freigeben. Für diese Art von Szenario wird keine hohe CPU-Auslastung angezeigt, aber das System ist möglicherweise weit über seiner Kapazität.
In einem Linux-System ist der Lastdurchschnitt ein berechneter Wert, um die Gesamtleistung eines Systems zu messen. Der Wert des Lastdurchschnitts sollte mit den parallelen Rechenressourcen verglichen werden, um genau zu sein. Wenn ein System mit 4 physischen Kernen einen Lastdurchschnitt von 4 oder mehr hat, können wir mit Sicherheit sagen, dass einige Prozesse auf eine Ressource warten.
Es ist nicht wichtig, ob die CPU-Auslastung 100 oder 10 Prozent beträgt. Der Lastdurchschnitt kann bis zu 200 oder 300 betragen. In diesen Fällen reagiert das System kaum.
Unter normalen Betriebsbedingungen sollte der durchschnittliche Serverlast die Anzahl der Kerne für eine lange Dauer nicht überschreiten. Kurze Spitzen sind meiner Meinung nach nicht wichtig. 3 Zahlen, die Sie in einer
w
Ausgabe sehen, sind load av. für 1/5/15 Minuten.quelle
Meiner Meinung nach ist keine der oben genannten Antworten zufriedenstellend.
Ich denke, der Artikel, auf den ich mich unter folgendem Link beziehe, ist gut darauf ausgerichtet, diese Frage zu beantworten: http://perfdynamics.blogspot.ch/2014/01/monitoring-cpu-utilization-under-hyper.html
ZITAT:
Tatsächlich bin ich mir ziemlich sicher, dass das Betriebssystem auf jedem virtuellen Kern 100% erreichen kann, daran besteht kein Zweifel. Ich habe gerade ein:
Und ich kann Ihnen versichern, dass meine 8 virtuellen Kerne und 4 physischen Kerne zu 100% CPU-Auslastungen waren. Und ich habe definitiv keine 8 Kerne auf meiner Maschine.
Kurz gesagt, Sie können Folgendes annehmen, wenn die Gesamt-CPU-Auslastung über 100% liegt, höchstens und höchstwahrscheinlich ziemlich genau, wenn Sie genau 100% des physischen Kerns verwenden. Das heißt, wenn Sie physischen CORE 1 in Betriebssystem CPU 1 und CPU 2 aufgeteilt haben. Und auf CPU 1 haben Sie eine Gesamtauslastung von 50% und auf CPU 2 haben Sie eine Gesamtauslastung von 50%, höchstwahrscheinlich im wirklichen Leben Druck auf eine Gesamtauslastung von 100% auf diese CPU ausüben. Sie haben es ausgereizt.
Aber natürlich hat das Betriebssystem in seinen Systemüberwachungstools keine Ahnung, dass es Ihnen eine Illusion verkauft. Unter dem Gesichtspunkt des Betriebssystems und der Art und Weise, wie es Ressourcen verwaltet, wird es nur glauben, dass jeder dieser beiden virtuellen Kerne immer noch zu 50 Prozent inaktiv ist. Wenn also mehr Aufgaben ausgeführt werden müssen, wird versucht, sie gleichmäßig auf diese beiden Kerne zu verteilen . Wenn Sie also über 100% der CPU-Auslastung hinausgehen, müssen während eines Zeitraums der CPU-Auslastung immer Arbeiten in der Warteschlange ausgeführt werden, die sich nie geändert haben, um einen Zeitsclice für die CPU zu erhalten. Irgendwann wird es klappen, aber es gibt immer einige Threads, die tatsächlich nicht einmal ausgeführt werden, obwohl sie ausgeführt werden sollen.
Vielen Dank
quelle