Die meisten CPUs bieten jetzt die Möglichkeit, ihre Geschwindigkeit anzupassen, um den Batterie- / Stromverbrauch zu senken. Dies wird normalerweise als CPU-Frequenzskalierung bezeichnet . Die Echtzeitgeschwindigkeit der CPU wird wie folgt angegeben:
$ sudo cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
Die absolute (maximale) CPU-Geschwindigkeit wird wie folgt angegeben:
$ cat /proc/cpuinfo
Speziell diese Zeile:
model name : Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz
Die angezeigte Zeile zeigt cpu MHz
nicht die maximale Geschwindigkeit Ihrer CPU. Dieser Wert ist Ihre aktuelle Geschwindigkeit. Auf einem Multi-Core-System wie einem i7 oder i5 können Sie dies mit dem folgenden Befehl sehen:
$ cat /proc/cpuinfo |grep MHz
cpu MHz : 1199.000
cpu MHz : 1199.000
cpu MHz : 1199.000
cpu MHz : 2667.000
Sie können jedoch die absolute (maximale) Geschwindigkeit mit diesem Befehl sehen:
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
CPU(s): 4
Thread(s) per core: 2
Core(s) per socket: 2
CPU socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 37
Stepping: 5
CPU MHz: 2667.000
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0-3
HINWEIS: Die Anzahl der Kerne NUMAS node0 CPU(s)
beträgt 4, dh 0,1,2 und 3.
CPU-Skalierung & -Governating?
Der Modus, in dem sich Ihr System befindet, wird als Skalierungsregler bezeichnet. Ähnlich wie ein Gouverneur in einem Auto. Mit diesem Befehl können Sie sehen, welche verfügbar sind:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
powersave ondemand userspace performance
Sie können auch sehen, welches aktuell aktiv ist:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
ondemand
HINWEIS: Die angezeigten Befehle enthalten nur die 1. CPU cpu0
. Sie können entweder *
in den Pfad einfügen, um alle Kerne anzuzeigen, oder Sie können selektiv cpu1
usw. anzeigen .
Sie können die maximalen und minimalen CPU-Geschwindigkeiten anzeigen, die für das Profil Ihres Governors verfügbar sind:
$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
2667000
$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq
1199000
Weitere Informationen finden Sie in diesem Artikel mit dem Titel: CPU-Frequenzskalierung unter Linux mit cpufreq .
Was ist also mit cpuinfo_cur_freq?
Dieser Parameter hat mehr mit der Spezifikation der CPU und dem Profil zu tun, in dem sie sich gerade befindet, als mit irgendetwas Nützlichem in Bezug auf den aktuellen Betrieb der CPU. Für die tatsächliche betriebliche Telemetrie würde ich die scaling_*
Kernel-Tunables verwenden.
Beispiel
Ich habe das folgende Skript zusammengestellt, um die CPU-Kerne spaltenweise anzuzeigen, damit Sie leichter sehen können, wie die verschiedenen Kernel-Tunables aussehen:
#!/bin/bash
nthCore=$(lscpu|grep node0|cut -d"-" -f2)
for i in /sys/devices/system/cpu/cpu0/cpufreq/{cpuinfo,scaling}_*; do
pname=$(basename $i)
[[ "$pname" == *available* ]] || [[ "$pname" == *transition* ]] || \
[[ "$pname" == *driver* ]] || [[ "$pname" == *setspeed* ]] && continue
echo "$pname: "
for j in `seq 0 $nthCore`;do
kparam=$(echo $i | sed "s/cpu0/cpu$j/")
sudo cat $kparam
done
done | paste - - - - - | column -t
Wenn Sie es ausführen, erhalten Sie die folgende Ausgabe:
$ ./cpuinfo.bash
cpuinfo_cur_freq: 2667000 2667000 2667000 2667000
cpuinfo_max_freq: 2667000 2667000 2667000 2667000
cpuinfo_min_freq: 1199000 1199000 1199000 1199000
scaling_cur_freq: 2667000 2266000 1333000 2667000
scaling_governor: ondemand ondemand ondemand ondemand
scaling_max_freq: 2667000 2667000 2667000 2667000
scaling_min_freq: 1199000 1199000 1199000 1199000
Sie können sehen, dass das scaling_cur_freq
Tunable eine Verlangsamung in Kern Nr. 1 und 2 zeigt.
/proc/cpuinfo
dasselbe melden wiecpuinfo_cur_freq
? Das tut es eindeutig nicht! Das Herz meiner Frage bleibt immer noch ungelöst. Ich habe dieses Tool entdeckt , das irgendwie "wahre Häufigkeit" zu melden scheint, bin mir aber nicht sicher, ob es richtig funktioniert. Es bietet einige Quellen für seinen Algorithmus, liefert jedoch keine wirklich gute Erklärung für die Diskrepanz./sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_cur_freq
zeigen die Höchstgeschwindigkeiten an, obwohl der Name die aktuelle Geschwindigkeit implizieren würde. Dies ist die Unterbrechung, nach der Sie fragen, oder? Mein System zeigt sie auch so./sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
cat /proc/cpuinfo | grep MHz
die aktuelle Taktrate nicht mehr zurückgegeben . Im Kernel Bugzilla heißt es, es sei beabsichtigt. Siehe bugzilla.kernel.org/show_bug.cgi?id=197009 . Es wird auch hier erwähnt: phoronix.com/…