Qual é a maneira correta de visualizar a velocidade da sua CPU no Linux?

20

Encontrei dois comandos para gerar informações sobre minha CPU: cat /proc/cpuinfoe lscpu. /proc/cpuinfomostra que a velocidade da minha CPU é de 2,1 Ghz, enquanto lspcudiz que é de 3167 Mhz. Qual deles está correto?

Esta é a minha saída exata da cat /proc/cpuinfovelocidade do meu processador:

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

E isso é de lscpu:

CPU MHz:               3225.234

(Por alguma razão, lscpugera saídas sempre diferentes, variando entre 3100 e 3300 MHz)

Rohan
fonte
3
Você /proc/cpuinfotambém deve ter uma linha que diga cpu MHZ: ...qual é a velocidade atual. O 2.1 depois do @é a velocidade base (sem turbo boost).
22416 Don_crissti
O que é o turbo boost? E isso significa que minha velocidade é de cerca de 3,2 GHz?
Rohan
2
É a maneira de a Intel "acelerar" quando necessário. Eu acho que sua velocidade real na época era de cerca de 3,2 GHz, você também pode tentar, por exemplo, para cpu0 com cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq(como root).
don_crissti
2
O Turbo Boost é uma tecnologia que altera a frequência do processador, dependendo do número de núcleos que você está usando. Se você usar poucos núcleos, a frequência é aumentada para aumentar o desempenho e manter uma temperatura baixa. Você pode verificar as tabelas de frequência do Turbo Boost para verificar como ele aumenta.
Jaime

Respostas:

35

Para ver a velocidade atual de cada núcleo, faço o seguinte:

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

Nota:

Se seu watchcomando não funcionar com intervalos menores que um segundo, modifique o intervalo da seguinte maneira:

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

Isso exibe o cpu speednúcleo de cada núcleo em tempo real.

Ao executar o comando a seguir, uma ou mais vezes, de outro terminal, é possível ver a velocidade mudar com o watchcomando acima , supondo que SpeedStepesteja ativado ( Cool'n'Quietpara AMD).

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

(Este comando usa bcpara calcular pipara 10000 lugares.)

