Impostare il regolatore della CPU sulle prestazioni in 18.04


25

Sto cercando di impostare le prestazioni del regolatore della CPU nel 18.04, il problema è che non sopravvive mai al riavvio.

Ho provato a seguire questi passaggi in una risposta a questa domanda Come impostare "Performance" invece di "Powersave" come impostazione predefinita? ma quando riavvio il computer il regolatore della CPU ritorna al risparmio energetico.

Ho anche provato a creare un file chiamato /etc/rc.localcon la linea:

cpupower frequency-set --governor performance

Anche questo non sopravvive ai riavvii.

Come posso fare questo?


3
Quale procedura hai seguito esattamente? L'errore di battitura nel nome del file è /etc/rc.localsolo in questa domanda o hai fatto lo stesso errore durante la creazione? Questa domanda potrebbe non essere specifica per il 18.04 e probabilmente non dovrebbe essere una segnalazione di bug piuttosto che una domanda qui. Penso che la domanda potrebbe essere presa in considerazione per la riapertura se la modifichi per aggiungere ulteriori dettagli.
Zanna,

Il parametro --governor powersavedovrebbe essere --governor performance...
WinEunuuchs2Unix

Ho seguito questo elenco di comandi, ma quando riavvio il computer il governatore della cpu ritorna al powersaver. Non mi ero reso conto che ci fosse un refuso nel comando /etc/rc.local, l'ho preso da un altro post di askubuntu qui quando ho provato a creare uno script per far funzionare il comando 'cpupower frequency-set --governor performance' avviare.
Falc,


Sì, ho provato a seguire quel thread, ricevo questo messaggio: j @ j-ncase: ~ $ sudo update-rc.d ondemand disable update-rc.d: errore: impossibile trovare uno script LSB per ondemand
Falc

Risposte:


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

4
In realtà, è sufficiente solo l'ultimo comando. Dopo sudo systemctl disable ondemande riavvio: cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governormostra performance.
Yalok Iy,

6

Risposta breve

In /etc/rc.localput in questi comandi:

sleep 120
cpupower frequency-set --governor performance

1 minuto dopo l'avvio passare automaticamente a Powersave

Per qualsiasi motivo la mia CPU Intel Skylake si avvia sempre in modalità Performance e passa automaticamente alla modalità Powersave al segno 1 minuto.

Se si imposta la modalità su Prestazioni all'avvio, verrà sovrascritta intorno al segno Tempo di attivazione 1 minuto in modalità Risparmio energia .

Nella GIF in basso, la velocità della CPU 3000+ MHz all'avvio appare nella parte superiore. Il tempo di attesa appare vicino al fondo. Quando il tempo di attività raggiunge circa 1 minuto, viene visualizzato il calo di MHz della CPU. :

La CPU va risparmiata 1 minuto 2.gif


Programma per monitorare esattamente il secondo Powersave invocato

Crea questo script in /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

Chiama lo script /etc/rc.localprima del exit 0comando (spiegato in dettaglio di seguito).

Un minuto dopo l'accesso, guarda l'output:

$ 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 conferma da questa risposta indica che questa forza di 1 minuto al powersavegovernatore è controllata da /etc/init.d/ondemand.


Dormire 120 secondi prima di impostare la modalità Performance

Il modo più semplice per rimanere in modalità Performance è modificare /etc/rc.locale inserire queste righe prima dell'ultima riga contenente exit 0:

sleep 120 # Give CPU startup routines time to settle.
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

Salva il file e riavvia.

Se si inseriscono le nuove righe dopo exit 0che non verranno mai eseguite.


Avvertenze

Probabilmente la macchina funzionerà a temperature comprese tra 10 e 15 gradi più caldi.

Potrebbe essere necessario rimuovere altri programmi che cambiano la frequenza della CPU se hanno la precedenza sulle impostazioni delle prestazioni /etc/rc.local


Quale pacchetto ha cpupowere da quale interfaccia grafica hai quell'animazione? Sto cercando di sintonizzare un Ryzen 7 con cpufreq-utilsma mi sembra lento anche con il governatore delle prestazioni
Csaba Toth

@CsabaToth Uso Conky per visualizzare CPU, RAM, HDD, SDD, Rete e altri dettagli del sistema. Non hai bisogno di cpupower ma fa parte del cpufrequtilspacchetto. Se il sistema è lento, prova il desktop Unity invece del desktop Gnome predefinito .
WinEunuuchs2Unix

@ Grazie WinEunuchs2Unix, non ho mai sentito parlare di Conky ed è stato installato sul mio sistema. Sto eseguendo Devuan BTW con Xfce4. Quindi Conky dice che la mia frequenza della CPU è di 550 MHz (0,55 GHz), il che spiega la lentezza ed è quello che mi aspettavo, ma cpufreq-infodice 3,2 GHz e sto forzando il performancegovernatore. Ho bisogno di aprire una domanda per questo.
Csaba Toth,

