¿Cuál es la forma correcta de ver la velocidad de su CPU en Linux?


20

Encontré dos comandos para generar información sobre mi CPU: cat /proc/cpuinfoy lscpu. /proc/cpuinfomuestra que la velocidad de mi CPU es de 2.1 Ghz, mientras que lspcudice que es de 3167 Mhz. ¿Cuál es el correcto?

Esta es mi salida exacta de cat /proc/cpuinfoaproximadamente la velocidad de mi procesador:

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

Y esto es de lscpu:

CPU MHz:               3225.234

(Por alguna razón, las lscpusalidas son diferentes cada vez, variando entre 3100 y 3300 MHz)


3
Su /proc/cpuinfotambién debe tener una línea que dice cpu MHZ: ...que es la velocidad actual. El 2.1 después del @es la velocidad base (sin turbo boost).
don_crissti

¿Qué es el turbo boost? ¿Y esto significa que mi velocidad es de alrededor de 3.2 GHz?
Rohan

2
Es la forma en que Intel "acelera" cuando es necesario. Supongo que su velocidad real en ese momento era de alrededor de 3.2 GHz, también podría intentar, por ejemplo, para cpu0 con cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq(como raíz).
don_crissti

2
Turbo Boost es una tecnología que cambia la frecuencia del procesador dependiendo de la cantidad de núcleos que esté utilizando. Si usa pocos núcleos, la frecuencia aumenta para aumentar el rendimiento y mantener una temperatura baja. Puede consultar las tablas de frecuencia de Turbo Boost para ver cómo aumenta.
Jaime

Respuestas:


35

Para ver la velocidad actual de cada núcleo, hago esto:

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

Nota:

Si su watchcomando no funciona con intervalos menores de un segundo, modifique el intervalo de la siguiente manera:

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

Esto muestra el cpu speedde cada núcleo en tiempo real.

Al ejecutar el siguiente comando, una o más veces, desde otro terminal se puede ver el cambio de velocidad con el watchcomando anterior , suponiendo que SpeedStepesté habilitado ( Cool'n'Quietpara AMD).

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

(Este comando se usa bcpara calcular pihasta 10000 lugares).


Tuve que eliminar el .en su primer comando para que funcione:watch -n1 "cat /proc/cpuinfo | grep \"^[c]pu MHz\""
n1k31t4

1
esta es una forma ingeniosa de hacerlo, pero me gustaría no ejecutar ningún comando cada .1 segundos, ya que eso afectará el informe de velocidad de la CPU. 1 segundo es suficiente.
Lizardx

@Lizardx Normalmente estoy de acuerdo, pero en este caso la velocidad de la CPU puede aumentar y disminuir más rápido que un intervalo de 1 segundo, lo que resulta en una falta de cambios de velocidad visibles. Como los procesadores modernos son tan rápidos, inicialmente pensé que mi SpeedStepno funcionaba cuando usaba 1 segundo como intervalo. Como mínimo, .5debe usarse si uno no quiere ir tan rápido como .1 second(aunque todavía he echado de menos ver muchos de los cambios de velocidad a ese ritmo.)
Timothy Martin

1
Intente ejecutar la parte superior con los temporizadores configurados en menos de 1 segundo, puede ver el uso de la CPU de manera visible. Supongo que lo que en realidad puede estar viendo es el sistema que genera su información de velocidad de la CPU, es decir, la generación de la salida de velocidad de la CPU está causando el movimiento de la CPU. Me parece que cualquier cosa menos de un segundo comienza a causar directamente las velocidades de CPU que está viendo. Por ejemplo, top en -d5 es 1% de la CPU. En -d2 es aproximadamente el 5%. Tal vez descubras que te estás engañando a ti mismo al pensar que la CPU está haciendo algo que estás haciendo que haga, je. La salida al shell también es costosa.
Lizardx

Podría intentar watch -n0.1, podría funcionar. Sin while true; do cat /proc/cpuinfo | grep MHz; sleep 0.1; clear; doneembargo, sin embargo, parpadea más que mirar.
Steven Lu

7

Para cpus basado en Intel i3, i5 e i7, existe una herramienta dedicada llamada i7zque muestra la velocidad actual para todos los núcleos de CPU.

Desde la página del manual (descripción):