Timothy Martin
fonte
Eu tinha que remover o .em seu primeiro comando para fazer o trabalho:watch -n1 "cat /proc/cpuinfo | grep \"^[c]pu MHz\""
n1k31t4
11
essa é uma maneira bacana de fazer isso, mas eu recomendaria não executar nenhum comando a cada 0,1 segundo, o que afetará o relatório de velocidade da CPU. 1 segundo é suficiente.
Lizardx
@Lizardx Normalmente, eu concordo, mas neste caso a velocidade da CPU pode aumentar e diminuir mais rapidamente que um intervalo de 1 segundo, resultando na falta de alterações visíveis na velocidade. Como os processadores modernos são tão rápidos, inicialmente pensei que SpeedStepnão estava funcionando ao usar 1 segundo como intervalo. No mínimo, .5deve ser usado se a pessoa não quiser ir tão rápido quanto .1 second(embora eu ainda perdi vendo muitas das mudanças de velocidade a essa taxa.
Timothy Martin
11
Tente rodar com os temporizadores definidos para menos de 1 segundo, para ver o uso da CPU visivelmente. Meu palpite é que o que você realmente pode ver é o sistema que gera suas informações de velocidade da CPU, ou seja, a geração da saída de velocidade da CPU está causando o movimento da CPU. Acho que nada menos que um segundo começa a causar diretamente as velocidades da CPU que você está assistindo. Por exemplo, o topo em -d5 é 1% da CPU. Em -d2 é de cerca de 5%. Você pode achar que está realmente se enganando ao pensar que a CPU está fazendo algo que você está fazendo, heh. A saída para o shell também é cara.
Lizardx
Pode tentar watch -n0.1, pode funcionar. Caso contrário while true; do cat /proc/cpuinfo | grep MHz; sleep 0.1; clear; done, ele pisca mais do que vê.
Steven Lu
7

Para cpus baseados em intel i3, i5 e i7, existe uma ferramenta dedicada chamada i7zque mostra a velocidade atual de todos os núcleos de cpu.

Na página do manual (descrição):

O i7z executa o programa i7z, baseado em ncurses, sem nenhuma opção. O i7z imprimirá os estados C e a temperatura dos processadores Core da Intel baseados em i3, i5 e i7 (incluindo Nehalems, Sandy Bridge e Ivy Bridge).

Para distribuições baseadas no ubuntu, você pode instalá-lo emitindo este comando:

sudo apt-get install i7z

então execute-o (a ferramenta precisa ser executada com o sudo):

sudo i7z
Michal Przybylowicz
fonte
4
Esta é a melhor solução se você possui uma CPU Intel. Obter o cpuinfo fornece velocidades incorretas do relógio. Apenas uma nota, você esqueceu de colocar o traço no "apt-get".
Fgblomqvist
Bem ... ele funciona com meu processador Xeon, apenas a saída é distorcida, talvez porque eu tenha duas CPUs (eu tenho uma placa-mãe Xeon dupla).
Alexis Wilke
4

o processador Intel Core i7-4600U suporta a tecnologia Turbo Boost . Tem uma frequência base de 2,10GHz e uma frequência turbo máxima de 3,30GHz. Isso significa que,

  • Se você desativar o Turbo Boost (no menu de configuração do BIOS), a CPU funcionará a 2.10GHz o tempo todo.
  • Quando o Turbo Boost estiver ativado e apenas um dos núcleos estiver funcionando, a CPU funcionará no máximo a 3,30 GHz.
  • Se o Turbo Boost estiver ativado e todos os núcleos estiverem funcionando, a CPU funcionará em 2,10GHz.

Obtendo frequência atual

Para determinar se o Turbo Boost está ativado e qual é a frequência atual, você pode usar cpupower frequency-info. Por exemplo, para um antigo Intel Core i5-660 com o Turbo Boost ativado, você obterá o seguinte.

$ 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

Observe que as informações indicam os limites de hardware ( 1.20 GHz - 3.47 GHz), as possíveis frequências ( 3.47 GHz, 3.33 GHz, 2.53 GHz, 1.87 GHz, 1.20 GHz) e a frequência atual ( 1.87 GHz). Você pode encontrar as informações técnicas dessas frequências no site da Intel .

Frequência quando o TurboBoost está desativado

Observe a diferença ao executar o mesmo comando com o Turbo Boost desativado: Na boost state supportseção, os valores para Supportede Activesão no. Aqui, a CPU estará no valor nominal / mínimo (1,20Ghz) o tempo todo.

$ 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

Você pode desativar o Turbo Boost usando o BIOS ou algumas opções / comandos do Linux . O suporte ao kernel pode ser ativado / desativado usando o /sys/devices/system/cpu/cpufreq/boostarquivo

Jaime
fonte
O Haypo tem uma entrada de blog com mais informações sobre o driver p-state da Intel, os estados C, o Turbo Boost e os comandos para obter informações de frequência.
Jaime
que apontam agora está quebrado ...
Mikhail T.
11
O link para a entrada do blog haypo está quebrado. Você pode encontrar uma cópia nas notas de Victor Stinner: parte 1 e parte 2 .
Jaime
4

As frequências da CPU são mantidas no kernel, mas podem estar um pouco "desligadas". Você pode vê-los 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 você não precisa saber o número da CPU, um método mais curto é simplesmente usar:

$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
1396354
800058
800050
800024
800005
800017
800001
1392006
WinEunuuchs2Unix
fonte
Esse método parece funcionar no raspberry pi executando o Raspbian
Jon
3

Para obter informações sobre sua CPU, digite o seguinte comando:

dmidecode -t 4
GAD3R
fonte
2
Cuspy. Agora eu vejo 4 números diferentes aqui ;-)
vonbrand
Além disso, a "velocidade atual" parece enganosa, pois atualmente a velocidade atual é sempre relatada como um número grande (3,7 GHz), quando a máquina está ociosa.
ragerdl
@vonbrand Uma pessoa com um relógio sabe que horas são. Uma pessoa com dois relógios nunca pode ter certeza.
Kusalananda
0

Depende do que você está usando as informações; a linha de saída de cat / proc / cpuinfo` é a velocidade "Anunciada", a velocidade na brochura etc. Se você estiver comparando o servidor A com o servidor B, isso pode ser suficiente. Se você estiver monitorando cargas de trabalho no sistema, os comentários à sua pergunta e a resposta do @ gad3r serão o que você deve observar.

Mark Stewart
fonte