Установите процессор CPU на производительность в 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 набор частот --governor производительность» работать на запускать.
Falc
Да, я пытался следовать этой теме, я получаю это сообщение: j @ j-ncase: ~ $ sudo update-rc.d ondemand отключить update-rc.d: ошибка: не могу найти скрипт LSB для ondemand
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.
Yalok Iy
6

Короткий ответ

В /etc/rc.localпоставить в эти команды:

sleep 120
cpupower frequency-set --governor performance

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

По каким-либо причинам мой процессор Intel Skylake всегда запускается в режиме Performance, а затем автоматически переключается в режим Powersave с отметкой в ​​1 минуту.

Если вы установите режим Performance при запуске, он будет переопределен около 1 минуты метки Up Time в режим 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 секунд перед установкой режима производительности

Самый простой способ остаться в режиме Performance - это отредактировать /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

WinEunuuchs2Unix
источник
В каком пакете cpupowerи в каком графическом интерфейсе у вас есть этот animgif? Я пытаюсь настроить Ryzen 7 с, cpufreq-utilsно он чувствует себя вялым даже с губернатором производительности
Csaba Toth
@ CsabaToth Я использую Conky для отображения CPU, RAM, HDD, SDD, Network и других системных деталей. Вам не нужен cpupower, но он является частью cpufrequtilsпакета. Если система работает медленно, попробуйте использовать рабочий стол Unity вместо рабочего стола Gnome по умолчанию .
WinEunuuchs2Unix
@ WinEunuchs2Unix спасибо, я никогда не слышал о Конки, и он был установлен в моей системе. Я использую Devuan BTW с Xfce4. Итак, Конки говорит, что частота моего процессора составляет 550 МГц (0,55 ГГц), что объясняет медлительность и то, что я ожидал, но cpufreq-infoговорит о 3,2 ГГц, и я заставляю performanceгубернатора. Мне нужно открыть вопрос для этого.
Чаба Тот
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 он устанавливает регулятор powersave)? Поскольку этот инструмент предшествовал драйверу intel_pstate, еще до того времени, когда доминирующим драйвером масштабирования частоты был драйвер acpi-cpufreq, а "ondemand" был предпочтительным регулятором по умолчанию в 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 без регулятора по умолчанию, по умолчанию будет использоваться регулятор powersave.

Ожидаемый вопрос: почему частоты моего процессора масштабируются даже при использовании регулятора производительности?

Ответ: Современные процессоры масштабируют частоту процессора даже в режиме производительности и в зависимости от глубины состояния простоя, в которое они переходят. Если вы действительно хотите заблокировать частоту ЦП, отключите все состояния простоя глубже, чем 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 используя 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

прямо под линией Шебанга. Закройте nano с помощью 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

WesZ
источник
Еще одна вещь, которую я делаю, - это отредактируйте /etc/init.d/ondemand или для его отключения необходимо переместить ondemand в ondemandzzz. В /etc/init.d/ondemand перед сном находится 60 сна. Хотя 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

Я использую этот скрипт для установки 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

У меня была аналогичная проблема. В моем случае я хотел установить регулятор на «schedutil», но после перезагрузки я всегда обнаружил, что регулятор «по требованию». Я прочитал и попробовал большинство решений, представленных здесь, но безрезультатно.

Что помогло мне, и я использую Ubuntu Mate 18.04.2 находил файл:

/ Библиотека / Systemd / комплект-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.

и теперь, когда я загружаю свой компьютер, он начинается с регулятора schedutil!

Vulto
источник