Heim  >  Artikel  >  System-Tutorial  >  Analyse der CPU-Nutzungsmetriken!

Analyse der CPU-Nutzungsmetriken!

WBOY
WBOYOriginal
2024-06-01 21:18:08485Durchsuche

Richtig, ich spreche hier von der „%CPU“-Metrik, die jeder überall und in jedem Leistungsüberwachungsprodukt verwendet. Verwenden Sie den Befehl top(1), um es anzuzeigen.
Man könnte meinen, 90 % CPU-Auslastung bedeutet:
Analyse der CPU-Nutzungsmetriken!
Und tatsächlich könnte es heißen:
Analyse der CPU-Nutzungsmetriken!
Blockiert bedeutet, dass der Prozessor bei der Verarbeitung von Anweisungen keine Fortschritte macht, normalerweise weil der Prozessor auf Speichereingaben/-ausgaben wartet. Das Verhältnis, das ich oben gezeichnet habe (zwischen beschäftigt und festgefahren), ist das, was ich oft in realen Produktionsumgebungen sehe. Es kann sein, dass Sie quasi im Stillstand sind und es nicht einmal wissen.

Was bedeutet das für dich? Wenn Sie wissen, wie viel von Ihrer CPU blockiert ist, können Sie Leistungsoptimierungsbemühungen zwischen Codereduzierung und Speicher-I/O-Vorgängen steuern. Jeder, der sich Gedanken über die CPU-Leistung macht, insbesondere in einer Cloud, die Ressourcen automatisch basierend auf der CPU skaliert, würde davon profitieren, wenn er wüsste, wo %CPU ins Stocken gerät.

Was ist eigentlich die CPU-Auslastung?

Das Maß, das wir als CPU-Auslastung bezeichnen, ist eigentlich „Nicht-Leerlaufzeit“: das heißt, die Zeit, in der die CPU keine Leerlauf-Threads ausführt. Ihr Betriebssystemkernel (was auch immer es ist) verfolgt diese Metrik normalerweise während Kontextwechseln. Wenn ein nicht inaktiver Prozess mit der Ausführung beginnt und dann für 100 Millisekunden anhält, geht der Kernel davon aus, dass die CPU für diesen gesamten Zeitraum weiterhin verwendet wird.

Diese Metrik ist so alt wie Time-Sharing-Systeme. Der Leitcomputer der Apollo-Mondlandefähre, ein bahnbrechendes Time-Sharing-System, nannte seinen Leerlauf-Thread „DUMMY JOB“. Die Ingenieure verfolgten die Zyklen, die zum Ausführen des Leerlauf-Threads benötigt wurden, im Vergleich zu den Zyklen, die zum Ausführen der eigentlichen Aufgabe erforderlich waren, als Maß für die Leistung des Computers Ein wichtiger Indikator für die Nutzung.

Was stimmt also nicht mit diesem Indikator?

Heutzutage sind CPUs viel schneller als der Hauptspeicher und der Wartespeicher macht einen großen Teil dessen aus, was immer noch als „CPU-Auslastung“ bezeichnet wird. Wenn Sie eine hohe %CPU-Zahl sehen, denken Sie vielleicht, dass der Prozessor der Flaschenhals ist (d. h. das CPU-Paket unter dem Kühlkörper und dem Lüfter), obwohl in Wirklichkeit diese DRAM-Module der Flaschenhals sind.

Die diesbezügliche Situation wird immer ernster. Lange Zeit haben Prozessorhersteller die Taktraten stärker erhöht als DRAM die Zugriffslatenzen erhöht hat. Dies ist die sogenannte „CPU-DRAM-Lücke“. Diese Situation stabilisierte sich um das Jahr 2005, als 3-GHz-Prozessoren eingeführt wurden. Seitdem verwendeten Prozessoren mehr Kerne und Hyper-Threading, um die Leistung zu verbessern, und verwendeten Multi-Socket-Konfigurationen, die alle höhere Anforderungen an das Speichersubsystem stellten. Prozessorhersteller versuchen, diesen Speicherengpass durch den Einsatz größerer und intelligenterer CPU-Caches sowie schnellerer Speicherbus- und Verbindungstechnologien zu verringern. Aber wir befinden uns immer noch im Großen und Ganzen im Stillstand.

Wie kann ich angeben, was die CPU tatsächlich verarbeitet?

Könnte auch Performance Monitoring Counters (PMC) verwenden: Dies ist ein Hardware-Zähler, der mit Linux Perf und anderen Tools gelesen werden kann. Zum Beispiel das gesamte System 10 Sekunden lang messen:

