Les configurations par défaut du noyau Ubuntu sont telles que le gouverneur de fréquence CPU de performance sera utilisé lors du démarrage. La section pertinente du fichier de configuration du noyau (/boot/config-4.15.0-36-generic
, dans cet exemple) est :
#
# Échelle de fréquence CPU
#
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_GOV_ATTR_SET=y
CONFIG_CPU_FREQ_GOV_COMMON=y
CONFIG_CPU_FREQ_STAT=y
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE n'est pas activé
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE n'est pas activé
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND n'est pas activé
# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE n'est pas activé
# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL n'est pas activé
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
#
# Pilotes de régulation de fréquence CPU
#
CONFIG_X86_INTEL_PSTATE=y
CONFIG_X86_PCC_CPUFREQ=y
CONFIG_X86_ACPI_CPUFREQ=y
CONFIG_X86_ACPI_CPUFREQ_CPB=y
CONFIG_X86_POWERNOW_K8=y
CONFIG_X86_AMD_FREQ_SENSITIVITY=m
CONFIG_X86_SPEEDSTEP_CENTRINO=y
CONFIG_X86_P4_CLOCKMOD=m
Mais aussi par défaut lors du démarrage, le service ondemand
est exécuté. Il attend pendant 1 minute puis change le gouverneur de fréquence à soit interactive
, ondemand
ou powersave
, en fonction de la disponibilité. La disponibilité dépend du pilote de régulation de fréquence CPU que vous utilisez. Le code est (à plusieurs emplacements, cherchez ondemand
) :
#! /bin/sh
### INFORMATIONS SUR L'INITIALISATION
# Fournit : ondemand
# Required-Start: $remote_fs $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Description-Courte: Règle le gouverneur de régulation de fréquence CPU sur "ondemand"
### FIN INFORMATIONS SUR L'INITIALISATION
# Ne pas exécuter si nous allons démarrer un conteneur Android LXC :
[ ! -f /etc/init/lxc-android-config.conf ] || exit 0
PATH=/sbin:/usr/sbin:/bin:/usr/bin
. /lib/init/vars.sh
. /lib/lsb/init-functions
AVAILABLE="/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors"
DOWN_FACTOR="/sys/devices/system/cpu/cpufreq/ondemand/sampling_down_factor"
case "$1" in
start)
start-stop-daemon --start --background --exec /etc/init.d/ondemand -- background
;;
background)
sleep 60 # probablement assez de temps pour une connexion de bureau
[ -f $AVAILABLE ] || exit 0
read governors < $AVAILABLE
case $governors in
*interactive*)
GOVERNOR="interactive"
break
;;
*ondemand*)
GOVERNOR="ondemand"
case $(uname -m) in
ppc64*)
SAMPLING=100
;;
esac
break
;;
*powersave*)
GOVERNOR="powersave"
break
;;
*)
exit 0
;;
esac
for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
do
[ -f $CPUFREQ ] || continue
echo -n $GOVERNOR > $CPUFREQ
done
if [ -n "$SAMPLING" ] && [ -f $DOWN_FACTOR ]; then
echo -n $SAMPLING > $DOWN_FACTOR
fi
;;
restart|reload|force-reload)
echo "Erreur : l'argument '$1' n'est pas supporté" >&2
exit 3
;;
stop)
;;
*)
echo "Utilisation : $0 start|stop" >&2
exit 3
;;
esac
Pourquoi est-il appelé "ondemand", mais il définit d'autres gouverneurs (par exemple avec le pilote intel_pstate il définira le gouverneur powersave) ? Parce que cet outil pré-date le pilote intel_pstate, remontant à une époque où, de loin, le pilote de régulation de fréquence prédominant était le pilote acpi-cpufreq, et "ondemand" était le gouverneur par défaut préféré d'Ubuntu.
Donc, une façon de démarrer et de rester en utilisant le gouverneur de fréquence CPU de performance est de désactiver le service qui le change (ce qui a également été mentionné dans une autre réponse) :
Avant :
~$ systemctl list-units --all --type=service | grep ondemand
ondemand.service loaded inactive dead Set the CPU Frequency Scaling governor
~$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
ondemand
ondemand
Désactivez le service :
~$ sudo systemctl disable ondemand
Suppression de /etc/systemd/system/multi-user.target.wants/ondemand.service.
redémarrez, puis vérifiez à nouveau (en attendant une minute après le redémarrage) :
doug@s17:~$ systemctl list-units --all --type=service | grep ondemand
doug@s17:~$
doug@s17:~$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
performance
performance
Remarque : les exemples de cette réponse proviennent d'un ordinateur qui utilise le pilote de régulation de fréquence CPU acpi-cpufreq. Si vous utilisez le pilote intel_pstate, sans le gouverneur ondemand, le gouverneur powersave sera utilisé par défaut.
Question anticipée : Pourquoi mes fréquences CPU varient-elles, même lors de l'utilisation du gouverneur de performance ?
Réponse : Les processeurs modernes ajustent la fréquence CPU, même en mode performance et en fonction de la profondeur de l'état d'inactivité dans lequel ils entrent. Si vous souhaitez vraiment verrouiller la fréquence CPU, désactivez tous les états d'inactivité plus profonds que 0. Cependant, notez que cela coûtera une énorme quantité d'énergie.
Personnellement, et comme mentionné dans une autre réponse, j'utilise le gouverneur de performance ou le gouverneur powersave en fonction du travail que j'effectue. Mes scripts sont un peu différents :
$ cat set_cpu_performance
#! /bin/bash
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
for file in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo "performance" > $file; done
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
et :
$ cat set_cpu_powersave
#! /bin/bash
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
for file in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo "powersave" > $file; done
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
exemple d'utilisation (sur un ordinateur utilisant le pilote intel_pstate) :
$ sudo ./set_cpu_performance
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
performance
performance
performance
performance
performance
performance
performance
performance