CPU frequency scaling (Français)

La modification des performances du processeur permet au système d'exploitation d'augmenter ou de diminuer la fréquence du CPU afin d'économiser de l'énergie ou d'améliorer les performances. La mise à l'échelle peut se faire automatiquement en réponse à la charge du système, s'ajuster en réponse aux événements ACPI, ou être modifiée manuellement par les programmes de l'espace utilisateur.

État de la traduction: Cet article est la version francophone de CPU frequency scaling. Date de la dernière traduction: 2022-10-03. Vous pouvez aider à synchroniser la traduction s'il y a eu des changements dans la version anglaise.

Le noyau Linux offre une modification des performances du CPU via le sous-système CPUFreq, qui définit deux couches d'abstraction :

  • La politique de gestion implémente les algorithmes pour calculer la fréquence désirée du CPU, potentiellement basée sur les besoins du système.
  • Le pilote de fréquence interagit directement avec le CPU, en mettant en œuvre les fréquences souhaitées par le gouverneur actuel.

Un pilote de fréquence et une politique par défaut sont sélectionnés automatiquement, mais des outils en espace utilisateur comme cpupower, acpid, Laptop Mode Tools, ou des outils GUI fournis pour votre environnement de bureau, peuvent toujours être utilisés pour une configuration avancée.

Outils en espace utilisateur

thermald

thermald est un daemon pour Linux utilisé pour prévenir la surchauffe des processeurs Intel. Ce démon contrôle de manière proactive les paramètres thermiques en utilisant les P-states, les T-states, et le pilote Intel power clamp. thermald peut également être utilisé pour les anciens CPU Intel. Si les derniers pilotes ne sont pas disponibles, le démon reviendra aux registres spécifiques au modèle x86 et au "sous-système cpufreq" de Linux pour contrôler le refroidissement du système.

Par défaut, il surveille la température du CPU en utilisant les capteurs de température numériques disponibles et maintient la température du CPU sous contrôle, avant que le matériel ne prenne des mesures de correction agressives. S'il y a un capteur de température de la peau dans le sysfs «thermal», alors il essaie de maintenir la température de la peau sous 45C.

Sur les ordinateurs portables Tiger Lake (par exemple, Dell Latitude 3420), ce démon a été signalé comme débloquant plus de performances que ce qui serait autrement disponible.

L'unité systemd associée est thermald.service, qui doit être démarrée et activée.

i7z

i7z est un outil de rapport sur les CPU i7 (et également i3, i5, i9) pour Linux. Il peut être lancé depuis un terminal avec la commande i7z ou en tant qu'interface graphique avec i7z-gui.

turbostat

peut afficher la fréquence, la consommation d'énergie, l'état de veille et d'autres statistiques des CPU modernes Intel et AMD.

cpupower

est un ensemble d'utilitaires en espace utilisateur conçus pour aider à la mise à l'échelle de la fréquence des CPU. Ce paquet n'est pas nécessaire pour utiliser la mise à l'échelle, mais il est fortement recommandé car il fournit des utilitaires de ligne de commande utiles et un service systemd pour changer le gouverneur au démarrage.

Le fichier de configuration de cpupower est situé dans . Ce fichier de configuration est lu par un script bash dans qui est activé par systemd avec cpupower.service. Vous pouvez vouloir activer cpupower.service pour qu'il démarre au démarrage.

cpupower-gui

est un utilitaire graphique conçu pour aider à la mise à l'échelle de la fréquence du CPU. L'interface graphique est basée sur GTK et est censée fournir les mêmes options que cpupower. cpupower-gui peut changer la fréquence maximale/minimale du CPU et le gouverneur pour chaque noyau. L'application gère l'octroi de privilèges par le biais de polkit et permet à tout utilisateur connecté dans le groupe d'utilisateurs wheel de modifier la politique ou la fréquence du processeur.

power-profiles-daemon

