Установите режим работы процессора на “performance” в 18.04

Вопрос или проблема

Я пытаюсь установить набор частоты процессора на производительность в 18.04, проблема в том, что он никогда не сохраняется после перезагрузки.

Я попытался выполнить эти шаги в ответе на этот вопрос Как установить “Производительность” вместо “Энергосбережения” по умолчанию?, но когда я перезагружаю компьютер, набор частоты процессора переключается обратно на энергосберегающий режим.

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

cpupower frequency-set --governor performance

Это также не сохраняется после перезагрузки.

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

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

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

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

sleep 120
cpupower frequency-set --governor performance

1 минута после загрузки автоматическое переключение на энергосберегающее

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

Если установить режим на Производительность при запуске, он будет переопределен примерно на 1 минуте время работы на режим Энергосбережение.

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

CPU goes powersave 1 minute 2.gif


Программа для мониторинга точной секунды включения энергосбережения

Создайте этот скрипт в /usr/local/bin/watch-gov.sh:

#! /bin/bash

# NAME: watch-gov.sh
# PATH: /usr/local/bin
# DESC: Установить набор частоты процессора на производительность и следить за изменениями
#       Вопрос Ask Ubuntu: https://askubuntu.com/questions/1021748/set-cpu-governor-to-performance-in-18-04/1084727#1084727
# CALL: вызывается из `/etc/rc.local`
# DATE: Создано 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: Установлено на производительность в $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: Текущий набор частоты: $last_gov Время работы: $Uptime" >> \
            /tmp/watch-gov.log
    fi
    sleep 1
done

Вызовите скрипт в /etc/rc.local перед командой exit 0 (подробно объяснено ниже).

Через одну минуту после входа посмотрите вывод:

$ cat /tmp/watch-gov.log
watch-gov.sh: Установлено на производительность в  17:50:09 работа 0 мин,  0 пользователей,  средняя нагрузка: 0.00, 0.00, 0.00 
watch-gov.sh: Текущий набор частоты: energysave Время работы:  17:51:09 работа 1 мин,  1 пользователь,  средняя нагрузка: 1.89, 0.62, 0.22

Подтверждение из этого ответа говорит, что это принудительное переключение на набор частоты energiesave контролируется /etc/init.d/ondemand.


Подождите 120 секунд перед установкой режима производительности

Самый простой способ остаться в режиме производительности – отредактировать /etc/rc.local и вставить эти строки перед последней строкой, содержащей exit 0:

sleep 120 # Дайте время процессору на начальные процедуры.
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

Сохраните файл и перезагрузите.

Если вы вставите новые строки после exit 0, они никогда не выполнятся.

Чтобы настроить /etc/rc.local в 18.04, смотрите: Как включить /etc/rc.local с Systemd


Предостережения

Ваша машина, вероятно, будет работать на 10-15 градусов Цельсия горячее.

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

Настройки ядра по умолчанию Ubuntu таковы, что набор частоты процессора производительности будет использоваться во время загрузки. Соответствующий раздел файла конфигурации ядра (/boot/config-4.15.0-36-generic, в этом примере) выглядит так:

#
# Тактовая частота процессора
#
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 не установлен
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE не установлен
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND не установлен
# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE не установлен
# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL не установлен
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

#
# Драйверы для управления тактовой частотой процессора
#
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
# Предоставляет:          ondemand
# Необходимый старт:    $remote_fs $all
# Необходимый стоп:
# Старт по умолчанию:     2 3 4 5
# Стоп по умолчанию:
# Краткое описание: Устанавливает набор частоты процессора на "ondemand"
### END INIT INFO

# Не выполнять, если мы собираемся запустить контейнер Android LXC:
[ ! -f /etc/init/lxc-android-config.conf ] || exit 0

PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/init/vars.sh
. /lib/lsb/init-functions

ДОСТУПНЫЕ="/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 # вероятно, достаточно времени для входа в систему

        [ -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 "Ошибка: аргумент '$1' не поддерживается" >&2
        exit 3
        ;;
    stop)
        ;;
    *)
        echo "Использование: $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                                      загружен    неактивен мертв    Установите набор частоты процессора
~$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
ondemand
ondemand

Отключите сервис:

~$ sudo systemctl disable ondemand
Удалено /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. Однако имейте в виду, что это приведет к огромному расходу энергии.

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

$ 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

Сначала вам нужно установить cpufrequtils;

sudo apt install cpufrequtils

затем выполните перезагрузку и установите набор частоты на производительность,

