3.2. Utilisation des gouverneurs CPUfreq

L'une des manières les plus efficaces de réduire la consommation d'énergie et la sortie de chaleur sur votre système est d'utiliser CPUfreq. CPUfreq — aussi connu sous le nom de mise à l'échelle de la vitesse du CPU — permet d'ajuster la vitesse d'horloge du processeur spontanément. Ceci permet au système de fonctionner à une vitesse d'horloge réduite afin d'économiser de l'énergie. Les règles pour les changements de fréquences, que ce soit vers une vitesse d'horloge plus ou moins élevée, ou à quel moment les changer, sont définies par le gouverneur CPUfreq.
Le gouverneur définit les caractéristiques du CPU du système, qui, elles-mêmes, affecteront la performance du CPU. Chaque gouverneur possède son propre comportement, but, et sa propre pertinence en termes de charge de travail. Cette section décrit comment choisir et configurer un gouverneur CPUfreq, les caractéristiques de chaque gouverneur, et le type de charge de travail que chaque gouverneur peut effectuer.

3.2.1. Types de gouverneurs CPUfreq

Cette section liste et décrit les différents types de gouverneurs CPUfreq disponibles dans Red Hat Enterprise Linux 7.
cpufreq_performance

Le gouverneur Performance force le CPU à utiliser la plus haute fréquence d'horloge possible. Cette fréquence est statiquement réglée, et ne changera pas. Ainsi, ce gouverneur en particulier n'offre aucune économie d'énergie. Il n'est utile que pour de longues heures de charges de travail intensives, et lorsque le CPU est rarement (ou n'est pas) inactif.

cpufreq_powersave

En revanche, le gouverneur Powersave force le CPU à utiliser la plus basse fréquence d'horloge possible. Cette fréquence est réglée statiquement, et ne changera pas. Ainsi, ce gouverneur en particulier offre une économie d'énergie maximale, mais ceci au prix d'une performance de CPU plus basse.

Le terme « Powersave » (économie d'énergie) peut être trompeur, même si, en principe, un processeur lent avec une pleine charge consomme plus d'énergie qu'un processeur rapide non chargé. Ainsi, tandis qu'il peut être recommandable de paramétrer le processeur pour qu'il utilise le gouverneur « Powersave » pendant les moments de basse activité, toute haute charge de travail inattendue à ce moment peut, en réalité, causer au système de consommer plus d'énergie.
Le gouverneur « Powersave » est, en d'autres termes, plus un  « limiteur de vitesse » qu'un « économiseur d'énergie ». Il est particulièrement utile sur les systèmes et environnements où la surchauffe est un problème.
cpufreq_ondemand

Le gouverneur Ondemand est un gouverneur dynamique qui permet au CPU d'atteindre une fréquence d'horloge maximale lorsque la charge du système est importante, et d'atteindre une fréquence minimale lorsque le système est inactif. Tandis que ceci permet d'ajuster la consommation d'énergie en fonction de la charge du système, cette opération se produit au détriment de la latence entre les changements de fréquences. Ainsi, la latence peut contrebalancer les bénéfices de performance/d'énergie du gouverneur Ondemand si le système change trop souvent entre inactivité et charges de travail intenses.

Pour la plupart des systèmes, le gouverneur Ondemand peut fournir le meilleur compromis qui soit entre émissions de chaleur, consommation d'énergie, performance, et manageabilité. Lorsque le système est uniquement occupé à certains moments spécifiques de la journée, le gouverneur Ondemand changera automatiquement entre les fréquences maximales et minimales en fonction de la charge et sans la moindre autre intervention.
cpufreq_userspace

Le gouverneur Userspace permet aux programmes de l'espace utilisateur (ou à tout autre processus exécuté en tant que root) de définir la fréquence. De tous les gouverneurs, Userspace est le plus personnalisable ; et selon sa configuration, il peut fournir le meilleur équilibre entre performance et consommation pour votre système.

cpufreq_conservative

Tout comme le gouverneur Ondemand, le gouverneur Conservative ajuste aussi la fréquence de l'horloge en fonction de l'utilisation (comme le gouverneur Ondemand). Cependant, tandis que gouverneur le fait d'une manière plus aggressive (du maximum au minimum, et vice-versa), le gouverneur Conservative change de fréquence de manière plus graduelle.

Ceci signifie que plutôt que de simplement choisir entre maximum et minimum, le gouverneur Conservative s'ajustera à une fréquence d'horloge qu'il reconnaitra appropriée en fonction de la charge. Alors que ceci peut offrir d'importantes économies d'énergie, cette opération est effectuée aux dépens d'une latence bien plus élevée que celle du gouverneur Ondemand.

Note

Vous pouvez activer un gouverneur à l'aide des tâches cron. Ceci vous permettra de définir automatiquement des gouverneurs particuliers à des moments spécifiques de la journée. Ainsi, vous pouvez spécifier un gouverneur de basse latence pendant les périodes d'inactivité (par exemple hors des heures de travail traditionnelles), puis retourner à un gouverneur de fréquence plus importante durant les heures de charges de travail plus importantes.
Pour des instructions sur comment activer un gouverneur spécifique, veuillez vous reporter à Section 3.2.2, « Installation de CPUfreq ».

3.2.2. Installation de CPUfreq

Tous les pilotes CPUfreq sont construits à part entière du package kernel-tools, et sont sélectionnés automatiquement, donc pour intaller CPUfreq, vous avez juste besoin de sélectionner un gouverneur.
Vous pourrez voir quels gouverneurs sont disponibles pour un CPU spécifique avec :
cpupower frequency-info --governors
Vous pourrez alors activer un de ces gouverneurs sur tous les CPU avec :
cpupower frequency-set --governor [governor]
Pour activer un gouverneur sur des coeurs spécifiques, utiliser -c en précisant une plage ou une liste séparée par des virgules de numéros de CPU. Par exemple, pour activer le gouverneur Userspace pour les CPUs 1-3 et 5, voici la commande :
cpupower -c 1-3,5 frequency-set --governor cpufreq_userspace

3.2.3. Paramétrer la politique CPUfreq et la vitesse

Une fois que vous aurez choisi le gouverneur CPUfreq approprié, vous pourrez voir la vitesse du processeur et les informations sur la stratégie avec la commande cpupower frequency-info, vous pourrez aussi régler la vitesse de chaque processeur plus précisément avec des options pour cpupower frequency-set.
Pour cpupower frequency-info, les options suivantes sont disponibles :
  • --freq — Affiche la vitesse actuelle du CPU en fonction du cœur de CPUfreq, en KHz.
  • --hwfreq — Affiche la vitesse actuelle du CPU en fonction du matériel, en KHz (uniquement disponible en tant que root).
  • --driver — Affiche quel pilote de CPUfreq est utilisé pour paramétrer la fréquence sur ce CPU.
  • --governors — Affiche les gouverneurs CPUfreq disponibles dans ce noyau. Si vous souhaitez utiliser un gouverneur CPUfreq qui n'est pas listé dans ce fichier, voir Section 3.2.2, « Installation de CPUfreq » pour obtenir des instructions.
  • --affected-cpus — Répertorie les CPU nécessitant un logiciel de coordination de fréquence.
  • --policy — Affiche la portée de la stratégie CPUfreq actuelle, en KHz, ainsi que le gouverneur actuellement actif.
  • --hwlimits — Répertorie les fréquences disponibles pour le CPU, en KHz.
Pour cpupower frequency-set, les options suivantes sont disponibles :
  • --min <freq> et --max <freq> — Définit les limites de la stratégie du CPU, en KHz.

    Important

    Lors de la définition des limites de la politique, vous devriez définir --max avant --min.
  • --freq <freq> — Définit une vitesse d'horloge spécifique pour le CPU, en KHz. Vous pouvez uniquement définir une vitesse située dans les limites de la stratégie du CPU (selon --min et --max).
  • --governor <gov> — Définit un nouveau gouverneur CPUfreq.

Note

Si le paquetage cpupowerutils n'est pas déjà installé, les paramètres CPUfreq peuvent être affichés à partir des réglables se trouvant dans /sys/devices/system/cpu/[cpuid]/cpufreq/. Les paramètres et valeurs peuvent être modifiés en écrivant sur ces réglables. Par exemple, pour définir la vitesse d'horloge minimum du cpu0 sur 360 KHz, veuillez utiliser :
echo 360000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq