Wie sind CPU-Zeit und CPU-Auslastung gleich?

23

Auf der Wikipedia-Seite für CPU-Zeit heißt es

Die CPU-Zeit wird in Takten oder Sekunden gemessen. Häufig ist es hilfreich, die CPU-Zeit als Prozentsatz der CPU-Kapazität zu messen, die als CPU-Auslastung bezeichnet wird.

Ich verstehe nicht, wie eine Zeitdauer durch einen Prozentsatz ersetzt werden kann. Wenn ich mir das ansehe top, %CPUsagt mir das nicht , dass MATLAB2.17 meiner Kerne verwendet werden?

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
18118 jasl      20   0 9248400 261528  78676 S 217.2  0.1   8:14.75 MATLAB      

Frage

Wie berechne ich die CPU-Auslastung selbst, um die CPU-Auslastung besser zu verstehen?

Jasmine Lognnes
quelle
Drücken Sie '1', während Sie 'top' geöffnet haben, um die Granularität pro Kern zu erhöhen.
Peter
Das ist die Nummer eins ( 1).
Michael Hampton
Lassen Sie sich von Linux zeigen, wie beschäftigt jeder Prozessor mit dieser Befehlszeilenanforderung ist. mpstat -P ALL 5 3 für Multiprozessor-Status 5 Sekunden 3 Intervalle eingeben. Teilen Sie den Prozentsatz der gemeldeten CPU durch die Anzahl der Kerne, um den durchschnittlichen Prozentsatz der ausgelasteten CPU zu erhalten. iostat -xm 5 3 enter gibt an, wie viele Kerne / CPUs Ihnen zur Verfügung stehen.
Wilson Hauck

Antworten:

32

Die CPU-Zeit wird in diskreten Zeitscheiben (Ticks) zugeordnet. Für eine bestimmte Anzahl von Zeitscheiben ist die CPU ausgelastet, für andere Zeiten nicht (was durch den Leerlaufprozess dargestellt wird). In der Abbildung unten ist die CPU für 6 der 10 CPU-Slices ausgelastet . 6/10 = .60 = 60% der ausgelasteten Zeit (und somit 40% der Leerlaufzeit).

Bildbeschreibung hier eingeben

Ein Prozentsatz ist definiert als "eine Zahl oder Rate, die als eine bestimmte Anzahl von Teilen von etwas ausgedrückt wird, das in 100 Teile unterteilt ist". In diesem Fall handelt es sich bei diesen Teilen um diskrete Zeitscheiben und bei dem Objekt handelt es sich um ausgelastete Zeitscheiben im Vergleich zu Leerlaufzeitscheiben - die Rate der ausgelasteten Zeitscheiben im Vergleich zu Leerlaufzeitscheiben.

Da CPUs in GHz arbeiten (Milliarden von Zyklen pro Sekunde). Das Betriebssystem teilt diese Zeit in kleinere Einheiten auf, die als Ticks bezeichnet werden. Sie sind nicht wirklich eine Zehntelsekunde. Die Tickrate unter Windows beträgt 10 Millionen Ticks pro Sekunde und unter Linux sysconf(_SC_CLK_TCK)(normalerweise 100 Ticks pro Sekunde).

In etwa topwerden die ausgelasteten CPU-Zyklen dann weiter in Prozentsätze von Dingen wie Benutzerzeit und Systemzeit unterteilt. Unter topLinux und Perfmon unter Windows erhalten Sie häufig eine Anzeige, die über 100% hinausgeht. Dies liegt daran, dass die Gesamtsumme 100% * the_number_of_cpu_cores ist.

In einem Betriebssystem ist es die Aufgabe des Schedulers , diese wertvollen Segmente Prozessen zuzuweisen. Daher meldet dies der Scheduler.

Kyle Brandt
quelle
1
Zeitscheiben werden nicht in Milliardstelsekunden gemessen. Sie sind nicht so kurz. Sie liegen mit größerer Wahrscheinlichkeit zwischen 0,1 ms und 10 ms. Die Auflösung von Zeitwerten in APIs entspricht nicht der Rate der Timer-Interrupts. Einige API-Aufrufe in Linux haben Zeiten in Nanosekunden, aber Sie möchten nicht, dass Timer-Interrupts so häufig auftreten. Wenn Sie eine Million Interrupts pro Sekunde hätten, würden Sie die gesamte CPU-Zeit für Kontextwechsel verwenden.
Kasperd
2
Meinen Sie 1000 Zecken? Alle meine Linux-Systeme sind entweder 1000 Ticks (EL5 und EL6) oder 1000 Ticks + Tickless (EL7). Oder meinst du etwas anderes?
Michael Hampton
1
Die Manpage sagt: "Die entsprechende Variable ist veraltet." Ich glaube nicht, dass man sich darauf verlassen kann. Ich habe die Kernelkonfiguration in /boot/config-2.6.32- überprüft, was auch immer es diesen Monat ist ...
Michael Hampton
1
Aha, nein, sie werden nicht gleich gemeldet. CLK_TCK ist ein skalierter Wert, der explizit für den Benutzerbereich bestimmt ist und anscheinend immer 100 ist, unabhängig davon, wie viele Ticks der Kernel tatsächlich verwendet. Einige gute Erklärungen zu SO ( 1 , 2 ) gefunden
Michael Hampton
2
Ich denke auch, dass die Windows "Ticks", auf die sich dieser API-Aufruf bezieht, nicht mit der Windows-Timer-Interrupt-Frequenz identisch sind und daher nicht wirklich vergleichbar sind.
Michael Hampton
14

Die CPU-Zeit ist die Zeit, in der der Prozess die CPU verwendet. Die Umrechnung in einen Prozentsatz erfolgt durch Division durch die verstrichene Echtzeit.

Wenn ich also einen Prozess verwende, der über einen Zeitraum von 2 Sekunden 1 Sekunde CPU-Zeit beansprucht, werden 50% einer CPU beansprucht.

Im Fall Ihres MATLAB-Prozesses geben 217% an, dass im letzten Abtastintervall 2,17 Sekunden CPU-Zeit pro Sekunde verbraucht wurden - effektiv, indem 2 CPU-Kerne monopolisiert und ein Drittel benötigt wurden.

Shane Madden
quelle
5
Oder es könnte 25% von 8 CPUs und einen Teil von einer neunten verwenden.
Bob Jarvis - Wiedereinsetzung von Monica