====== Fréquences matérielles ======
* [[https://www.grid5000.fr/w/CPU_parameters]]
* [[https://github.com/readex-eu/libfreqgen]]
* [[https://chipsandcheese.com/p/zen-5s-avx-512-frequency-behavior|Zen 5's AVX-512 Frequency Behavior]]
On peut utiliser l'outil ''powertop'' (fourni par le paquet éponyme).
==== Fréquence Uncore ====
Une fréquence par socket. Le comportement peut se configurer depuis le BIOS.
* [[https://www.phoronix.com/scan.php?page=news_item&px=Intel-Uncore-Frequency-Driver]]
À 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/''.
==== Fréquence des CPUs ====
* [[https://www.blaess.fr/christophe/2012/04/30/modifier-facilement-la-frequence-processeur/]]
* [[https://wiki.archlinux.org/index.php/CPU_frequency_scaling]]
* [[https://wiki.debian.org/CpuFrequencyScaling]]
* [[https://www.kernel.org/doc/Documentation/cpu-freq/governors.txt]]
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 [[https://wiki.archlinux.org/index.php/CPU_frequency_scaling|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'' ([[https://www.reddit.com/r/linux/comments/1hdogn/acpi_cpufreq_or_iantel_pstates/|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 ===
* [[http://ena-hpc.org/2014/pdf/paper_06.pdf]]
* [[https://access.redhat.com/articles/65410]]
* [[https://www.deltasight.fr/processeurs-gestion-energie-frequence/]]
* [[https://doc.ubuntu-fr.org/utilisateurs/naziel/gestion_energie_processeur]]
* [[https://community.intel.com/t5/Software-Tuning-Performance/How-can-I-lock-my-Xeon-CPU-frequency-in-Ubuntu/m-p/1126076#M6300]]
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 ===
- ''intel_pstate=disable idle=poll'' dans la ligne de boot
-
sudo cpupower -c all frequency-set -g userspace
-
sudo cpupower -c all frequency-set -f 1600MHz
-
watch -n 1 "cat /proc/cpuinfo | grep MHz"
==== Surveiller la température ====
* [[https://askubuntu.com/a/15834]]
cat /sys/class/thermal/thermal_zone*/temp # en millidegrés Celsius
# ou bien fouiller dans
cat /sys/class/hwmon/hwmon*/temp*
# ou bien, fourni par le paquet lm-sensors :
sensors
==== Turbo boost ====
Savoir si le turbo boost est activé ([[https://askubuntu.com/a/991839|Source]]):
cat /sys/devices/system/cpu/intel_pstate/no_turbo # 0 => turbo boost on, off otherwise
==== Changer la fréquence maximale des cœurs au démarrage ====
* [[https://wiki.archlinux.org/title/CPU_frequency_scaling]]
* [[https://wiki.debian.org/CpuFrequencyScaling]]
(sur Raspberry Pi)
Créer une règle udev :
SUBSYSTEM=="module", ACTION=="add", KERNEL=="cpufreq_dt", RUN+="/bin/sh -c 'cpupower -c all frequency-set -u 900MHz'"
Lorsque le module ''cpufreq_dt'' est chargé au lancement du noyau, exécute la commande ''RUN''. Pour connaître après quel module exécuter la commande, trouver le driver avec ''cpupower frequency-info'', et trouver le nom du module noyau correspondant avec ''lsmod | grep cpufreq'' (ici, ''-'' est transformé en ''_'').
Redémarrer.
==== Changer le gouverneur par défaut ====
* [[https://askubuntu.com/questions/1322492/how-to-set-as-default-performance-mode-on-ubuntu-20-04-instead-of-powersave]]
* [[https://moisescardona.me/changing-the-cpu-governor-to-performance-in-linux/]]
Ajouter ''cpufreq.default_governor=powersave'' à la variable ''GRUB_CMDLINE_LINUX_DEFAULT'' dans le fichier ''/etc/default/grub''. Mettre à jour GRUB :
update-grub