Встановіть губернатор процесора на ефективність у 18.04


25

Я намагаюся налаштувати губернатор процесора на працездатність в 18.04, проблема полягає в тому, що він ніколи не переживає перезавантаження.

Я спробував виконати ці кроки у відповіді на це питання Як встановити "Ефективність" замість "Powersave" за замовчуванням? але коли я перезавантажую комп'ютер, центральний процесор перемикається на режим енергозбереження.

Я також спробував створити файл, названий /etc/rc.localрядком:

cpupower frequency-set --governor performance

Це також не переживе перезавантаження.

Як я можу це зробити?


3
Якої процедури ви точно дотримувались? Чи помилка друку у назві файлу /etc/rc.localлише в цьому запитанні, чи ви зробили той самий друкарський помилок під час його створення? Це питання може бути не специфічним для 18.04 і, ймовірно, не повинно бути звітом про помилки, а не питанням тут. Я думаю, що питання може розглядатися як повторне відкриття, якщо ви його відредагуєте, щоб додати більше деталей.
Занна

Параметр --governor powersaveповинен бути --governor performance...
WinEunuuchs2Unix

Я дотримувався цього списку команд, але коли я перезавантажую комп'ютер, керуючий процесор перемикається назад на режим енергозбереження. Я не усвідомлював, що в команді /etc/rc.local є помилка друку, я отримав це з іншої публікації askubuntu тут, коли я намагався зробити сценарій, щоб команда 'cpupower set-set - performans guvernor' запускалася на стартап.
Falc


Так, я спробував слідувати цій темі, я отримую це повідомлення: j @ j-ncase: ~ $ sudo update-rc.d ondemand відключення update-rc.d: помилка: не вдається знайти скрипт LSB для вимоги
Falc

Відповіді:


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

4
Насправді достатньо лише останньої команди. Після sudo systemctl disable ondemandі перезавантаження: cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governorпоказує performance.
Ялок Ій

6

Коротка відповідь

У /etc/rc.localцих командах:

sleep 120
cpupower frequency-set --governor performance

Через 1 хвилину після завантаження автоматичний перехід на Powersave

З будь-яких причин мій процесор Skylake Intel завжди запускається в режимі продуктивності, а потім автоматично переходить у режим Powersave на 1 хвилині.

Якщо ви встановите для цього режиму параметр « Ефективність», він буде відмінено навколо позначки « Час часу до 1 хвилини » до режиму Powersave .

У GIF внизу швидкість процесора 3000+ МГц при запуску з’являється біля верху. Час очікування з’являється біля нижньої частини. Коли час очікує близько 1 хвилини, ви бачите падіння МГц процесора. :

Процесор працює на енергозбереженні 1 хвилину 2.gif


Програма для моніторингу точного виклику Powersave

Створіть цей сценарій у /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

Викличте скрипт /etc/rc.localперед exit 0командою (детально пояснено нижче).

Через хвилину після входу подивіться на вихід:

$ 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

Підтвердження з цієї відповіді вказує, що ця 1-хвилинна сила powersaveкеруючим контролюється /etc/init.d/ondemand.


Сон 120 секунд перед встановленням режиму продуктивності

Найпростіший спосіб залишитися в режимі продуктивності - це редагувати /etc/rc.localта вставляти ці рядки перед останнім рядком, що містить exit 0:

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

Збережіть файл та перезавантажте.

Якщо ви вставите нові рядки після того, exit 0як вони ніколи не будуть виконані.


Коваджі

Напевно, ваша машина буде працювати на 10 - 15 градусів С гарячіше.

Можливо, вам доведеться видалити інші програми, які змінюють частоту процесора, якщо вони замінять ваші настройки продуктивності в /etc/rc.local


Який пакунок має cpupowerі з якого графічного інтерфейсу ви маєте цю анімацію? Я намагаюся налаштувати Ryzen 7, cpufreq-utilsале це відчувається мляво навіть з губернатором виступу
Csaba Toth,

@CsabaToth Я використовую Conky для відображення процесора, оперативної пам'яті, жорсткого диска, SDD, мережі та інших деталей системи. Вам не потрібна cpupower, але вона є частиною cpufrequtilsпакету. Якщо система млява, спробуйте робочий стіл Unity замість робочого столу Gnome за замовчуванням .
WinEunuuchs2Unix

@ WinEunuchs2Unix спасибі, я ніколи не чув про Conky, і він був встановлений на моїй системі. Я запускаю Devuan BTW з Xfce4. Так Конкі каже, що моя частота процесора становить 550 МГц (0,55 ГГц), що пояснює млявість і те, що я очікував, але cpufreq-infoповідомляє 3,2 ГГц, і я змушую performanceгубернатора. Мені потрібно відкрити питання для цього.
Csaba Toth,

