La plupart des processeurs incluent désormais la possibilité d'ajuster leur vitesse pour aider à économiser sur la batterie / consommation d'énergie. Il est généralement appelé mise à l'échelle de la fréquence du processeur . La vitesse en temps réel du CPU est signalée par ceci:
$ sudo cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
La vitesse absolue (max) du processeur est signalée par ceci:
$ cat /proc/cpuinfo
Plus précisément cette ligne:
model name : Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz
La ligne qui s'affiche cpu MHz
ne montre pas la vitesse maximale de votre CPU. Cette valeur est votre vitesse actuelle. Sur un système multicœur tel qu'un i7 ou i5, vous pouvez le voir avec cette commande:
$ cat /proc/cpuinfo |grep MHz
cpu MHz : 1199.000
cpu MHz : 1199.000
cpu MHz : 1199.000
cpu MHz : 2667.000
Vous pouvez cependant voir la vitesse absolue (max) avec cette commande:
$ 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
REMARQUE: le nombre de cœurs qu'il possède NUMAS node0 CPU(s)
est de 4, soit 0,1,2 et 3.
Mise à l'échelle et gouvernance du processeur?
Le mode dans lequel se trouve votre système s'appelle le gouverneur de mise à l'échelle. Semblable à un gouverneur sur une voiture. Vous pouvez voir lesquels sont disponibles avec cette commande:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
powersave ondemand userspace performance
Vous pouvez également voir lequel est actuellement actif:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
ondemand
REMARQUE: Les commandes je montre seulement inclure le 1er cpu, cpu0
. Vous pouvez soit remplacer un *
dans le chemin pour voir tous les cœurs, soit vous pouvez le voir de manière sélective cpu1
, etc.
Vous pouvez voir les vitesses CPU maximales et minimales disponibles pour le profil de votre gouverneur:
$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
2667000
$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq
1199000
Plus de détails sont disponibles dans cet article, intitulé: Mise à l'échelle de la fréquence du processeur sous Linux avec cpufreq .
Qu'en est-il de cpuinfo_cur_freq?
Ce paramètre a plus à voir avec la spécification du CPU et le profil dans lequel il se trouve actuellement, plutôt qu'avec quelque chose d'utile en ce qui concerne le fonctionnement actuel du CPU. Pour la télémétrie opérationnelle réelle, j'utiliserais les scaling_*
réglages du noyau.
Exemple
J'ai rassemblé le script suivant pour afficher les cœurs de CPU par colonne afin qu'il soit plus facile de voir à quoi ressemblaient les divers paramètres ajustables du noyau:
#!/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
Lorsque vous l'exécutez, vous obtenez la sortie suivante:
$ ./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
Vous pouvez voir que le scaling_cur_freq
réglage montre un ralentissement dans les cœurs # 1 et 2.
/proc/cpuinfo
rapporterait-il pas le même quecpuinfo_cur_freq
? Ce n'est clairement pas le cas! Le cœur de ma question n'est toujours pas résolu. J'ai découvert cet outil qui semble signaler en quelque sorte la "vraie fréquence", mais je ne suis pas sûr qu'il fonctionne correctement. Il fournit quelques sources pour son algorithme, mais ne fournit pas vraiment une excellente explication de l'écart./sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_cur_freq
montrent les vitesses maximales, même si leur nom impliquerait la vitesse actuelle, c'est la déconnexion que vous demandez, non? Mon système les montre également de cette façon./sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
cat /proc/cpuinfo | grep MHz
ne renvoie plus la vitesse d'horloge actuelle . Au Kernel Bugzilla, ils disent que c'est intentionnel. Voir bugzilla.kernel.org/show_bug.cgi?id=197009 . Il est également mentionné ici: phoronix.com/…