Was ist der richtige Weg, um Ihre CPU-Geschwindigkeit unter Linux anzuzeigen?

20

Ich habe zwei Befehle gefunden, um Informationen über meine CPU auszugeben: cat /proc/cpuinfound lscpu. /proc/cpuinfozeigt, dass meine CPU-Geschwindigkeit 2,1 GHz beträgt, wohingegen lspcues 3167 Mhz sind. Welches ist korrekt?

Dies ist meine genaue Ausgabe von cat /proc/cpuinfoungefähr meiner Prozessorgeschwindigkeit:

model name  : Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz

Und das ist aus lscpu:

CPU MHz:               3225.234

(Aus irgendeinem Grund werden die lscpuAusgänge jedes Mal anders ausgegeben und variieren zwischen 3100 und 3300 MHz.)

Rohan
quelle
3
Sie /proc/cpuinfosollten auch eine Zeile mit cpu MHZ: ...der aktuellen Geschwindigkeit haben. Der 2.1 nach dem @ist die Grundgeschwindigkeit (ohne Turbo Boost).
don_crissti
Was ist Turbo-Boost? Heißt das, meine Geschwindigkeit liegt tatsächlich bei 3,2 GHz?
Rohan
2
Es ist Intels Art, bei Bedarf "aufs Gas zu gehen". Ich vermute, deine aktuelle Geschwindigkeit lag zu der Zeit tatsächlich bei 3,2 GHz, du könntest es auch zB für cpu0 mit cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq(als root) versuchen .
don_crissti
2
Turbo Boost ist eine Technologie, die die Frequenz des Prozessors in Abhängigkeit von der Anzahl der verwendeten Kerne ändert. Wenn Sie nur wenige Kerne verwenden, wird die Frequenz erhöht, um die Leistung zu steigern und die Temperatur niedrig zu halten. Sie können die Frequenztabellen von Turbo Boost überprüfen, um zu überprüfen, wie sie ansteigen.
Jaime

Antworten:

34

Um die aktuelle Geschwindigkeit jedes Kerns zu sehen, mache ich Folgendes:

watch -n.1 "cat /proc/cpuinfo | grep \"^[c]pu MHz\""

Hinweis:

Wenn Ihr watchBefehl nicht mit Intervallen von weniger als einer Sekunde ausgeführt werden kann, ändern Sie das Intervall wie folgt:

watch -n1 "cat /proc/cpuinfo | grep \"^[c]pu MHz\""

Dies zeigt die cpu speedvon jedem Kern in Echtzeit.

Wenn Sie den folgenden Befehl ein oder mehrere Male von einem anderen Terminal aus ausführen, können Sie die Geschwindigkeitsänderung mit dem obigen watchBefehl sehen, sofern SpeedStep( Cool'n'Quietfür AMD) aktiviert ist .

echo "scale=10000; 4*a(1)" | bc -l &

(Mit diesem Befehl werden 10000 Stellen bcberechnet pi.)

Timothy Martin
quelle
Ich musste das .in Ihrem ersten Befehl entfernen , damit es funktioniert:watch -n1 "cat /proc/cpuinfo | grep \"^[c]pu MHz\""
n1k31t4
1
Dies ist eine raffinierte Methode, aber ich würde davor warnen, alle 0,1 Sekunden einen Befehl auszuführen, der sich auf den CPU-Geschwindigkeitsbericht auswirkt. 1 Sekunde ist genug.
Lizardx
@Lizardx Normalerweise stimme ich zu, aber in diesem Fall kann sich die CPU-Geschwindigkeit schneller als in einem 1-Sekunden-Intervall erhöhen und verringern, was zu einem Mangel an sichtbaren Geschwindigkeitsänderungen führt. Da moderne Prozessoren so schnell sind, dachte ich zunächst, dass meine SpeedStepnicht funktioniert, wenn 1 Sekunde als Intervall verwendet wird. Zumindest .5sollte verwendet werden, wenn man nicht so schnell fahren will wie .1 second(obwohl ich immer noch viele Geschwindigkeitsänderungen mit dieser Geschwindigkeit verpasst habe.
Timothy Martin
1
Versuchen Sie, oben mit den Timern zu laufen, die auf weniger als 1 Sekunde eingestellt sind. Sie können die CPU-Auslastung sichtbar sehen. Vermutlich sehen Sie tatsächlich das System, das Ihre CPU-Geschwindigkeitsinformationen generiert. Das heißt, die Generierung der CPU-Geschwindigkeitsausgabe verursacht die CPU-Bewegung. Ich finde, dass alles, was kürzer als eine Sekunde ist, direkt die CPU-Geschwindigkeit verursacht, die Sie beobachten. Zum Beispiel ist top bei -d5 1% der CPU. Bei -d2 sind es ungefähr 5%. Vielleicht täuschen Sie sich selbst vor, dass die CPU etwas tut, was Sie damit erreichen, heh. Die Ausgabe in die Shell ist ebenfalls teuer.
Lizardx
Könnte versuchen watch -n0.1, könnte funktionieren. Gelingt dies nicht, while true; do cat /proc/cpuinfo | grep MHz; sleep 0.1; clear; doneflackert es jedoch mehr als nur zu sehen.
Steven Lu
7

Für Intel i3-, i5- und i7-basierte CPUs gibt es ein spezielles Tool i7z, das die aktuelle Geschwindigkeit für alle CPU-Kerne anzeigt.

Aus der Manpage (Beschreibung):

i7z führt das auf i7z, ncurses basierende Programm ohne Optionen aus. i7z druckt den C-Status und die Temperatur für i3-, i5- und i7-basierte Core-Prozessoren von Intel aus (einschließlich Nehalems, Sandy Bridge und Ivy Bridge).

Für Ubuntu-basierte Distributionen können Sie es mit dem folgenden Befehl installieren:

sudo apt-get install i7z

Führen Sie es dann einfach aus (Tool muss mit sudo ausgeführt werden):

sudo i7z
Michal Przybylowicz
quelle
4
Dies ist die beste Lösung, wenn Sie eine Intel-CPU haben. Wenn Sie die CPU-Info aufrufen, erhalten Sie falsche Taktraten. Nur eine Anmerkung, Sie haben vergessen, den Gedankenstrich in "apt-get" zu setzen.
fgblomqvist
Naja ... es funktioniert mit meinem Xeon-Prozessor nur die Ausgabe ist verstümmelt, vielleicht weil ich zwei CPUs habe (ich habe ein Dual-Xeon-Motherboard).
Alexis Wilke
4

Der Intel Core i7-4600U Prozessor unterstützt die Turbo-Boost-Technologie . Es hat eine Grundfrequenz von 2,10 GHz und eine maximale Turbofrequenz von 3,30 GHz. Das bedeutet, dass,

  • Wenn Sie den Turbo Boost deaktivieren (im BIOS-Setup-Menü), arbeitet die CPU die ganze Zeit mit 2,10 GHz.
  • Wenn Turbo Boost aktiviert ist und nur einer der Kerne funktioniert, arbeitet die CPU mit maximal 3,30 GHz.
  • Wenn Turbo Boost aktiviert ist und alle Kerne funktionieren, arbeitet die CPU mit 2,10 GHz.

Aktuelle Frequenz ermitteln

Um festzustellen, ob der Turbo Boost aktiviert ist und welche Frequenz aktuell ist, können Sie verwenden cpupower frequency-info. Für einen alten Intel Core i5-660 mit aktiviertem Turbo Boost erhalten Sie beispielsweise Folgendes.

$ cpupower frequency-info
analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 10.0 us.
  hardware limits: 1.20 GHz - 3.47 GHz
  available frequency steps: 3.47 GHz, 3.33 GHz, 2.53 GHz, 1.87 GHz, 1.20 GHz
  available cpufreq governors: conservative, ondemand, userspace, powersave, performance
  current policy: frequency should be within 1.20 GHz and 3.47 GHz.
              The governor "ondemand" may decide which speed to use
              within this range.
  current CPU frequency is 1.87 GHz.
  cpufreq stats: 3.47 GHz:82,67%, 3.33 GHz:0,00%, 2.53 GHz:0,00%, 1.87 GHz:0,06%, 1.20 GHz:17,28%  (3)
  boost state support:
    Supported: yes
    Active: yes
    25500 MHz max turbo 4 active cores
    25500 MHz max turbo 3 active cores
    25500 MHz max turbo 2 active cores
    25500 MHz max turbo 1 active cores

Beachten Sie, dass in den Informationen die Hardware-Grenzwerte ( 1.20 GHz - 3.47 GHz), die möglichen Frequenzen ( 3.47 GHz, 3.33 GHz, 2.53 GHz, 1.87 GHz, 1.20 GHz) und die aktuelle Frequenz ( 1.87 GHz) angegeben sind. Technische Informationen zu diesen Frequenzen finden Sie auf der Intel-Website .

Frequenz, wenn TurboBoost deaktiviert ist

Beachten Sie den Unterschied , wenn Sie den gleichen Befehl mit Turbo - Boost ausführen deaktiviert: Im boost state supportAbschnitt werden die Werte für Supportedund Activesind no. Hier befindet sich die CPU die ganze Zeit auf dem Nenn- / Minimalwert (1,20 GHz).

$ cpupower frequency-info
analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 10.0 us.
  hardware limits: 1.20 GHz - 3.47 GHz
  available frequency steps: 3.47 GHz, 3.33 GHz, 2.53 GHz, 1.87 GHz, 1.20 GHz
  available cpufreq governors: conservative, ondemand, userspace, powersave, performance
  current policy: frequency should be within 1.20 GHz and 3.47 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency is 1.20 GHz.
  cpufreq stats: 3.47 GHz:40,86%, 3.33 GHz:0,01%, 2.53 GHz:0,06%, 1.87 GHz:0,22%, 1.20 GHz:58,85%  (493)
  boost state support:
    Supported: no
    Active: no
    25500 MHz max turbo 4 active cores
    25500 MHz max turbo 3 active cores
    25500 MHz max turbo 2 active cores
    25500 MHz max turbo 1 active cores

Sie können den Turbo Boost über das BIOS oder einige Linux-Optionen / -Befehle deaktivieren . Die Kernel-Unterstützung kann über die /sys/devices/system/cpu/cpufreq/boostDatei aktiviert / deaktiviert werden .

Jaime
quelle
Haypo hat einen Blogeintrag mit weiteren Informationen zum Intel P-State-Treiber, den C-States, dem Turbo Boost und den Befehlen zum Abrufen von Frequenzinformationen.
Jaime
Diese Verbindung ist jetzt unterbrochen ...
Mikhail T.
1
Der Link für den Haypo-Blogeintrag ist fehlerhaft. Eine Kopie finden Sie in den Notizen des Victor Stinner: Teil 1 und Teil 2 .
Jaime
4

Die CPU-Frequenzen bleiben im Kernel erhalten, können aber etwas "aus" sein. Sie können sie sehen mit:

$ cd /sys/devices/system/cpu
$ paste <(cat cpu*/cpufreq/affected_cpus) <(cat cpu*/cpufreq/scaling_cur_freq) | column -s $'\t' -t
0  833914
1  800021
2  800086
3  800029
4  800036
5  800460
6  800118
7  800141

Wenn Sie nicht wissen müssen, welche CPU # eine kürzere Methode ist, verwenden Sie einfach:

$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
1396354
800058
800050
800024
800005
800017
800001
1392006
WinEunuuchs2Unix
quelle
Diese Methode scheint auf dem Himbeer-Pi zu funktionieren, auf dem Raspbian
Jon
3

Um Informationen über Ihre CPU zu erhalten, geben Sie den folgenden Befehl ein:

dmidecode -t 4
GAD3R
quelle
2
Cuspy. Jetzt sehe ich 4 verschiedene Nummern
;-)
Auch die "aktuelle Geschwindigkeit" scheint irreführend zu sein, da die aktuelle Geschwindigkeit derzeit immer als große Zahl (3,7 GHz) gemeldet wird, wenn die Maschine im Leerlauf ist.
Ragerdl
@vonbrand Eine Person mit einer Uhr weiß, wie spät es ist. Eine Person mit zwei Uhren kann nie ganz sicher sein.
Kusalananda
0

Hängt davon ab, wofür Sie die Informationen verwenden. Die Ausgabezeile von cat / proc / cpuinfo ist die "beworbene" Geschwindigkeit, die Geschwindigkeit in der Broschüre usw. Wenn Sie Server A mit Server B vergleichen, ist dies möglicherweise ausreichend. Wenn Sie Workloads auf dem System überwachen, sollten Sie sich die Kommentare zu Ihrer Frage und die Antwort von @ gad3r ansehen.

Mark Stewart
quelle