web-dev-qa-db-fra.com

Définir les performances du gouverneur pour l’unité centrale dans 18.04

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?

14
Falc
Sudo apt-get install cpufrequtils
echo 'GOVERNOR="performance"' | Sudo tee /etc/default/cpufrequtils
Sudo systemctl disable ondemand
10
The night manager

Réponse courte

Dans /etc/rc.local insérez ces commandes:

sleep 120
cpupower frequency-set --governor performance

1 minute après le démarrage automatique, basculez vers Powersave

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. :

CPU goes powersave 1 minute 2.gif


Programme pour surveiller la seconde seconde Powersave invoquée

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.


Veille 120 secondes avant de régler le mode Performance

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.


Mises en garde

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

3
WinEunuuchs2Unix

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

2
WesZ

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).

1

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 ondemandest exécuté. Il dort pendant 1 minutes, puis modifie le gouverneur de redimensionnement en interactivename__, ondemandou powersavename__, 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 ondemandname__):

#! /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
0
Doug Smythies