Cpupower

De ArchwikiFR
(Redirigé depuis Cpufreq)


Afin, principalement, d'augmenter l'autonomie d'un portable, les processeurs actuels disposent de technologies pouvant influer sur la fréquence du cpu pour mieux réguler la consommation et le dégagement de chaleur selon l'utilisation. Notons aussi que cette technologie existe pour les postes fixes, bien que le gain en énergie soit marginal, contrairement à la différence de chaleur évacuée. :)

Deux technologies existent, une pour chaque constructeur (les plus connus) :

Sommaire

Pré-requis

Important: cpufrequtils est déprécié et il est remplacé par cpupower. Ce dernier ajoute également des fonctionnalités.
Important: Depuis le noyau 3.4, les modules nécessaires sont automatiquement lancés et le governor ondemand est activé par défault.

Pour pouvoir manipuler la fréquence du cpu, il faut installer cpupower :

pacman -S cpupower

Configuration

La configuration se passe dans le fichier: /etc/default/cpupower

Fichier: /etc/default/cpupower
# valid governors:
#  ondemand, performance, powersave,
#  conservative, userspace
governor="ondemand"

# valid suffixes: Hz, kHz (default), MHz, GHz, THz
min_freq="1.87GHz"
max_freq="3GHz"

# use freq to set up the exact cpu frequency using it with userspace governor
#freq=

governor correspond à la politique de gestion :

  • ondemand: toujours à la fréquence mini, sauf en cas de sollicitation de la part d'un processus. Retombe aussitôt (performances affectées).
  • performance: toujours à la fréquence max.
  • powersave: toujours à la fréquence mini.
  • conservative: ressemble à ondemand sauf que le changement de fréquence se fait par paliers avec un petit délai, et non par sauts. (n'a pas le souci de performance d'ondemand)
  • userspace: délègue la tâche à un programme dans l'espace utilisateur.

Tester

Pour tester avant de redémarrer (Amd: remplacer acpi_cpufreq par powernow-kX) :

modprobe acpi_cpufreq

Une fois le module chargé, on peut vérifier la prise en compte par :

$ cpupower frequency-info
cpufrequtils 002: cpufreq-info (C) Dominik Brodowski 2004-2006
Veuillez rapportez les erreurs et les bogues à linux@brodo.de, s'il vous plait.
analyse du CPU 0 :
  pilote : acpi-cpufreq
  CPUs qui doivent changer de fréquences en même temps : 0
  limitation matérielle : 1.87 GHz - 3.07 GHz
  plage de fréquence : 3.07 GHz, 2.67 GHz, 2.40 GHz, 2.13 GHz, 1.87 GHz
  régulateurs disponibles : ondemand, performance
  tactique actuelle : la fréquence doit être comprise entre 1.87 GHz et 3.00 GHz.
                  Le régulateur "ondemand" est libre de choisir la vitesse
                  dans cette plage de fréquences.
  la fréquence actuelle de ce CPU est 2.13 GHz.
analyse du CPU 1 :
  pilote : acpi-cpufreq
  CPUs qui doivent changer de fréquences en même temps : 1
  limitation matérielle : 1.87 GHz - 3.07 GHz
  plage de fréquence : 3.07 GHz, 2.67 GHz, 2.40 GHz, 2.13 GHz, 1.87 GHz
  régulateurs disponibles : ondemand, performance
  tactique actuelle : la fréquence doit être comprise entre 1.87 GHz et 3.00 GHz.
                  Le régulateur "ondemand" est libre de choisir la vitesse
                  dans cette plage de fréquences.
  la fréquence actuelle de ce CPU est 2.13 GHz.

Vous pouvez vous inspirer des lignes limitation matérielle et plage de fréquence pour configurer cpufreq.

Pour spécifier une politique de gestion, on peut le faire (en root) par le biais de la commande cpupower frequency-set:

cpupower -c 0 frequency-set -g performance

ou directement:

echo "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

Et réutiliser cpupower frequency-info pour vérifier.

Si ça fonctionne, il n'y a plus qu'à modifier /etc/conf.d/cpupower puis lancer :

systemctl start cpupower

Jusque là, on a spécifié une seule politique de gestion des fréquences et on demande au système de s'y tenir ; mais si on veut pousser un peu la configuration et avoir un contrôle plus fin sur la fréquence du processeur, on peut utiliser le service cpufreqd ou laisser l'utilisateur modifier la configuration.

Avancé

Daemon

Pour lancer le service automatiquement au démarrage, ous devez lancer la commande suivante :

systemctl enable cpupower.service

cpufreqd

On commence par installer le paquet AUR cpufreqd.

