Ustaw regulator procesora na wydajność w 18.04

25

Próbuję ustawić regulator procesora na wydajność w 18.04, problem polega na tym, że nigdy nie przeżyje restartów.

Próbowałem wykonać następujące kroki w odpowiedzi na to pytanie Jak ustawić „Wydajność” zamiast „Powersave” jako domyślną? ale po ponownym uruchomieniu komputera regulator procesora przełącza się z powrotem do oszczędzania energii.

Próbowałem również utworzyć plik o nazwie /etc/rc.localz linią:

cpupower frequency-set --governor performance

To także nie przetrwa restartów.

W jaki sposób mogę to zrobić?

Falc
źródło
3
Jaką dokładnie dokładnie zastosowałeś procedurę? Czy literówka w nazwie pliku jest /etc/rc.localtylko tym pytaniem, czy też popełniłeś tę samą literówkę podczas jej tworzenia? To pytanie może nie być specyficzne dla 18.04 i prawdopodobnie nie powinno być zgłoszeniem błędu, a nie pytaniem tutaj. Myślę, że pytanie można rozważyć w celu ponownego otwarcia, jeśli edytujesz je, aby dodać więcej szczegółów.
Zanna
Parametr --governor powersavepowinien być --governor performance...
WinEunuuchs2Unix
Postępowałem zgodnie z listą poleceń, ale po ponownym uruchomieniu komputera gubernator procesora przełącza się z powrotem na PowerSaver. Nie zdawałem sobie sprawy, że w poleceniu /etc/rc.local jest literówka. Dostałem to z innego postu askubuntu , kiedy próbowałem napisać skrypt, aby polecenie „cpupower zestaw częstotliwości - wydajność rządowa” działało pod adresem uruchomienie.
Falc,
Tak, próbowałem śledzić ten wątek, otrzymuję ten komunikat: j @ j-ncase: ~ $ sudo update-rc.d ondemand wyłącz update-rc.d: błąd: nie mogę znaleźć skryptu LSB dla ondemand
Falc

Odpowiedzi:

18
sudo apt-get install cpufrequtils
echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
sudo systemctl disable ondemand
Kierownik nocy
źródło
4
W rzeczywistości wystarczy ostatnie polecenie. Po sudo systemctl disable ondemandi uruchom ponownie: cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governorpokazuje performance.
Yalok Iy
6

Krótka odpowiedź

W /etc/rc.localumieścić w tych poleceń:

sleep 120
cpupower frequency-set --governor performance

1 minutę po automatycznym uruchomieniu systemu przełącz na Powersave

Z jakichkolwiek powodów mój procesor Intel Skylake zawsze uruchamia się w trybie wydajności, a następnie automatycznie przełącza się w tryb oszczędzania energii po 1 minucie.

Jeśli ustawisz tryb na Wydajność przy uruchomieniu, zostanie on zastąpiony około 1 minuty Up Time do trybu oszczędzania energii .

W poniższym pliku GIF prędkość procesora 3000+ MHz przy uruchomieniu pojawia się u góry. Czas przestoju pojawia się u dołu. Gdy czas przestoju upłynie około 1 minuty, procesor spadnie z częstotliwości MHz. :

Procesor oszczędza 1 minutę 2.gif


Program do monitorowania dokładnie przywołanego drugiego Powersave

Utwórz ten skrypt w /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

Wywołaj skrypt /etc/rc.localprzed exit 0poleceniem (wyjaśnione szczegółowo poniżej).

W minutę po zalogowaniu spójrz na wynik:

$ 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

Potwierdzenie tej odpowiedzi mówi, że ta 1-minutowa siła skierowana do powersavegubernatora jest kontrolowana przez /etc/init.d/ondemand.


Uśpij 120 sekund przed ustawieniem trybu wydajności

Najprostszym sposobem pozostania w trybie wydajności jest edycja /etc/rc.locali wstawianie tych wierszy przed ostatnim wierszem zawierającym exit 0:

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

Zapisz plik i uruchom ponownie.

Jeśli wstawisz nowe wiersze po exit 0nim, nigdy nie zostaną one wykonane.


Ostrzeżenia

Twoja maszyna prawdopodobnie będzie pracować o 10 do 15 stopni w cieplej.

Może być konieczne usunięcie innych programów zmieniających częstotliwość procesora, jeśli zastąpią one ustawienia wydajności w /etc/rc.local

WinEunuuchs2Unix
źródło
Który pakiet ma cpupoweri z którego GUI masz ten animgif? Próbuję dostroić Ryzen 7, cpufreq-utilsale wydaje się on powolny, nawet z gubernatorem wydajności
Csaba Toth
@CsabaToth używam Conky do wyświetlacza CPU, RAM, HDD, SDD, sieci i innych danych systemowych. Nie potrzebujesz cpupower, ale jest to część cpufrequtilspakietu. Jeśli system jest powolny, spróbuj Unity Desktop zamiast domyślnego pulpitu Gnome .
WinEunuuchs2Unix
@ WinEunuchs2Unix dzięki, nigdy nie słyszałem o Conky i został on zainstalowany w moim systemie. Używam Devuan BTW z Xfce4. Conky mówi więc, że moja częstotliwość procesora wynosi 550 MHz (0,55 GHz), co wyjaśnia powolność i jest tym, czego się spodziewałem, ale cpufreq-infomówi 3,2 GHz i zmuszam performancegubernatora. Muszę w tym celu otworzyć pytanie.
Csaba Toth
4

Domyślne konfiguracje jądra Ubuntu są takie, że podczas rozruchu użyty zostanie regulator skalowania częstotliwości procesora. Odpowiednia sekcja pliku konfiguracyjnego jądra ( /boot/config-4.15.0-36-genericw tym przykładzie) to:

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

Ale również domyślnie podczas uruchamiania ondemandusługa jest wykonywana. Śpi do 1 minuty, a następnie zmienia gubernatora skalowania albo interactive, ondemandlub powersave, w zależności od dostępności. Z kolei dostępność zależy od używanego sterownika skalowania częstotliwości procesora. Kod to (w wielu lokalizacjach wyszukaj 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

Dlaczego nazywa się „ondemand”, ale ustawia inne gubernatorów (na przykład za pomocą sterownika intel_pstate ustawia gubernatora powersave)? Ponieważ to narzędzie poprzedza sterownik intel_pstate, do czasów, gdy zdecydowanie dominującym sterownikiem skalowania częstotliwości był sterownik acpi-cpufreq, a „ondemand” był preferowanym domyślnym gubernatorem Ubuntu.

Tak więc jednym ze sposobów na uruchomienie i pozostanie przy użyciu regulatora skalowania częstotliwości procesora jest wyłączenie usługi, która się od niej zmienia (o czym również wspomniano w innej odpowiedzi):

Przed:

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

Wyłącz usługę:

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

uruchom ponownie, a następnie sprawdź ponownie (koniecznie poczekaj minutę po ponownym uruchomieniu):

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

Uwaga: przykłady w tej odpowiedzi pochodzą z komputera, który używa sterownika skalowania częstotliwości procesora acpi-cpufreq. Jeśli używasz sterownika intel_pstate, bez gubernatora ondemand, gubernator powersave będzie domyślnie używany.

Oczekiwane pytanie: Dlaczego częstotliwości mojego procesora skalują się, nawet gdy korzystam z regulatora wydajności?

Odpowiedź: Nowoczesne procesory skalują częstotliwość procesora, nawet w trybie wydajności i jako funkcję głębokości stanu bezczynności, w który wchodzą. Jeśli naprawdę chcesz zablokować częstotliwość procesora, wyłącz wszystkie stany bezczynności głębsze niż 0. Pamiętaj jednak, że będzie to kosztować ogromną ilość energii.

Osobiście, jak wspomniano w innej odpowiedzi, używam regulatora wydajności lub regulatora oszczędzania energii jako funkcji każdej wykonywanej pracy. Moje skrypty są trochę inne:

$ 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

i:

$ 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

przykładowe użycie (na komputerze ze sterownikiem intel_pstate):

$ sudo ./set_cpu_performance
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
performance
performance
performance
performance
performance
performance
performance
performance
Doug Smythies
źródło
2

Użyłem pliku /etc/rc.local

Aby pomóc Ci znaleźć ścieżki, użyj:

find / -name scaling_governor
find / -name scaling_max_freq

Działa to w przypadku mojej konfiguracji, ale wystarczy ją edytować

Dodałem do /etc/rc.local używając 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

bezpośrednio pod linią shebang. Zamknij nano za pomocą Ctrl-X i Y, aby zapisać

Następnie dla 18.04 (może nie działać 16.04) w linii poleceń:

systemctl disable ondemand

Następnie w wierszu poleceń - przeczytaj /etc/rc.local, a następnie uruchom ponownie:

/etc/rc.local
reboot

jeśli /etc/rc.local dusi się i błędy, upewnij się, że to chmod + x /etc/rc.local

WesZ
źródło
Inną rzeczą, którą robię, jest edycja /etc/init.d/ondemand lub ondemand musi zostać przeniesiony do ondemandzzz, aby go wyłączyć. W ustawieniu /etc/init.d/ondemand jest sen 60 przed ustawieniem gubernatora. Mimo że rc.local zmieni go na wydajność w czasie uruchamiania, 60 sekund później zostanie zmieniony przez /etc/init.d/ondemand. W /etc/init.d/ondemand zmień wiersz: echo -n $ GOVERNOR> $ CPUFREQ na: echo -n „wydajność”> $ CPUFREQ, jeśli zdecydujesz, że /etc/init.d/ondemand działa ...
WesZ
1

Korzystam z tego skryptu bash, aby ustawić performancegubernatora:

#!/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 jest wykonywalny chmod +x cpu.shi uruchamiany w dowolnym momencie (zawsze tuż po każdym uruchomieniu / ponownym uruchomieniu komputera).

Michał Przybylowicz
źródło
0

Miałem podobny problem. W moim przypadku chciałem ustawić gubernatora na „Schedutil”, ale po ponownym uruchomieniu zawsze znajduję gubernatora na „żądanie”. Przeczytałem i wypróbowałem większość przedstawionych tutaj rozwiązań bezskutecznie.

Co mi pomogło i korzystam z Ubuntu Mate 18.04.2 było znalezienie pliku:

/ lib / systemd / set-cpufreq

edytując go, aby wstawić linie:

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

więc teraz plik brzmi:

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

a teraz, kiedy uruchamiam komputer, zaczyna się od gubernatora „Schedutil”!

Vulto
źródło