Risposte:
La maggior parte delle CPU ora include la possibilità di regolare la loro velocità per aiutare a risparmiare sull'utilizzo della batteria / energia. In genere si chiama ridimensionamento della frequenza della CPU . La velocità in tempo reale della CPU è indicata da questo:
$ sudo cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
La velocità assoluta (massima) della CPU è riportata da questo:
$ cat /proc/cpuinfo
Nello specifico questa linea:
model name : Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz
La linea che mostra cpu MHz
non mostra la velocità massima della tua CPU. Questo valore è la tua velocità attuale. Su un sistema multi-core come i7 o i5 puoi vedere questo con questo comando:
$ cat /proc/cpuinfo |grep MHz
cpu MHz : 1199.000
cpu MHz : 1199.000
cpu MHz : 1199.000
cpu MHz : 2667.000
Puoi comunque vedere la velocità assoluta (massima) con questo comando:
$ 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
NOTA: il numero di core che ha, NUMAS node0 CPU(s)
è 4, cioè 0,1,2 e 3.
La modalità in cui si trova il tuo sistema si chiama ridimensionatore. Simile a un governatore su un'auto. Puoi vedere quali sono disponibili con questo comando:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
powersave ondemand userspace performance
Puoi anche vedere quale è attualmente attivo:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
ondemand
NOTA: I comandi che sto mostrando solo includono la prima cpu, cpu0
. Puoi sostituire in a *
nel percorso per vedere tutti i core oppure puoi vedere selettivamente cpu1
, ecc.
Puoi vedere la velocità massima e minima della CPU disponibile per il profilo del tuo governatore:
$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
2667000
$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq
1199000
Maggiori dettagli sono disponibili in questo articolo, intitolato: Ridimensionamento della frequenza della CPU in Linux con cpufreq .
Questo parametro ha più a che fare con le specifiche della CPU e il profilo in cui si trova attualmente, piuttosto che con qualsiasi cosa utile rispetto al funzionamento della CPU. Per la telemetria operativa effettiva userei i scaling_*
parametri sintonizzabili del kernel.
Ho messo insieme il seguente script per mostrare i core della CPU in termini di colonna, quindi sarebbe più facile vedere come apparivano i vari parametri sintonizzabili del kernel:
#!/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
Quando lo esegui ottieni il seguente output:
$ ./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
Puoi vedere che il scaling_cur_freq
parametro sintonizzabile sta mostrando un rallentamento nel core # 1 e 2.
/sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_cur_freq
stanno mostrando le velocità massime, anche se il loro nome implicherebbe la velocità attuale, questa è la disconnessione di cui stai chiedendo, giusto? Il mio sistema li mostra anche in questo modo.
/sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
cat /proc/cpuinfo | grep MHz
non restituisce più la velocità di clock corrente . Al Kernel Bugzilla, dicono che è intenzionale. Vedi bugzilla.kernel.org/show_bug.cgi?id=197009 . È anche menzionato qui: phoronix.com/…
/proc/cpuinfo
segnalerebbe lo stesso dicpuinfo_cur_freq
? Chiaramente no! Il cuore della mia domanda rimane ancora irrisolto. Ho scoperto questo strumento che sembra riportare in qualche modo "la vera frequenza", ma non sono sicuro che funzioni correttamente. Fornisce alcune fonti per il suo algoritmo, ma in realtà non fornisce una grande spiegazione per la discrepanza.