J'essaie de définir les performances du gouverneur pour le processeur dans 18.04, le problème est qu'il ne survit jamais aux redémarrages.
J'ai essayé de suivre ces étapes dans une réponse à cette question Comment définir "Performance" au lieu de "Powersave" par défaut? mais lorsque je redémarre l'ordinateur, le gouverneur de la CPU revient à Powersaver.
J'ai aussi essayé de créer un fichier appelé /etc/rc.local
avec la ligne:
cpupower frequency-set --governor performance
Cela aussi ne survit pas aux redémarrages.
Comment puis-je faire ceci?
Sudo apt-get install cpufrequtils
echo 'GOVERNOR="performance"' | Sudo tee /etc/default/cpufrequtils
Sudo systemctl disable ondemand
Dans /etc/rc.local
insérez ces commandes:
sleep 120
cpupower frequency-set --governor performance
Quelle que soit la raison, mon processeur Intel Skylake démarre toujours en mode Performance, puis bascule automatiquement en mode Powersave à la minute.
Si vous définissez le mode sur Performance au démarrage, il sera remplacé environ 1 minute Temps écoulé en mode Powersave .
Dans le GIF ci-dessous, la vitesse du processeur de plus de 3000 MHz au démarrage apparaît vers le haut. Le temps de montée apparaît vers le bas. Lorsque le temps mort atteint environ 1 minute, vous voyez une diminution de la fréquence du processeur. :
Créez ce script dans /usr/local/bin/watch-gov.sh
:
#! /bin/bash
# NAME: watch-gov.sh
# PATH: /usr/local/bin
# DESC: Set governnor to performance and watch for change
# Ask Ubuntu question: https://askubuntu.com/questions/1021748/set-cpu-governor-to-performance-in-18-04/1084727#1084727
# CALL: called from `/etc/rc.local`
# DATE: Created Oct 18, 2018.
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
last_gov=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)
Uptime=$(uptime)
echo "watch-gov.sh: Set to performance at $Uptime " > /tmp/watch-gov.log
for ((i=0; i<300; i++)) ; do
curr_gov=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)
if [ $last_gov != $curr_gov ] ; then
last_gov=$curr_gov
Uptime=$(uptime)
echo "watch-gov.sh: Current governor: $last_gov Uptime: $Uptime" >> \
/tmp/watch-gov.log
fi
sleep 1
done
Appelez le script dans /etc/rc.local
avant la commande exit 0
(expliquée en détail ci-dessous).
Une minute après la connexion, regardez le résultat:
$ cat /tmp/watch-gov.log
watch-gov.sh: Set to performance at 17:50:09 up 0 min, 0 users, load average: 0.00, 0.00, 0.00
watch-gov.sh: Current governor: powersave Uptime: 17:51:09 up 1 min, 1 user, load average: 1.89, 0.62, 0.22
La confirmation de ce réponse indique que cette force d'une minute vers le gouverneur powersave
est contrôlée par /etc/init.d/ondemand
.
Le moyen le plus simple de rester en mode Performance consiste à éditer /etc/rc.local
et à insérer ces lignes avant la dernière ligne contenant exit 0
:
sleep 120 # Give CPU startup routines time to settle.
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
Enregistrez le fichier et redémarrez.
Si vous insérez les nouvelles lignes après exit 0
, elles ne seront jamais exécutées.
Votre machine fonctionnera probablement entre 10 et 15 degrés Celsius.
Vous devrez peut-être supprimer d'autres programmes modifiant la fréquence du processeur s'ils remplacent vos paramètres de performance dans /etc/rc.local
Ce que j'ai fait est d'utiliser le fichier /etc/rc.local
Pour vous aider à trouver vos chemins, utilisez:
find / -name scaling_governor
find / -name scaling_max_freq
Cela fonctionne pour ma configuration, mais il vous suffit de la modifier pour votre configuration.
J'ai ajouté à /etc/rc.local en utilisant nano:
# Set CPU Governor and Freq at boot up
echo "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo 1500000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 2000000 > /sys/devices/system/cpu/cpu4/cpufreq/scaling_max_freq
echo "performance" > /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor
directement sous la ligne Shebang. Fermez nano avec Ctrl-X et Y pour sauvegarder
Puis pour 18.04 (peut ne pas fonctionner sur 16.04) sur la ligne de commande, exécutez:
systemctl disable ondemand
Ensuite, sur la ligne de commande - lisez /etc/rc.local puis redémarrez:
/etc/rc.local
reboot
si /etc/rc.local induis et erreurs alors assurez-vous que c'est chmod + x /etc/rc.local
J'utilise ce script bash pour définir le gouverneur performance
:
#!/bin/bash
Sudo cpufreq-set --cpu 0 --governor performance
Sudo cpufreq-set --cpu 1 --governor performance
Sudo cpufreq-set --cpu 2 --governor performance
Sudo cpufreq-set --cpu 3 --governor performance
Sudo cpufreq-set --cpu 4 --governor performance
Sudo cpufreq-set --cpu 5 --governor performance
Sudo cpufreq-set --cpu 6 --governor performance
Sudo cpufreq-set --cpu 7 --governor performance
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
Make est exécutable chmod +x cpu.sh
et s’exécute à tout moment, selon les besoins (juste après chaque démarrage/redémarrage de l’ordinateur).
Les configurations de noyau Ubuntu par défaut sont telles que le régulateur d’échelle de fréquence du processeur 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 la suivante:
#
# 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 aussi par défaut lors du démarrage, le service ondemand
est exécuté. Il dort pendant 1 minutes, puis modifie le gouverneur de redimensionnement en interactive
name__, ondemand
ou powersave
name__, en fonction de la disponibilité. À son tour, la disponibilité dépend du pilote d’échelle de fréquence de la CPU que vous utilisez. Le code est (dans plusieurs emplacements, recherchez ondemand
name__):
#! /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 s'appelle-t-il "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 d’échelle de fréquence dominant était le pilote acpi-cpufreq, et "ondemand" était le gouverneur par défaut préféré d’Ubuntu.
Ainsi, une façon de démarrer et de continuer à utiliser le régulateur d’échelle de fréquence du processeur de performance consiste à désactiver le service qui s’éloigne de lui (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ésactiver le service:
~$ Sudo systemctl disable ondemand
Removed /etc/systemd/system/multi-user.target.wants/ondemand.service.
redémarrez, puis vérifiez à nouveau (en vous assurant 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 dans cette réponse proviennent d'un ordinateur qui utilise le pilote de redimensionnement de la fréquence du processeur acpi-cpufreq. Si vous utilisez le pilote intel_pstate, sans gouverneur supplémentaire, 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 performance?
Réponse: Les processeurs modernes adaptent la fréquence de la CPU, même en mode performance et en fonction de la profondeur de l'état d'inactivité dans lequel ils se trouvent. Si vous voulez vraiment verrouiller la fréquence du processeur, désactivez tous les états d’inactivité supérieurs à 0. Toutefois, sachez 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 de PowerSave 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