Les configurations par défaut du noyau Ubuntu sont telles que le gouverneur de mise à l'échelle de la fréquence du processeur sera utilisé lors du démarrage. La section appropriée du fichier de configuration du noyau ( /boot/config-4.15.0-36-generic
, dans cet exemple) est:
#
# CPU Frequency scaling
#
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 is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set
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
#
# CPU frequency scaling drivers
#
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 également par défaut lors du démarrage, le ondemand
service est exécuté. Il dort pendant 1 minute, puis modifie le gouverneur de mise à l'échelle sur interactive
, ondemand
ou powersave
, selon la disponibilité. À son tour, la disponibilité dépend du pilote de mise à l'échelle de fréquence CPU que vous utilisez. Le code est (à plusieurs endroits, recherchez ondemand
):
#! /bin/sh
### BEGIN INIT INFO
# Provides: ondemand
# Required-Start: $remote_fs $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Set the CPU Frequency Scaling governor to "ondemand"
### END INIT INFO
# Don't run if we're going to start an Android LXC container:
[ ! -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 # probably enough time for desktop login
[ -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 "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
;;
*)
echo "Usage: $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 est antérieur au pilote intel_pstate, à une époque où, de loin, le pilote de mise à l'échelle de fréquence dominant était le pilote acpi-cpufreq, et "ondemand" était le gouverneur par défaut d'Ubuntu préféré.
Ainsi, une façon de démarrer et de continuer à utiliser le gouverneur de mise à l'échelle de la fréquence du processeur est de désactiver le service qui s'en éloigne (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
Removed /etc/systemd/system/multi-user.target.wants/ondemand.service.
redémarrer, puis vérifier à nouveau (en étant sûr d'attendre 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 mise à l'échelle de fréquence CPU acpi-cpufreq. Si vous utilisez le pilote intel_pstate, sans gouverneur ondemand, le gouverneur powersave sera utilisé par défaut.
Question anticipée: pourquoi les fréquences de mon processeur évoluent-elles, même lorsque j'utilise le régulateur de performances?
Réponse: Les processeurs modernes mettent à l'échelle la fréquence du processeur, même en mode performance et en fonction de la profondeur de l'état inactif dans lequel ils entrent. Si vous voulez vraiment verrouiller la fréquence du processeur, désactivez tous les états inactifs 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 à économie d'énergie en fonction du travail que je fais. 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
/etc/rc.local
dans cette question, ou avez-vous fait cette même faute de frappe lors de sa création? Cette question peut ne pas être spécifique à 18.04 et ne devrait probablement pas être un rapport de bogue plutôt qu'une question ici. Je pense que la question pourrait être envisagée pour la réouverture si vous la modifiez pour ajouter plus de détails.