L'outil de ligne de commande powerprofilesctl de gère les profils d'alimentation (par exemple, équilibré, économie d'énergie, performance) par le biais du service . GNOME et KDE fournissent également interfaces graphiques pour le changement de profil ; consultez les sites suivants :

Consultez le README du projet pour plus d'informations sur l'utilisation, les cas d'utilisation et les comparaisons avec des projets similaires.

Démarrez et activez le service . Notez que lorsque powerprofilesctl est lancé, il tente également de démarrer le service (consultez le status de l'unité ).

Pilote de fréquence

Les pilotes de fréquence implémentent les détails spécifiques au CPU pour appliquer les fréquences spécifiées par la politique. À proprement parler, la norme ACPI requiert des «power-performance states (P-states)» qui commence à P0, et devient de moins en moins performant. Cette fonctionnalité est appelée SpeedStep sur Intel, et PowerNow! sur AMD.

En pratique, cependant, les processeurs fournissent des méthodes pour spécifier des fréquences spécifiques plutôt que d'être limités à des états P fixes, que les pilotes de mise à l'échelle gèrent.

cpupower nécessite des modules pour connaître les limites du CPU natif :

ModuleDescription
intel_pstateCe pilote implémente un pilote de mise à l'échelle avec une politique interne pour les processeurs Intel Core (Sandy Bridge et plus récents).
amd_pstateCe pilote met en œuvre un pilote de mise à l'échelle avec un gouverneur interne pour les processeurs AMD Ryzen (certains Zen 2 et plus récents).
intel_cufreqA partir du noyau 5.7, le pilote de mise à l'échelle intel_pstate sélectionne le "mode passif" aka intel_cpufreq pour les CPU qui ne prennent pas en charge les P-states gérés par le matériel (HWP), c'est-à-dire les Intel Core i de 5ème génération ou plus anciens.
acpi_cpufreqLe pilote CPUFreq utilise les états de performance du processeur ACPI. Ce pilote prend également en charge l'Intel Enhanced SpeedStep (précédemment pris en charge par le module speedstep-centrino déprécié).
speedstep_libPilote CPUFreq pour les processeurs Intel SpeedStep (principalement les Atoms et les anciens Pentiums).
powernow_k8Pilote CPUFreq pour les processeurs Athlon 64/Opteron/Phenom K8/K10. Depuis Linux 3.7, 'acpi-cpufreq' sera automatiquement utilisé pour les processeurs AMD plus modernes.
pcc_cpufreqCe pilote prend en charge l'interface Processor Clocking Control de Hewlett-Packard et Microsoft Corporation, utile sur certains serveurs ProLiant.
p4_clockmodPilote CPUFreq pour les processeurs Intel Pentium 4/Xeon/Celeron qui réduit la température du processeur en sautant des horloges. (Vous voudrez probablement utiliser un pilote SpeedStep à la place).

Pour consulter la liste complète des modules disponibles, exécutez :

$ ls /usr/lib/modules/$(uname -r)/kernel/drivers/cpufreq/

Chargez le module approprié (consultez Modules du noyau pour plus de détails). Une fois le pilote cpufreq approprié chargé, des informations détaillées sur le(s) CPU(s) peuvent être affichées en exécutant

$ cpupower frequency-info

Réglage des fréquences maximales et minimales

Dans certains cas, il peut être nécessaire de définir manuellement les fréquences maximales et minimales.

Pour définir la fréquence d'horloge maximale ( est une fréquence d'horloge avec des unités : GHz, MHz) :

# cpupower frequency-set -u clock_freq

Pour définir la fréquence d'horloge minimale :

# cpupower frequency-set -d clock_freq

Pour régler le CPU pour qu'il fonctionne à une fréquence spécifiée :

# cpupower frequency-set -f clock_freq

Alternativement, vous pouvez définir la fréquence manuellement :

# echo valeur > /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq

Les valeurs disponibles peuvent être trouvées dans /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_frequencies ou similaire.

Configuration de l'augmentation de fréquence

Certains processeurs prennent en charge l'élévation de leur fréquence au-dessus du maximum normal pendant une courte période de temps, dans des conditions thermiques appropriées. Sur les processeurs Intel, cela s'appelle Turbo Boost, et sur les processeurs AMD, cela s'appelle Turbo-Core.

Réglage via sysfs (intel_pstate)

intel_pstate possède une interface spécifique au pilote pour interdire au processeur d'entrer dans les états P turbo :

# echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo

Réglage via sysfs (autres pilotes de mise à l'échelle)

Pour les pilotes de mise à l'échelle autres que intel_pstate, si le pilote prend en charge le boosting, l'attribut sera présent et pourra être utilisé pour désactiver/activer le boosting :

# echo 0 > /sys/devices/system/cpu/cpufreq/boost

Réglage via x86_energy_perf_policy

Sur les processeurs Intel, peut également être utilisé pour configurer Turbo Boost :

# x86_energy_perf_policy --turbo-enable 0

Politique de gestion

Les politiques de gestion sont des schémas de puissance qui déterminent la fréquence souhaitée pour le CPU. Certains demandent une fréquence constante, d'autres implémentent des algorithmes pour s'ajuster dynamiquement en fonction de la charge du système. Les politiques incluses dans le noyau sont les suivants :


PolitiqueDescription
performanceExécute le CPU à la fréquence maximale, obtenue à partir de .
powersaveLancez le processeur à la fréquence minimale, obtenue à partir de /sys/devices/system/cpu/cpuX/cpufreq/scaling_min_freq.
userspaceExécuter le CPU à des fréquences spécifiées par l'utilisateur, configurables via .
ondemandLa mise à l'échelle de la fréquence se fait dynamiquement en fonction de la charge actuelle. Il passe à la fréquence la plus élevée et peut ensuite revenir en arrière au fur et à mesure que le temps d'inactivité augmente.
conservativeFait évoluer la fréquence de façon dynamique en fonction de la charge actuelle. La fréquence augmente plus progressivement qu'avec ondemand.
schedutilSélection de la fréquence du CPU pilotée par l'ordonnanceur , .

Selon le pilote fréquence, l'une de ces politiques sera chargé par défaut :

  • pour les CPU Intel utilisant le pilote (Sandy Bridge et plus récents).
  • (pour Linux < 5.10) ou (depuis Linux 5.10) pour les CPU utilisant le pilote .
Attention: Utilisez les outils de surveillance du CPU (pour les températures, la tension, etc.) lorsque vous modifiez la politique par défaut.

Pour activer une politique particulière, exécutez :

# cpupower frequency-set -g governor

Alternativement, vous pouvez activer manuellement une politique sur chaque CPU disponible :

# echo governor > /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

où est le nom de la politique, mentionné dans le tableau ci-dessus, que vous souhaitez activer.

Réglage de la politique à la demande

Consultez la documentation du noyau pour plus de détails.

Seuil de commutation

Pour définir le seuil de passage à une autre fréquence :

# echo -n percent > /sys/devices/system/cpu/cpufreq/governor/up_threshold

Pour définir le seuil pour descendre à une autre fréquence :

# echo -n percent > /sys/devices/system/cpu/cpufreq/governor/down_threshold

Taux d'échantillonnage

Le taux d'échantillonnage détermine la fréquence à laquelle la politique vérifie le réglage de l'UC. est un paramètre qui multiplie le taux d'échantillonnage lorsque le CPU est à sa fréquence d'horloge la plus élevée, ce qui retarde l'évaluation de la charge et améliore les performances. Les valeurs autorisées pour sont de 1 à 100000. Ce paramètre n'a aucun effet sur le comportement à des fréquences/charges inférieures du CPU.

Pour lire la valeur (par défaut = 1), exécutez :

$ cat /sys/devices/system/cpu/cpufreq/ondemand/sampling_down_factor

Pour définir la valeur, exécutez :

# echo -n valeur > /sys/devices/system/cpu/cpufreq/ondemand/sampling_down_factor

Rendre les changements permanents

Pour avoir la mise à l'échelle désirée activée au démarrage, les options des modules du noyau et systemd-tmpfiles sont des méthodes classiques.

Par exemple, en changeant la valeur de up_threshold à 10 :

Cependant, comme indiqué dans systemd-tmpfiles, dans certains cas, des conditions de concurrence peuvent exister et on peut utiliser udev pour les éviter. Par exemple :

Pour que la règle soit déjà appliquée dans le initramfs, ajoutez le fichier à votre mkinitcpio.conf, comme dans un exemple différent dans Udev (Français)#Sortie de débogage.

Astuce:

Intel performance and energy bias hint

Le Intel performance and energy bias hint (EPB) est une interface fournie par les processeurs Intel pour permettre à l'utilisateur de spécifier le compromis puissance-performance souhaité, sur une échelle de 0 (performances maximales) à 15 (économies d'énergie maximales). Le registre EPB est une autre couche de gestion des performances fonctionnant indépendamment de l'échelle de fréquence. Il influence le degré d'agressivité de la sélection de l'état P et de l'état C, et informe la prise de décision interne spécifique au modèle qui affecte la consommation d'énergie.

Les valeurs communes et leurs alias, tels que reconnus par sysfs et x86_energy_perf_policy sont :

Valeur EPB Chaîne de caractères
0 performance
4 balance-performance
6 normal, default
8 balance-power
15 power

Paramétrage via sysfs

L'EPB peut être défini en utilisant un attribut sysfs :

# echo epb > /sys/devices/system/cpu/cpu*/power/energy_perf_bias

Réglage via x86_energy_perf_policy

Avec  :

# x86_energy_perf_policy epb

Réglage via cpupower

Avec  :

# cpupower set -b epb_value

Autres paramètres d'énergie x86

Activez les états P matériels avec  :

# x86_energy_perf_policy -H 1
# x86_energy_perf_policy -U 1

Définir la politique "par défaut" :

Les changements sont temporaires. Consultez pour plus d'informations.

Pilote d'inactivité du CPU

Le pilote d'inactivité du processeur . est utilisé automatiquement pour les processeurs Intel modernes à la place du pilote . Ce pilote est actuellement utilisé automatiquement pour les CPU Sandy Bridge et plus récents. Le pilote peut ignorer les paramètres C-State du BIOS. Si vous rencontrez un problème en utilisant ce pilote, ajoutez à la ligne de votre noyau.

Interaction avec les événements ACPI

Les utilisateurs peuvent configurer les politiques de mise à l'échelle pour qu'ils commutent automatiquement en fonction de différents événements ACPI tels que la connexion de l'adaptateur secteur ou la fermeture du couvercle d'un ordinateur portable. Un exemple rapide est donné ci-dessous, mais il peut être utile de lire l'article complet sur acpid.

Les événements sont définis dans . Si le paquet est installé, le fichier devrait déjà exister et être exécutable. Par exemple, pour changer la politique de performance à lorsque l'adaptateur secteur est déconnecté et le changer à nouveau s'il est reconnecté :

Dépannage

  • Certaines applications, comme ntop, ne répondent pas bien à modification automatique de la fréquence. Dans le cas de ntop, cela peut entraîner des défauts de segmentation et beaucoup d'informations perdues, car même la politique on-demand ne peut pas changer la fréquence assez rapidement lorsqu'un grand nombre de paquets arrivent soudainement à l'interface réseau surveillée et ne peuvent pas être traités par la vitesse actuelle du processeur.
  • Certains processeurs peuvent présenter des performances médiocres avec les paramètres par défaut de la politique on-demand (par exemple, les vidéos Flash ne sont pas lues correctement ou les animations des fenêtres bégaient). Au lieu de désactiver complètement la mise à l'échelle de la fréquence pour résoudre ces problèmes, l'agressivité de la mise à l'échelle de la fréquence peut être augmentée en diminuant la variable sysctl up_threshold pour chaque CPU. Consultez comment modifier le seuil de la politique à la demande.
  • Parfois, la politique à la demande n'accélère pas à la fréquence maximale mais un cran en dessous. Cela peut être résolu en définissant la valeur max_freq légèrement plus élevée que le maximum réel. Par exemple, si la gamme de fréquence du CPU est de 2.00 GHz à 3.00 GHz, définir max_freq à 3.01 GHz peut être une bonne idée.
  • Certaines combinaisons de pilotes ALSA et de puces sonores peuvent provoquer des sauts audio lorsque la politique change de fréquence, le retour à une politique non changeant semble arrêter les sauts audio.

Limitation de fréquence du BIOS

Certaines configurations CPU/BIOS peuvent avoir des difficultés à passer à la fréquence maximale ou à passer à des fréquences plus élevées. Ceci est très probablement dû à des événements du BIOS indiquant au système d'exploitation de limiter la fréquence, ce qui a pour conséquence de définir à une valeur inférieure.

Soit vous avez effectué un réglage spécifique dans l'utilitaire de configuration du BIOS (fréquence, gestion thermique, etc.), soit vous pouvez accuser un BIOS bogué ou obsolète, soit le BIOS peut avoir une raison sérieuse d'étrangler le processeur de son propre chef.

De telles raisons peuvent être (en supposant que votre machine est un ordinateur portable) que la batterie est retirée (ou presque morte) et que vous n'avez que l'adaptateur secteur. Dans ce cas, une source de courant alternatif faible peut ne pas fournir assez d'électricité pour répondre aux demandes de pointe extrêmes de l'ensemble du système et, comme il n'y a pas de batterie pour aider, cela peut entraîner une perte de données, une corruption des données ou, dans le pire des cas, des dommages matériels !

Tous les BIOS ne limitent pas la fréquence du CPU dans ce cas, mais par exemple la plupart des Thinkpads IBM/Lenovo le font. Reportez-vous à thinkwiki pour plus d'informations sur ce sujet.

Si vous avez vérifié qu'il ne s'agit pas simplement d'un réglage bizarre du BIOS et que vous savez ce que vous faites, vous pouvez faire en sorte que le noyau ignore ces limitations du BIOS.

Un paramètre spécial doit être transmis au module processeur.

Pour essayer temporairement, changez la valeur dans de à .

Pour le paramétrer de manière permanente, Kernel module (Français)#Définir les options du module décrit les alternatives. Par exemple, vous pouvez ajouter à votre ligne de démarrage du noyau, ou créer

Voir aussi

gollark: See, you're acting as if that is in fact bad and worthy of ridiculous palaiologocal repercussions.
gollark: What do you expect me to do apart from, as I have previously done, occasionally pointing out bees occurring and unhelpfully threatening to delete messages in BAD™ discussions?
gollark: I have no actual power as a Helper, see.
gollark: It doesn't do very much.
gollark: Don't worry, all can read it from browser caches.
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.