A maioria das CPUs agora inclui a capacidade de ajustar sua velocidade para ajudar a economizar no uso de bateria / energia. É normalmente chamado de escala de frequência da CPU . A velocidade em tempo real da CPU é relatada por este:
$ sudo cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
A velocidade absoluta (máxima) da CPU está sendo relatada por este:
$ cat /proc/cpuinfo
Especificamente esta linha:
model name : Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz
A linha exibida cpu MHz
não mostra a velocidade máxima da sua CPU. Este valor é a sua velocidade atual. Em um sistema com vários núcleos, como um i7 ou i5, você pode ver isso com este comando:
$ cat /proc/cpuinfo |grep MHz
cpu MHz : 1199.000
cpu MHz : 1199.000
cpu MHz : 1199.000
cpu MHz : 2667.000
No entanto, você pode ver a velocidade absoluta (máxima) com este 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: o número de núcleos que possui NUMAS node0 CPU(s)
é 4, ou seja, 0,1,2 e 3.
Dimensionamento e administração da CPU?
O modo em que seu sistema está é chamado de regulador de escala. Semelhante a um governador em um carro. Você pode ver quais estão disponíveis com este comando:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
powersave ondemand userspace performance
Você também pode ver qual está ativo no momento:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
ondemand
NOTA: Os comandos que estou mostrando incluem apenas o 1º processador cpu0
,. Você pode substituir em um *
no caminho para ver todos os núcleos ou pode ver seletivamente cpu1
etc.
Você pode ver as velocidades máxima e mínima da CPU disponíveis para o perfil do seu governador:
$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
2667000
$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq
1199000
Mais detalhes estão disponíveis neste artigo, intitulado: Escalonamento de frequência da CPU no Linux com cpufreq .
Então, e o cpuinfo_cur_freq?
Esse parâmetro tem mais a ver com a especificação da CPU e em qual perfil ele está atualmente, em vez de algo útil em relação à forma como a CPU está operando no momento. Para telemetria operacional real, eu usaria os scaling_*
ajustáveis do kernel.
Exemplo
Coloquei o seguinte script para mostrar os núcleos da CPU em colunas, para que fosse mais fácil ver como eram os vários ajustes do 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
Ao executá-lo, você obtém a seguinte saída:
$ ./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
Você pode ver que o scaling_cur_freq
ajuste está mostrando uma desaceleração nos núcleos 1 e 2.
/proc/cpuinfo
reportaria o mesmo quecpuinfo_cur_freq
? Claramente não! O cerne da minha pergunta ainda permanece sem solução. Descobri essa ferramenta que parece relatar "frequência verdadeira", mas não tenho certeza se funciona corretamente. Ele fornece algumas fontes para seu algoritmo, mas realmente não fornece uma ótima explicação para a discrepância./sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_cur_freq
mostram as velocidades máximas, mesmo que o nome implique na velocidade atual, essa é a desconexão que você está perguntando, certo? Meu sistema também mostra dessa maneira./sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
cat /proc/cpuinfo | grep MHz
não retorna mais a velocidade atual do relógio . No Bugzilla do Kernel, eles dizem que é intencional. Veja bugzilla.kernel.org/show_bug.cgi?id=197009 . Também é mencionado aqui: phoronix.com/…