# perf stat -a — sleep 10
Performance counter stats for ‘system wide’:
641398.723351      task-clock (msec)         #  64.116 CPUs utilized         (100.00%)
379,651      context-switches          #    0.592 K/sec                 (100.00%)
51,546      cpu-migrations           #    0.080 K/sec                 (100.00%)
13,423,039       page-faults              #    0.021 M/sec
1,433,972,173,374      cycles                  #    2.236 GHz                  (75.02%)
<not>      stalled-cycles-frontend
<not>      stalled-cycles-backend
1,118,336,816,068      instructions              #    0.78  insns per cycle          (75.01%)
249,644,142,804       branches               #   389.218 M/sec                (75.01%)
7,791,449,769       branch-misses            #  3.12% of all branches          (75.01%)
10.003794539 seconds time elapsed</not></not>

Eine wichtige Kennzahl hierbei sind Anweisungen pro Zyklus (d. h. IPC), die zeigt, wie viele Anweisungen wir durchschnittlich pro CPU-Taktzyklus ausführen. Einfach ausgedrückt: Je höher der Wert, desto besser. Die 0,78 im obigen Beispiel hören sich gut an (in 78 % der Fälle ausgelastet), aber nicht, wenn man bedenkt, dass der IPC bei der Höchstgeschwindigkeit des Prozessors 4,0 beträgt. Dies wird auch als 4-weit bezeichnet, was sich auf den Befehlsabruf-/-dekodierungspfad bezieht. Dies bedeutet, dass die CPU pro Taktzyklus vier Befehle zurückziehen (abschließen) kann. Ein IPC von 0,78 auf einem 4-Wide-System bedeutet also, dass die CPU mit 19,5 % ihrer maximalen Geschwindigkeit läuft. Die neuen Intel Skylake-Prozessoren sind 5-breit.

Es gibt Hunderte weitere PMCs, mit denen Sie sich weiter vertiefen können: Sie können Stagnationsperioden anhand verschiedener Typen direkt messen.

In der Cloud

如果你在虚拟环境中,可能无法访问PMC,这要看虚拟机管理程序是否为访客(guest)支持PMC。我最近写过一篇文章:《EC2的PMC:测量IPC》,表明了如今PMC如何可用于基于Xen的AWS EC2云上面的专用主机类型。

实际对策

如果你的IPC

如果你的IPC > 1.0,你可能是指令密集型。想方设法减少代码执行:消除不必要的工作和缓存操作等。CPU火焰图是一款很适合开展这项调查的工具。至于硬件调优,不妨试一试更快的时钟频率和数量更多的核心/超线程。

性能监测产品应该能告诉你什么?

每一款性能工具应该显示IPC以及%CPU。或者将%CPU分解成指令完成周期与停滞周期,比如%INS和%STL。

面向Linux的tiptop(1)可按进程显示IPC:

tiptop –                 [root]
Tasks: 96 total,    3 displayed                                 screen   0: default
 
PID [ %CPU] %SYS  P   Mcycle   Minstr  IPC %MISS %BMIS  %BUS COMMAND
3897   35.3   28.5    4   274.06   178.23 0.65   0.06  0.00   0.0     java
1319+   5.5    2.6   6    87.32   125.55 1.44   0.34  0.26  0.0    nm-applet
900    0.9  0.0    6    25.91    55.55 2.14   0.12  0.21     0.0     dbus-daemo
CPU使用率具有误导性的其他理由

让CPU使用率具有误导性的不仅仅是内存停滞周期。其他因素包括如下:

  • 温度过高导致处理器停滞。
  • 睿频加速(Turboboost)导致时钟频率不一。
  • 内核因speedstep导致时钟频率不一。
  • 平均值方面的问题:1分钟内的使用率为80%,隐藏了100%的突发使用率。
  • 自旋锁:CPU被使用,有很高的IPC,但是应用程序在处理指令方面没有合理的进展。
结束语

CPU使用率已成为一个极具误导性的度量指标:它包括了等待主内存的周期,而这类周期在现代工作负载中占了大头。如果使用额外的度量指标,你就能搞清楚%CPU到底意味着什么,包括每个周期指令(IPC)。IPC 1.0可能意味着指令密集型。我在之前的一篇文章中介绍了IPC,包括介绍了衡量IPC所需要的性能监控计数器(PMC)。 显示%CPU的性能监控产品还应该显示PMC度量指标,解释那个值意味着什么,那样才不会误导最终用户。比如说,它们可以一并显示%CPU及IPC,以及/或指令完成周期与停滞周期。有了这些度量指标,开发人员和操作人员才能决定如何才能更好地调优应用程序和系统。

Das obige ist der detaillierte Inhalt vonAnalyse der CPU-Nutzungsmetriken!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn