51 votes

Définissez le gouverneur du CPU sur performance dans 18.04

Je suis en train d'essayer de définir le gouverneur CPU sur performance 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 CPU revient à powersaver.

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

cpupower frequency-set --governor performance

Cela ne survit pas non plus aux redémarrages.

Comment puis-je faire cela?

46voto

n1ghtm4n4g3r Points 561
sudo apt-get install cpufrequtils
echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
sudo systemctl disable ondemand

9voto

WinEunuuchs2Unix Points 91128

Réponse courte

Dans /etc/rc.local, ajoutez ces commandes :

sleep 120
cpupower frequency-set --governor performance

Passage automatique à Powersave après 1 minute de démarrage

Pour une raison quelconque, mon CPU Intel Skylake démarre toujours en mode Performance puis passe automatiquement en mode Powersave à la marque de 1 minute.

Si vous définissez le mode sur Performance au démarrage, il sera remplacé environ 1 minute après par le mode Powersave.

Dans le GIF ci-dessous, la vitesse du CPU de 3000+ MHz au démarrage apparaît près du haut. Le temps écoulé apparaît près du bas. Lorsque le temps écoulé atteint environ 1 minute, vous voyez la fréquence du CPU chuter. :

CPU goes powersave 1 minute 2.gif


Programme pour surveiller quand Powersave est invoqué exactement

Créez ce script dans /usr/local/bin/watch-gov.sh:

#! /bin/bash

# NOM: watch-gov.sh
# CHEMIN: /usr/local/bin
# DESC: Définir le gouverneur sur performance et surveiller le changement
#       Question Ask Ubuntu : https://askubuntu.com/questions/1021748/set-cpu-governor-to-performance-in-18-04/1084727#1084727
# APPEL: appelé depuis `/etc/rc.local`
# DATE: Créé le 18 octobre 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: Défini sur performance à $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: Gouverneur actuel: $last_gov Temps d'activité: $Uptime" >> \
            /tmp/watch-gov.log
    fi
    sleep 1
done

Appelez le script dans /etc/rc.local avant la commande exit 0 (expliqué en détail ci-dessous).

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

$ cat /tmp/watch-gov.log
watch-gov.sh: Défini sur performance à  17:50:09 up 0 min,  0 users,  load average: 0.00, 0.00, 0.00 
watch-gov.sh: Gouverneur actuel: powersave Temps d'activité:  17:51:09 up 1 min,  1 utilisateur,  load average: 1.89, 0.62, 0.22

La confirmation de cette réponse indique que cette contrainte d'une minute pour passer en mode powersave est contrôlée par /etc/init.d/ondemand.


Attendre 120 secondes avant de passer en Mode Performance

La manière la plus simple de rester en mode Performance est de modifier /etc/rc.local et d'insérer ces lignes avant la dernière ligne contenant exit 0:

sleep 120 # Donne du temps aux routines de démarrage du CPU pour se stabiliser.
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

Pour configurer `/etc/rc.local` dans 18.04, consultez: [Comment activer `/etc/rc.local` avec Systemd](https://www.linuxbabe.com/linux-server/how-to-enable-etcrc-local-with-systemd)

``

Considérations

Il est probable que votre machine fonctionne entre 10 et 15 degrés Celsius plus chaud.

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

``

8voto

Doug Smythies Points 12803

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

2voto

WesZ Points 21

Ce que j'ai fait était 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 vous devrez simplement l'adapter à la vôtre

J'ai ajouté à /etc/rc.local en utilisant nano :

# Définir le gouverneur CPU et la fréquence au démarrage
 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

juste sous la ligne shebang. Fermez nano avec Ctrl-X et Y pour enregistrer

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

systemctl disable ondemand

Ensuite, en ligne de commande, lisez /etc/rc.local puis redémarrez :

/etc/rc.local
reboot

Si /etc/rc.local bloque et génère des erreurs, assurez-vous qu'il est chmod +x /etc/rc.local

2voto

Je 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

Rendre exécutable avec chmod +x cpu.sh et exécuter à tout moment où vous en avez besoin (juste après chaque démarrage/redémarrage de l'ordinateur).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X