4

Конфігурації ядра Ubuntu за замовчуванням такі, що під час завантаження буде використовуватися регулятор масштабування частоти процесора. Відповідний розділ файлу конфігурації ядра ( /boot/config-4.15.0-36-genericу цьому прикладі):

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

Але також за замовчуванням під час завантаження ondemandвиконується служба. Він спить 1 хвилину, а потім змінює регулятор масштабування на або interactive, ondemandабо powersaveзалежно від наявності. У свою чергу доступність залежить від того, який драйвер масштабування частоти процесора ви використовуєте. Код (у кількох місцях, пошук 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

Чому його називають "ondemand", але він встановлює інші регулятори (наприклад, з драйвером intel_pstate він встановить губернатор-губернатор)? Оскільки цей інструмент заздалегідь датує драйвер Intel_pstate, ще до того часу, коли, на сьогоднішній день, домінуючим драйвером масштабування частоти був драйвер acpi-cpufreq, а "попит" був кращим регулятором за замовчуванням Ubuntu.

Отже, один із способів завантажуватись та залишатися за допомогою регулятора масштабування частоти продуктивності процесора - відключити службу, яка змінюється від неї (про що також було сказано в іншій відповіді):

Перед:

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

Вимкнути послугу:

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

перезавантажте, а потім перевірте ще раз (обов'язково зачекайте хвилину після перезавантаження):

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

Примітка. Приклади цієї відповіді - з комп'ютера, який використовує драйвер масштабування частоти процесора acpi-cpufreq. Якщо ви використовуєте драйвер intel_pstate, у якому немає губернатора вимоги, за замовчуванням буде використано губернатор зберігання повноважень.

Очікуване запитання: Чому мої частоти частоти процесора масштабуються навіть при використанні регулятора продуктивності?

Відповідь: Сучасні процесори масштабують частоту процесора навіть у режимі продуктивності та як функцію глибини стану очікування, в яку вони переходять. Якщо ви дійсно хочете заблокувати частоту процесора, тоді відключіть усі режими очікування глибше 0. Однак зауважте, що це коштуватиме величезної величезної кількості енергії.

Особисто, як уже згадувалося в іншій відповіді, я використовую гувернатор ефективності або губернатор енергозбереження як функцію будь-якої роботи, яку я роблю. Мої сценарії дещо інші:

$ 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

і:

$ 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

Приклад використання (на комп’ютері з використанням драйвера intel_pstate):

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

2

Що я зробив, це використовувати файл /etc/rc.local

Щоб допомогти вам знайти свої шляхи, використовуйте:

find / -name scaling_governor
find / -name scaling_max_freq

Це працює для мого налаштування, але вам потрібно просто відредагувати його для своєї установки

Я додав /etc/rc.local за допомогою нано:

# 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

безпосередньо під лінією шебанг. Закрийте нано за допомогою Ctrl-X та Y, щоб зберегти

Тоді для 18.04 (може не працювати 16.04) у командному рядку запустіть:

systemctl disable ondemand

Потім у командному рядку - прочитайте /etc/rc.local та перезавантажте:

/etc/rc.local
reboot

якщо /etc/rc.local дроселі та помилки, то переконайтеся, що це chmod + x /etc/rc.local


Ще одне, що я роблю - це редагувати /etc/init.d/ondemand або ondemand потрібно перемістити на ondemandzzz, щоб відключити його. Перед сном 60 в /etc/init.d/ondemand перед тим, як встановити губернатора. Навіть незважаючи на те, що rc.local змінить його на продуктивність під час завантаження, через 60 секунд його змінить /etc/init.d/ondemand. У /etc/init.d/ondemand змініть рядок: echo -n $ GOVERNOR> $ CPUFREQ на: echo -n "performance"> $ CPUFREQ, якщо ви вирішите продовжувати /etc/init.d/ondemand працювати ...
WesZ

1

Я використовую цей скрипт bash для встановлення 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 є виконуваним chmod +x cpu.shі запускається в будь-який необхідний вам час (будь-коли відразу після кожного запуску / перезавантаження комп'ютера).


0

У мене була схожа проблема. У моєму випадку я хотів встановити губернатора на "графік", але після перезавантаження я завжди вважав, що губернатор є "затребуваним". Я читав і намагався більшість запропонованих тут рішень безрезультатно.

Що для мене зробив трюк, і я використовую Ubuntu Mate 18.04.2 - це знайти файл:

/ lib / systemd / set-cpufreq

редагуючи його, щоб вставити рядки:

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

тому тепер файл читає:

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

і тепер, коли я завантажую комп'ютер, він починається з "губернаторного плану"!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.