sudo cpufreq-set -g performance

Примечание: Если вы запустили вышеуказанную команду без перезагрузки, вам нужно отредактировать файл в /etc/init.d/cpufrequtils и изменить строку, которая гласит

GOVERNOR=ondemand

на

GOVERNOR=performance

затем выполните;

sudo sh /etc/init.d/cpufrequtils start

Это, вероятно, предложит вам перезагрузить демон systemctl, поэтому сделайте это так;

sudo systemctl daemon-reload

Это должно сработать. Затем просмотрим вашу частоту процессора с помощью;

cat /proc/cpuinfo | grep -i mhz

Что я сделал, так это использовал файл /etc/rc.local

Чтобы помочь вам найти ваши пути, используйте:

find / -name scaling_governor
find / -name scaling_max_freq

Это работает для моей конфигурации, но вам просто нужно отредактировать его для вашей конфигурации

Я добавил в /etc/rc.local, используя nano:

# Установить набор частоты процессора и частоту при загрузке
 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

сразу под командой shebang.
Закройте 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

Я использую этот 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

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

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

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

/lib/systemd/set-cpufreq

редактирование его для вставки строк:

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

теперь файл выглядит так:

    #! /bin/sh
    # Устанавливает набор частоты процессора на "ondemand" и "powersave", где это возможно
    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 "Устанавливаю $GOVERNOR для всех CPU"

    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’!

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

#!/bin/bash

# аргумент: energysave или производительность
if [ $# != 1 ]
then
  echo "Вы должны указать драйвер набора частоты процессора в качестве аргумента!"
  exit 1
fi

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

for (( cpuIndex=0; cpuIndex<$totalCPUs; cpuIndex++ ))
do
   echo "Оптимизация 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

В Ubuntu 22.04 LTS, после установки GOVERNOR=”performance” и отключения ondemand, мне также нужно было перезапустить службу cpufrequtils, чтобы это действительно сработало:

sudo systemctl restart cpufrequtils.service

Это всегда работало идеально для меня:

echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor > /dev/null

Вы можете проверить текущий набор частоты с помощью: cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

sudo echo performance > /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor вообще не работает. Вы должны использовать tee.

Ответ или решение

Для установки режима работы процессора в "производительность" (performance) в Ubuntu 18.04 и обеспечения его сохранения после перезагрузки, необходимо выполнить несколько шагов. Многие пользователи сталкиваются с тем, что после перезапуска система возвращается к режиму "экономия энергии" (powersave). Данная инструкция поможет вам это исправить.

1. Установка необходимых утилит

Первым делом необходимо установить пакет cpufrequtils, который содержит инструменты для управления частотой процессора. Для этого откройте терминал и выполните следующую команду:

sudo apt-get install cpufrequtils

2. Настройка cpufrequtils

После установки утилит необходимо изменить файл конфигурации cpufrequtils, чтобы по умолчанию устанавливался режим "производительность". Для этого выполните:

echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils

Теперь, когда система запускается, cpufrequtils будет устанавливать режим "производительность".

3. Отключение службы ondemand

Служба ondemand автоматически изменяет режимы работы процессора. Чтобы отключить ее, выполните следующую команду:

sudo systemctl disable ondemand

Это предотвратит переключение режима процессора на "экономия энергии" при загрузке.

4. Настройка /etc/rc.local

Чтобы изменить режим на "производительность" после завершения загрузки, необходимо отредактировать файл /etc/rc.local. Если этого файла не существует, создайте его и убедитесь, что он исполняемый:

sudo touch /etc/rc.local
sudo chmod +x /etc/rc.local

Откройте файл для редактирования:

sudo nano /etc/rc.local

Добавьте в него следующую строку перед exit 0:

sleep 120
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

Сохраните файл и закройте редактор, нажав Ctrl+X, затем Y, и Enter.

5. Перезагрузка системы

Теперь вы можете перезагрузить вашу систему, чтобы изменения вступили в силу:

sudo reboot

6. Проверка текущего режима работы процессора

После перезагрузки проверьте, установлен ли режим "производительность":

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

Если вы видите performance для всех процессоров, значит, настройка прошла успешно.

Заключение

Следуя указанным шагам, вы сможете установить режим работы процессора "производительность" в Ubuntu 18.04 и избежать его переключения на "экономию энергии" при перезагрузке. Имейте в виду, что использование режима "производительность" может увеличить температуру процессора, поэтому следите за состоянием системы.

Оцените материал
Добавить комментарий

Капча загружается...