Définir le gouverneur du processeur sur les performances en 18.04

25

J'essaie de définir les performances du gouverneur CPU en 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 du processeur revient à l'économiseur d'énergie.

J'ai également essayé de créer un fichier appelé /etc/rc.localavec la ligne:

cpupower frequency-set --governor performance

Cela ne survit pas non plus aux redémarrages.

Comment puis-je faire ceci?

Falc
la source
3
Quelle procédure avez-vous suivie exactement? Est-ce que la faute de frappe dans le nom de fichier /etc/rc.localdans 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.
Zanna
Le paramètre --governor powersavedoit être --governor performance...
WinEunuuchs2Unix
J'ai suivi cette liste de commandes, mais lorsque je redémarre l'ordinateur, le gouverneur de processeur revient à l'économiseur d'énergie. Je ne savais pas qu'il y avait une faute de frappe dans la commande /etc/rc.local, je l'ai obtenue d'un autre post askubuntu ici quand j'ai essayé de faire un script pour que la commande 'cpupower frequency-set --governor performance' s'exécute sur Commencez.
Falc
Oui, j'ai essayé de suivre ce fil, je reçois ce message: j @ j-ncase: ~ $ sudo update-rc.d ondemand disable update-rc.d: erreur: impossible de trouver un script LSB pour ondemand
Falc

Réponses:

18
sudo apt-get install cpufrequtils
echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
sudo systemctl disable ondemand
Le gestionnaire de nuit
la source
4
En fait, seule la dernière commande suffit. Après sudo systemctl disable ondemandet redémarrage: cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governoraffiche performance.
Yalok Iy
6

Réponse courte

En /etc/rc.localmettant ces commandes:

sleep 120
cpupower frequency-set --governor performance

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

Pour quelque raison que ce soit, mon processeur Skylake Intel démarre toujours en mode Performance, puis passe automatiquement en mode Powersave à la minute près.

Si vous définissez le mode sur Performance au démarrage, il sera remplacé par la marque de temps de montée de 1 minute en mode Powersave .

Dans le GIF ci-dessous, la vitesse du processeur 3000+ MHz au démarrage apparaît près du haut. Le temps de montée apparaît vers le bas. Lorsque le temps de fonctionnement atteint environ 1 minute, vous constatez une baisse du CPU MHz. :

Le processeur passe en mode économie d'énergie 1 minute 2.gif


Programme de surveillance de la seconde Powersave exacte 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: /ubuntu/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 /etc/rc.localavant la exit 0commande (expliqué en détail ci-dessous).

Une minute après la connexion, regardez la sortie:

$ 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 cette réponse indique que cette force d'une minute au powersavegouverneur est contrôlée par /etc/init.d/ondemand.


Dormez 120 secondes avant de régler le mode Performance

Le moyen le plus simple de rester en mode Performance est d'éditer /etc/rc.localet d'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.


Avertissements

Votre machine fonctionnera probablement de 10 à 15 degrés plus chauds.

Vous devrez peut-être supprimer d'autres programmes qui modifient la fréquence du processeur s'ils remplacent vos paramètres de performances dans /etc/rc.local

WinEunuuchs2Unix
la source
De quel paquet cpupoweret de quelle interface graphique vous avez cet animgif? J'essaie de régler un Ryzen 7 avec cpufreq-utilsmais ça semble lent même avec le gouverneur de performance
Csaba Toth
@CsabaToth J'utilise Conky pour afficher les détails du processeur, de la RAM, du disque dur, du SDD, du réseau et d'autres systèmes. Vous n'avez pas besoin de cpupower mais il fait partie du cpufrequtilspackage. Si le système est lent, essayez le bureau Unity au lieu du bureau Gnome par défaut .
WinEunuuchs2Unix
@ WinEunuchs2Unix merci, je n'ai jamais entendu parler de Conky, et il a été installé sur mon système. J'utilise Devuan BTW avec Xfce4. Donc Conky dit que ma fréquence CPU est de 550 MHz (0,55 GHz), ce qui explique la lenteur et ce à quoi je m'attendais, mais cpufreq-infodit 3,2 GHz et je force le performancegouverneur. Je dois ouvrir une question pour cela.
Csaba Toth
4

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 ondemandservice est exécuté. Il dort pendant 1 minute, puis modifie le gouverneur de mise à l'échelle sur interactive, ondemandou 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
Doug Smythies
la source
2

J'ai utilisé 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 enregistrer

Ensuite, pour 18.04 (peut ne pas fonctionner sur 16.04) sur la ligne de commande, exécutez:

systemctl disable ondemand

Puis sur la ligne de commande - lisez /etc/rc.local puis redémarrez:

/etc/rc.local
reboot

si /etc/rc.local s'étouffe et se trompe, assurez-vous qu'il s'agit bien de chmod + x /etc/rc.local

WesZ
la source
Une autre chose que je fais est de modifier /etc/init.d/ondemand ou ondemand doit être déplacé vers ondemandzzz pour le désactiver. Il y a un sommeil 60 dans /etc/init.d/ondemand avant qu'il ne règle le gouverneur. Même si rc.local le changera en performances au démarrage, 60 secondes plus tard, il sera modifié par /etc/init.d/ondemand. Dans /etc/init.d/ondemand, changez la ligne: echo -n $ GOVERNOR> $ CPUFREQ en: echo -n "performance"> $ CPUFREQ si vous décidez de laisser /etc/init.d/ondemand fonctionner ...
WesZ
1

J'utilise ce script bash pour définir le performancegouverneur:

#!/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.shet s'exécute à tout moment dont vous avez besoin (toujours juste après chaque démarrage / redémarrage de l'ordinateur).

Michal Przybylowicz
la source
0

J'avais un problème similaire. Dans mon cas, je voulais définir le gouverneur sur «schedutil», mais après un redémarrage, je trouvais toujours le gouverneur «à la demande». J'ai lu et essayé la plupart des solutions présentées ici en vain.

Qu'est-ce qui a fait l'affaire pour moi, et j'utilise Ubuntu Mate 18.04.2 a été de trouver le fichier:

/ lib / systemd / set-cpufreq

le modifier pour insérer les lignes:

    *schedutil*)
            GOVERNOR="schedutil"
            break
            ;;

alors maintenant le fichier lit:

    #! /bin/sh
    # Set the CPU Frequency Scaling governor to "ondemand"/"powersave"      where available
    set -eu

    FIRSTCPU=`cut -f1 -d- /sys/devices/system/cpu/online`
    AVAILABLE="/sys/devices/system/cpu/cpu$FIRSTCPU/cpufreq/scaling_available_governors"
    DOWN_FACTOR="/sys/devices/system/cpu/cpufreq/ondemand/sampling_down_factor"

    [ -f $AVAILABLE ] || exit 0

    read governors < $AVAILABLE
    case $governors in
            *interactive*)
                   GOVERNOR="interactive"
                   break
                   ;;
            *schedutil*)
                   GOVERNOR="schedutil"
                   break
                   ;;
            *ondemand*)
                   GOVERNOR="ondemand"
                   case $(uname -m) in
                           ppc64*)
                           SAMPLING=100
                   ;;
                   esac
                   break
                   ;;
            *powersave*)
                   GOVERNOR="powersave"
                   break
                   ;;
            *)
                   exit 0
                   ;;
    esac

    [ -n "${GOVERNOR:-}" ] || exit 0

    echo "Setting $GOVERNOR scheduler for all CPUs"

    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.

et maintenant, quand je démarre mon ordinateur, il démarre avec le gouverneur «schedutil»!

Vulto
la source