linux:frequencies

Ceci est une ancienne révision du document !


Fréquences matérielles

Une fréquence par socket. Le comportement peut se configurer depuis le BIOS.

À partir de Linux 5.6, il y a un support directement dans Linux (si compilé avec CONFIG_INTEL_UNCORE_FREQ_CONTROL=y).

Les fichiers à consulter sont dans /sys/devices/system/cpu/intel_uncore_frequency/.

Toutes les informations sont dans /sys/devices/system/cpu/cpu0/cpufreq/.

On peut obtenir des informations avec cpupower frequency-info du paquet linux-cpupower.

Les drivers permettent de communiquer avec le processeur pour lui indiquer à quelle fréquence tourner. Celui activé par défaut maintenant est intel_pstate. Ensuite, les governors permettent de dire au driver à quelle fréquence le processeur doit fonctionner. Le driver intel_pstate n'en permet que deux: performance et power_save (voir la page de ArchLinux pour plus d'infos).

Changer les fréquences manuellement

Avec intel_pstate, pour changer les valeurs limites des fréquences, il est possible d'écrire une valeur en pourcentage dans les fichiers /sys/devices/system/cpu/intel_pstate/{min,max}_perf_pct (source):

# zsh semble poser problème...
sudo sh -c "echo 28 > /sys/devices/system/cpu/intel_pstate/max_perf_pct"

Sinon il est aussi possible de changer les limites avec cpupower:

sudo cpupower -c all frequency-set -u 3000MHz # max
sudo cpupower -c all frequency-set -d 2800MHz # min

Si on souhaite se passer de intel_pstate pour pouvoir utiliser le driver userspace et vraiment définir nous-même la fréquence, il faut d'abord désactiver intel_pstate, en rajoutant intel_pstate=disable à la ligne de boot. Ensuite:

cpupower frequency-info # nous dit qu'on peut utiliser userspace et quelles sont les fréquences permises
sudo cpupower -c all frequency-set -g userspace
sudo cpupower -c all frequency-set -f 1600000

Mais cela n'est pas forcément suffisant si on souhaite rester constamment à une fréquence élevée: les cœurs finissent par diminuer leur fréquence s'ils sont inactifs. Pour éviter ça, il faut aussi désactiver les C-states.

C-states

En plus de faire attention au driver et au governor, il faut tenir compte des C-states, qui sont des états où les cœurs inoccupés réduisent leur fréquence, voir vident leur cache. Suivant le C-state dans lequel est un cœur, il met plus ou moins de temps à repasser à sa fréquence nominale.

Pour connaître les C-states disponibles:

sudo cpupower idle-info

Pour savoir dans quel état sont majoritairement les cœurs:

sudo cpupower monitor

Pour désactiver les C-states, (on peut apparemment le faire depuis le BIOS ?) il faut ajouter idle=poll à la ligne de boot dans GRUB. Attention, apparemment désactiver les C-states ne fait pas bon ménage avec l'hyperthreading. Les fréquences des cœurs sont alors constantes.

Résumé pour définir les fréquences manuellement

  1. intel_pstate=disable idle=poll dans la ligne de boot
  2. sudo cpupower -c all frequency-set -g userspace
  3. sudo cpupower -c all frequency-set -f 1600MHz
  4. watch -n 1 "cat /proc/cpuinfo | grep MHz"
cat /sys/class/thermal/thermal_zone*/temp # en millidegrés Celsius
 
# ou bien fouiller dans
cat /sys/class/hwmon/hwmon*/temp*

Savoir si le turbo boost est activé (Source):

cat /sys/devices/system/cpu/intel_pstate/no_turbo # 0 => turbo boost on, off otherwise
  • linux/frequencies.1601908081.txt.gz
  • Dernière modification : 2021/04/04 17:01
  • (modification externe)