Установите регулятор ЦП на производительность в 18,04

Я пытаюсь установить регулятор ЦП на производительность в 18,04, проблема состоит в том, что она никогда не переживает перезагрузки.

Я попытался выполнить эти шаги в ответе на этот вопрос, Как установить "Производительность" вместо "Powersave" как значение по умолчанию? но когда я перезагружаю компьютер переключатели регулятора ЦП назад к powersaver.

Я также попытался создать названный файл /etc/rc.local со строкой:

cpupower frequency-set --governor performance

Это также не переживает перезагрузки.

Как я могу сделать это?

20
задан 24 June 2018 в 08:49

7 ответов

sudo apt-get install cpufrequtils
echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
sudo systemctl disable ondemand
18
ответ дан 23 November 2019 в 01:51

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

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

sleep 120
cpupower frequency-set --governor performance

Спустя 1 минуту после автоматического переключателя начальной загрузки к Powersave

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

При установке режима на Производительность на запуске, это будет переопределено около 1 минуты Метка времени к режиму Powersave.

В GIF ниже, 3000 + скорость ЦП МГц при запуске появляется около вершины. Время появляется около нижней части. Когда время поражает приблизительно 1 минуту, Вы видите ЦП, который привозит МГц.:

CPU goes powersave 1 minute 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: https://askubuntu.com/questions/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 Mode

Самый простой способ остаться в режиме 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 градусов по Цельсию более горячий.

Вы, возможно, должны удалить другие программы, которые изменяют частоту ЦП, если они переопределяют Ваши настройки Performance в /etc/rc.local

5
ответ дан 23 November 2019 в 01:51

То, что я сделал, было использовать файл/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

2
ответ дан 23 November 2019 в 01:51

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

Сделайте исполняемый файл chmod +x cpu.sh и выполненный в любое время Вам нужно (когда-либо прямо после каждого запуска компьютера / перезагрузка).

1
ответ дан 23 November 2019 в 01:51

Конфигурации ядра 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 драйвер без ondemand регулятора, то powersave регулятор будет использоваться по умолчанию.

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

Ответ: современные процессоры масштабируют частоту ЦП, даже в режиме производительности и как функция глубины состояния ожидания, в которое они входят. Если Вы действительно хотите заблокировать частоту ЦП, затем отключают все состояния ожидания глубже, чем 0. Однако обратите внимание, что это будет стоить огромного огромного количества энергии.

Лично, и, как упомянуто в другом ответе, я использую регулятор производительности или powersave регулятор как функция любой работы, которую я делаю. Мои сценарии немного отличаются:

$ 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
4
ответ дан 23 November 2019 в 01:51

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

То, что добилось цели для меня, и я использую Помощника Ubuntu 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.

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

0
ответ дан 23 November 2019 в 01:51

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

#!/bin/bash

# argument: powersave or performance
if [ $# != 1 ]
then
  echo "You should specify CPU driver governor as argument!"
  exit 1
fi

totalCPUs=$(lscpu | grep '^CPU(s):' | awk '{print $2}')

for (( cpuIndex=0; cpuIndex<$totalCPUs; cpuIndex++ ))
do
   echo "Optimizing CPU $cpuIndex"
   cpufreq-set -c $cpuIndex -g $1
done

if [ $1 == "performance" ]
then
  modprobe msr
  controlRegVal=$(rdmsr 0x1FC)
  #wrmsr 0x1FC $controlRegVal
  wrmsr 0x1FC 0
fi

exit 0
0
ответ дан 14 September 2020 в 07:29

Другие вопросы по тегам:

Похожие вопросы: