Qual è il modo corretto di visualizzare la velocità della tua CPU su Linux?


20

Ho trovato due comandi per ottenere informazioni sulla mia CPU: cat /proc/cpuinfoe lscpu. /proc/cpuinfomostra che la mia velocità della CPU è di 2,1 Ghz, mentre lspcudice che è 3167 Mhz. Quale è corretto?

Questo è il mio esatto output cat /proc/cpuinfosulla velocità del mio processore:

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

E questo proviene da lscpu:

CPU MHz:               3225.234

(Per qualche motivo, lscpuemette in modo diverso ogni volta, variando tra 3100 e 3300 MHz)


3
Il tuo /proc/cpuinfodovrebbe avere anche una riga che dice cpu MHZ: ...che è la velocità attuale. Il 2.1 dopo il @è la velocità di base (senza turbo boost).
don_crissti,

Che cos'è il turbo boost? E questo significa che la mia velocità è in realtà intorno a 3,2 GHz?
Rohan,

2
È il modo di Intel di "colpire il gas" quando necessario. Immagino che la tua velocità effettiva al momento fosse effettivamente intorno a 3,2 GHz, potresti anche provare ad esempio per cpu0 con cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq(come root).
don_crissti,

2
Turbo Boost è una tecnologia che modifica la frequenza del processore in base al numero di core in uso. Se si utilizzano pochi core, la frequenza viene aumentata per aumentare le prestazioni e mantenere una bassa temperatura. È possibile controllare le tabelle delle frequenze Turbo Boost per verificare come aumenta.
Jaime,

Risposte:


35

Per vedere la velocità corrente di ciascun core lo faccio:

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

Nota:

Se il tuo watchcomando non funziona con intervalli inferiori a un secondo, modifica l'intervallo in questo modo:

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

Questo mostra il cpu speeddi ogni core in tempo reale.

Eseguendo il comando seguente, una o più volte, da un altro terminale si può vedere la variazione di velocità con il watchcomando precedente , supponendo che SpeedStepsia abilitato ( Cool'n'Quietper AMD).

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

(Questo comando consente bcdi calcolare pifino a 10000 posizioni.)


Ho dovuto rimuovere il .tuo primo comando per farlo funzionare:watch -n1 "cat /proc/cpuinfo | grep \"^[c]pu MHz\""
n1k31t4

1
questo è un modo ingegnoso per farlo, ma starei attento a non eseguire alcun comando ogni 0,1 secondi, che a sua volta avrà un impatto sul rapporto sulla velocità della CPU. 1 secondo è abbondante.
Lizardx,

@Lizardx Di solito sono d'accordo, ma in questo caso la velocità della CPU può aumentare e diminuire più velocemente di un intervallo di 1 secondo, con conseguente mancanza di cambiamenti di velocità visibili. Dato che i processori moderni sono così veloci, inizialmente pensavo che SpeedStepnon funzionasse quando usavo 1 secondo come intervallo. Come minimo, .5dovrebbe essere usato se uno non vuole andare veloce come .1 second(anche se mi sono ancora perso di vedere molte delle variazioni di velocità a quel ritmo.
Timothy Martin

1
Prova a correre al top con i timer impostati su meno di 1 secondo, puoi vedere visibilmente l'utilizzo della cpu. La mia ipotesi è che ciò che potresti effettivamente vedere è il sistema che genera le informazioni sulla velocità della tua CPU, cioè la generazione dell'uscita della velocità della CPU sta causando il movimento della CPU. Trovo che qualcosa di meno di un secondo inizi a causare direttamente la velocità della CPU che stai guardando. Ad esempio, in alto a -d5 è l'1% della CPU. A -d2 è circa il 5%. Potresti scoprire che in realtà stai prendendo in giro te stesso pensando che la cpu stia facendo qualcosa che stai facendo, heh. Anche l'output su shell è costoso.
Lizardx,

Potrebbe provare watch -n0.1, potrebbe funzionare. In caso while true; do cat /proc/cpuinfo | grep MHz; sleep 0.1; clear; donecontrario, sfarfalla più che guardare però.
Steven Lu

7

Per cpus basato su Intel i3, i5 e i7 esiste uno strumento dedicato chiamato i7zche mostra la velocità corrente per tutti i core cpu.

Dalla pagina man (descrizione):

i7z esegue il programma i7z, basato su ncurses, senza alcuna opzione. i7z stamperà gli stati C e la temperatura per i processori Core basati su i3, i5 e i7 di Intel (inclusi Nehalems, Sandy Bridge e Ivy Bridge).

Per le distribuzioni basate su Ubuntu è possibile installarlo emettendo questo comando:

sudo apt-get install i7z

quindi eseguilo (lo strumento deve essere eseguito con sudo):

sudo i7z

4
Questa è la soluzione migliore se si dispone di una CPU Intel. Cat'ing il cpuinfo ti dà velocità di clock errate. Solo una nota, hai dimenticato di mettere il trattino in "apt-get".
fgblomqvist,

Bene ... funziona con il mio processore Xeon solo l'output è confuso, forse perché ho due CPU (ho una doppia scheda madre Xeon).
Alexis Wilke,

4

Il processore Intel Core i7-4600U supporta la tecnologia Turbo Boost . Ha una frequenza di base di 2,10 GHz e una frequenza turbo massima di 3,30 GHz. Ciò significa che,

  • Se disabiliti Turbo Boost (nel menu di configurazione del BIOS), la CPU funzionerà sempre a 2.10GHz.
  • Quando Turbo Boost è abilitato e funziona solo uno dei core, la CPU funzionerà ad un massimo di 3,30 GHz.
  • Se Turbo Boost è abilitato e tutti i core funzionano, la CPU funzionerà a 2.10GHz.

Ottenere la frequenza corrente

Per determinare se Turbo Boost è attivato e quale è la frequenza corrente, è possibile utilizzare cpupower frequency-info. Ad esempio, per un vecchio Intel Core i5-660 con Turbo Boost abilitato, otterrai quanto segue.

$ 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

Si noti che le informazioni indicano i limiti hardware ( 1.20 GHz - 3.47 GHz), le possibili frequenze ( 3.47 GHz, 3.33 GHz, 2.53 GHz, 1.87 GHz, 1.20 GHz) e la frequenza corrente ( 1.87 GHz). È possibile trovare le informazioni tecniche di queste frequenze sul sito Web Intel .

Frequenza quando TurboBoost è disabilitato

Nota la differenza quando esegui lo stesso comando con Turbo Boost disabilitato: Nella boost state supportsezione, i valori per Supportede Activesono no. Qui, la CPU sarà sempre al valore nominale / minimo (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

È possibile disabilitare Turbo Boost utilizzando il BIOS o alcune opzioni / comandi di Linux . Il supporto del kernel può essere abilitato / disabilitato usando il /sys/devices/system/cpu/cpufreq/boostfile.


Haypo ha un post sul blog con ulteriori informazioni sul driver Intel p-state, gli stati C, Turbo Boost e i comandi per ottenere informazioni sulla frequenza.
Jaime,

quel collegamento ora è interrotto ...
Mikhail T.

1
Il link per il blog haypo è interrotto. È possibile trovarne una copia nelle note di Victor Stinner: parte 1 e parte 2 .
Jaime,

4

Le frequenze della CPU sono mantenute nel kernel ma possono essere un po '"off". Puoi vederli usando:

$ 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

Se non hai bisogno di conoscere il metodo CPU # un metodo più breve sta semplicemente usando:

$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
1396354
800058
800050
800024
800005
800017
800001
1392006

Questo metodo sembra funzionare sul raspberry pi che esegue Raspbian
Jon

3

Per ottenere informazioni sulla tua CPU digita il seguente comando:

dmidecode -t 4

2
Cuspy. Ora vedo 4 numeri diversi qui ;-)
vonbrand

Inoltre, la "velocità attuale" sembra essere fuorviante, poiché la velocità corrente è attualmente riportata sempre come un numero elevato (3,7 GHz), quando la macchina è inattiva.
ragerdl,

@vonbrand Una persona con un orologio sa che ore sono. Una persona con due orologi non può mai essere del tutto certa.
Kusalananda

0

Dipende da cosa stai usando le informazioni per; la linea di uscita da cat / proc / cpuinfo` è la velocità "Pubblicizzata", la velocità nella brochure, ecc. Se si sta confrontando il server A con il server B, ciò può essere sufficiente. Se stai monitorando i carichi di lavoro sul sistema, i commenti alla tua domanda e la risposta di @ gad3r sarebbero cosa guardare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.