4

Le configurazioni predefinite del kernel Ubuntu sono tali che durante l'avvio verrà utilizzato il regolatore di ridimensionamento della frequenza della CPU delle prestazioni. La sezione pertinente del file di configurazione del kernel ( /boot/config-4.15.0-36-generic, in questo esempio) è:

#
# 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

Ma anche per impostazione predefinita durante l'avvio il ondemandservizio viene eseguito. Si dorme per 1 minuto e poi cambia il regolatore di scala a uno interactive, ondemando powersave, a seconda della disponibilità. A sua volta, la disponibilità dipende dal driver di ridimensionamento della frequenza della CPU in uso. Il codice è (in più posizioni, cerca 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

Perché si chiama "ondemand", ma imposta altri governatori (ad esempio con il driver intel_pstate imposterà il governatore powersave)? Perché questo strumento precede il driver intel_pstate, in un'epoca in cui, di gran lunga, il driver di ridimensionamento della frequenza dominante era il driver acpi-cpufreq e "ondemand" era il governatore predefinito di Ubuntu preferito.

Quindi, un modo per avviare e continuare a utilizzare il regolatore di ridimensionamento della frequenza della CPU è disabilitare il servizio che cambia da esso (che è stato anche menzionato in un'altra risposta):

Prima:

~$ 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

Disabilita il servizio:

~$ sudo systemctl disable ondemand
Removed /etc/systemd/system/multi-user.target.wants/ondemand.service.

riavviare, quindi ricontrollare (assicurarsi di attendere un minuto dopo il riavvio):

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

Nota: gli esempi in questa risposta provengono da un computer che utilizza il driver di ridimensionamento della frequenza della CPU acpi-cpufreq. Se si utilizza il driver intel_pstate, senza governatore ondemand, verrà utilizzato per impostazione predefinita il governatore powersave.

Domanda anticipata: perché le frequenze della mia CPU sono ridimensionate, anche quando si utilizza il Performance Governor?

Risposta: I processori moderni scalano la frequenza della CPU, anche in modalità prestazioni e in funzione della profondità dello stato di inattività in cui entrano. Se vuoi davvero bloccare la frequenza della CPU, disabilita tutti gli stati di inattività più profondi di 0. Tuttavia, tieni presente che costerà un'enorme quantità di energia.

Personalmente, e come menzionato in un'altra risposta, uso il governatore delle prestazioni o il governatore del risparmio energetico in funzione di qualsiasi lavoro stia facendo. I miei script sono leggermente diversi:

$ 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

e:

$ 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

esempio di utilizzo (su un computer che utilizza il driver intel_pstate):

$ sudo ./set_cpu_performance
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
performance
performance
performance
performance
performance
performance
performance
performance

2

Quello che ho fatto è stato usare il file /etc/rc.local

Per aiutarti a trovare i tuoi percorsi, usa:

find / -name scaling_governor
find / -name scaling_max_freq

Questo funziona per la mia configurazione, ma devi solo modificarlo per la tua configurazione

Ho aggiunto a /etc/rc.local usando 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

direttamente sotto la linea Shebang. Chiudi nano con Ctrl-X e Y per salvare

Quindi per 18.04 (potrebbe non funzionare su 16.04) sulla riga di comando eseguire:

systemctl disable ondemand

Quindi sulla riga di comando - leggi /etc/rc.local e quindi riavvia:

/etc/rc.local
reboot

se /etc/rc.local soffoca ed errori, assicurati che sia chmod + x /etc/rc.local


Un'altra cosa che faccio è modificare /etc/init.d/ondemand o ondemand deve essere spostato su ondemandzzz per disabilitarlo. C'è un sonno 60 in /etc/init.d/ondemand prima di impostare il governatore. Anche se rc.local lo cambierà in prestazioni all'avvio, 60 secondi dopo viene cambiato da /etc/init.d/ondemand. In /etc/init.d/ondemand cambia la riga: echo -n $ GOVERNOR> $ CPUFREQ in: echo -n "performance"> $ CPUFREQ se decidi di mantenere /etc/init.d/ondemand funzionante ...
WesZ,

1

Sto usando questo script bash per impostare il performancegovernatore:

#!/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 è eseguibile chmod +x cpu.shed eseguibile in qualsiasi momento necessario (sempre subito dopo l'avvio / riavvio di ogni computer).


0

Ho avuto un problema simile. Nel mio caso volevo impostare il governatore su "schedutil", ma dopo un riavvio avrei sempre trovato il governatore "ondemand". Ho letto e provato la maggior parte delle soluzioni presentate qui senza alcun risultato.

Qual è stato il trucco per me, e sto usando Ubuntu Mate 18.04.2 è stato trovare il file:

/ Lib / systemd / set-cpufreq

modificandolo per inserire le righe:

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

così ora il file dice:

    #! /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.

e ora quando avvio il mio computer inizia con il governatore 'schedutil'!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.