Puis, on le rajoute aux services à lancer au démarrage :

systemctl enable cpufreqd

cpufreqd remplace le service cpufreq (sans le d)

Ce paquet est fourni avec un fichier de configuration assez simple dans sa construction (/etc/cpufreqd.conf) et qui conviendra sûrement à la majorité des utilisations.

Sans être exhaustif, le fichier comporte :

  • des profiles définissant la politique à appliquer.
[Profile]
name=On Demand High
minfreq=40%
maxfreq=100%
policy=ondemand
[/Profile]

L'exemple est assez explicite.

  • des règles regroupant un certain nombre de critères à tester.
[Rule]
name=AC Off - High Power
ac=off
battery_interval=70-100
profile=On Demand High
[/Rule]

Cette règle permet d'appliquer le profile donné en exemple pour un fonctionnement sur batterie avec un taux de charge supérieur à 70%.

Une fois le fichier configuré aux petits oignons, il suffit de démarrer le service :

systemctl start cpufreqd

Espace utilisateur

Avant d'utiliser les outils permettant de modifier la fréquence dans l'espace utilisateur, il faut s'assurer que les politiques qui vous intéressent (qui sont en fait des modules) soient chargées :

  • cpufreq_powersave
  • cpufreq_ondemand
  • cpufreq_conservative

Le governor performance étant par défaut et le cpufreq_userspace étant obligatoire.

modprobe cpufreq_powersave cpufreq_ondemand cpufreq_conservative cpufreq_userspace

Trayfreq

Trayfreq-fr est un outil permettant de gérer la fréquence du processeur comme l'applet de Gnome.

trayfreq-fr1.jpg
trayfreq-fr2.jpg

Vous pouvez installer le paquet trayfreq-fr depuis AUR.

Configuration:

Pour gérer finement ce que doit afficher l’icône, il faut modifier le fichier de configuration: ~/.trayfreq.config. Vous pouvez éventuellement vous servir du fichier exemple:

cp {/usr/share/trayfreq/,~/.}trayfreq.config 

Fichier: ~/.trayfreq.config
[battery]                 
show=1                    # 1 pour afficher l'icône de la batterie , 0 pour la cacher
governor=powersave        # Le profil à charger quand la batterie se décharge
[events]                  # événement (bouton gauche de la souris sur l'icône.)
activate=/usr/bin/xterm   # ici on lance /usr/bin/xterm.
[governor]
default=ondemand          # C'est le profil par défaut que trayfreq utilise au démarrage
[ac]                      # Branché 
governor=ondemand 
[frequency]
default=800000            # Fréquence par défaut
Note: Un fichier .desktop est installé dans /etc/xdg/autostart/. Il démarrera automatiquement si vous utilisez un environnement compatible XDG, sinon, il faut rajouter trayfreq dans les programmes démarrés.

BatterySystemTray & UCpufreq

BatterySystemTray est une application de gestion de batterie et supporte aussi la modification de la fréquence et du profile. La gestion du cpu est faite à l'aide du daemon UCpufreq, lancé automatiquement par dbus quand le service sera réclamé.

Important: depuis que cpufrequtils est déprécié et a été remplacé par cpupower. ucpufreq doit être compilé avec qmake "USE_CPUPOWER=1" .
Batterysystemtray Menu Frequence

Une fois ces deux applications installées, lancez "ptbatterysystemtray" et rendez-vous dans l'onglet "UCpufreq" ou sur l'icône dans la zone de notification pour gérer votre profile.

Configuration avancée

La configuration de cpufreq ne se limite pas seulement à changer la politique de gestion (governor), on peut l'affiner en modifiant directement les valeurs utilisées par les governors. Ces paramètres sont accessibles depuis :

/sys/devices/system/cpu/cpu*/cpufreq/{ondemand,conservative}

cpu* représente le cpu sur lequel est appliqué la politique.
On modifie ces valeurs par un simple :

echo x > chemin_vers_valeur
Valeur ondemand conservative Description Valeur par défaut
ignore_nice_load x x Prise en compte des processus lancés avec nice (0) ou pas (1) 0
sampling_rate x x Intervalle de temps en micro-secondes pour relever la charge cpu 160000
up_threshold x x Seuil de charge au delà duquel la décision de monter la fréquence est prise 80
down_threshold x Seuil de charge au dessous duquel la décision de descendre la fréquence est prise 20
sampling_down_factor x Nombre de mesures (cf. sampling_rate) avant la prise de décision 1
freq_step x Palier de changement de fréquence 5
Attention: Le changement de ces valeurs peut entraîner une instabilité !


Liens

cpu-freq, Kernel Documentation (en)

Outils personnels
Autres langues