i7z ejecuta el programa i7z, basado en ncurses, sin ninguna opción. i7z imprimirá los estados C y la temperatura para los procesadores Core basados ​​en i3, i5 e i7 de Intel (incluidos Nehalems, Sandy Bridge e Ivy Bridge).

Para distribuciones basadas en ubuntu, puede instalarlo emitiendo este comando:

sudo apt-get install i7z

luego simplemente ejecútelo (la herramienta debe ejecutarse con sudo):

sudo i7z

44
Esta es la mejor solución si tiene una CPU Intel. La captura de cpuinfo le da velocidades de reloj incorrectas. Solo una nota, olvidó poner el guión en "apt-get".
fgblomqvist

Bueno ... funciona con mi procesador Xeon, solo la salida está confusa, tal vez porque tengo dos CPU (tengo una placa base dual Xeon).
Alexis Wilke

4

El procesador Intel Core i7-4600U es compatible con la tecnología Turbo Boost . Tiene una frecuencia base de 2,10 GHz y una frecuencia turbo máxima de 3,30 GHz. Eso significa que,

  • Si desactiva el Turbo Boost (en el menú de configuración del BIOS), la CPU funcionará a 2.10 GHz todo el tiempo.
  • Cuando Turbo Boost está habilitado y solo uno de los núcleos está funcionando, la CPU funcionará a un máximo de 3.30GHz.
  • Si Turbo Boost está habilitado y todos los núcleos funcionan, la CPU funcionará a 2.10GHz.

Obteniendo frecuencia actual

Para determinar si Turbo Boost está activado y cuál es la frecuencia actual, puede usar cpupower frequency-info. Por ejemplo, para un viejo Intel Core i5-660 con Turbo Boost habilitado, obtendrá lo siguiente.

$ 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

Tenga en cuenta que la información indica los límites de hardware ( 1.20 GHz - 3.47 GHz), las posibles frecuencias ( 3.47 GHz, 3.33 GHz, 2.53 GHz, 1.87 GHz, 1.20 GHz) y la frecuencia actual ( 1.87 GHz). Puede encontrar la información técnica de estas frecuencias en el sitio web de Intel .

Frecuencia cuando TurboBoost está deshabilitado

Tenga en cuenta la diferencia cuando ejecuta el mismo comando con Turbo Boost deshabilitado: en la boost state supportsección, los valores para Supportedy Activeson no. Aquí, la CPU estará en el valor nominal / mínimo (1.20Ghz) todo el tiempo.

$ 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

Puede deshabilitar Turbo Boost utilizando el BIOS o algunas opciones / comandos de Linux . El soporte del núcleo se puede habilitar / deshabilitar usando el /sys/devices/system/cpu/cpufreq/boostarchivo.


Haypo tiene una entrada de blog con más información sobre el controlador de estado p de Intel, los estados C, el Turbo Boost y los comandos para obtener información de frecuencia.
Jaime

ese enlace ahora está roto ...
Mikhail T.

1
El enlace para la entrada del blog haypo está roto. Puede encontrar una copia en las notas de Victor Stinner: parte 1 y parte 2 .
Jaime

4

Las frecuencias de la CPU se mantienen en el núcleo, pero pueden estar un poco "apagadas". Puedes verlos 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

Si no necesita saber la CPU #, un método más corto es simplemente usar:

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

Este método parece funcionar en la frambuesa pi que ejecuta Raspbian
Jon

3

Para obtener información sobre su CPU, escriba el siguiente comando:

dmidecode -t 4

2
Cuspy Ahora veo 4 números diferentes aquí ;-)
vonbrand

Además, la "velocidad actual" parece ser engañosa, ya que la velocidad actual siempre se informa como un gran número (3.7GHz), cuando la máquina está inactiva.
ragerdl

@vonbrand Una persona con un reloj sabe qué hora es. Una persona con dos relojes nunca puede estar del todo segura.
Kusalananda

0

Depende de para qué está utilizando la información; la línea de salida de cat / proc / cpuinfo` es la velocidad "Anunciada", la velocidad en el folleto, etc. Si está comparando el servidor A con el servidor B, puede ser suficiente. Si está monitoreando las cargas de trabajo en el sistema, los comentarios a su pregunta y la respuesta de @ gad3r serían lo que debe mirar.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.