Frage Wie sind CPU-Zeit und CPU-Auslastung gleich?


Auf der Wikipedia-Seite für CPU-Zeit, es sagt

Die CPU-Zeit wird in Taktzeiten oder Sekunden gemessen. Oft ist es so   nützlich, um die CPU-Zeit als Prozentsatz der CPU-Kapazität zu messen,   Das wird als CPU-Nutzung bezeichnet.

Ich verstehe nicht, wie eine Zeitdauer durch einen Prozentsatz ersetzt werden kann. Wenn ich es ansehe top, nicht %CPU Erzähl es mir MATLAB benutzt 2,17 meiner Kerne?

  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

Um die CPU-Auslastung besser zu verstehen, wie berechne ich die CPU-Auslastung selbst?


21
2017-12-03 00:27


Ursprung


Drücken Sie '1', während Sie 'oben' geöffnet haben, um mehr Granularität pro Kern zu erhalten. - Peter
Das ist die Nummer eins (1). - Michael Hampton♦


Antworten:


CPU-Zeit wird in zugewiesen diskret Zeitscheiben (Ticks). Für eine bestimmte Anzahl von Zeitscheiben ist die CPU beschäftigt, zu anderen Zeiten ist es nicht (was durch den Leerlaufprozess repräsentiert wird). Im folgenden Bild ist die CPU beschäftigt 6 der 10 CPU-Slices. 6/10 = .60 = 60% der Betriebszeit (und es würde daher 40% Leerlaufzeit geben).

enter image description here

EIN Prozentsatz ist definiert als "eine Zahl oder Rate, die ausgedrückt wird als eine bestimmte Anzahl von Teilen von etwas in 100 Teile unterteilt". In diesem Fall sind diese Teile diskrete Zeitscheiben, und die etwas belegten Zeitscheiben sind die Zeitscheiben für die Leerlaufzeit - die Rate der Zeitabschnitte, in denen die Zeit zwischen den Besetztzeiten liegt.

Da CPUs in GHz arbeiten (Milliardstel von Zyklen pro Sekunde). Das Betriebssystem zerlegt diese Zeit in kleinere Einheiten, die Ticks genannt werden. Sie sind nicht wirklich 1/10 Sekunde. Die Tick-Rate in Windows ist 10 Millionen Ticks in einer Sekunde und in Linux ist es sysconf(_SC_CLK_TCK) (normalerweise 100 Ticks pro Sekunde).

In etwas wie top, die beschäftigten CPU-Zyklen werden dann weiter in Prozente von Dingen wie Benutzerzeit und Systemzeit unterteilt. Im top Unter Linux und perfmon in Windows erhalten Sie oft eine Anzeige, die über 100% geht, weil die Summe 100% * die_Nummer_von_cpu_cores beträgt.

In einem Betriebssystem ist es das Scheduler Job, um diese wertvollen Schichten Prozessen zuzuordnen, so ist der Scheduler das, was dies meldet.


32
2017-12-03 00:55



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


Die CPU-Zeit ist die Zeit, in der der Prozess die CPU verwendet - die Konvertierung in einen Prozentsatz erfolgt durch Division durch die Menge der verstrichenen Echtzeit.

Also, wenn ich einen Prozess habe, der 1 Sekunde CPU-Zeit über einen Zeitraum von 2 Sekunden verwendet, benutzt er 50% einer CPU.

Im Falle Ihres MATLAB-Prozesses geben 217% an, dass im zweiten Abtastintervall 2,17 Sekunden CPU-Zeit pro Sekunde verbraucht wurden - effektiv, indem Sie 2 CPU-Kerne monopolisieren und einige Drittel davon benötigen.


12
2017-12-03 00:37



Oder es könnte 25% von 8 CPUs und einen Teil von einem neunten verwenden. - Bob Jarvis