- Вопрос или проблема
- Краткий ответ
- 1 минута после загрузки автоматическое переключение на энергосберегающее
- Программа для мониторинга точной секунды включения энергосбережения
- Подождите 120 секунд перед установкой режима производительности
- Предостережения
- Ответ или решение
- 1. Установка необходимых утилит
- 2. Настройка cpufrequtils
- 3. Отключение службы ondemand
- 4. Настройка /etc/rc.local
- 5. Перезагрузка системы
- 6. Проверка текущего режима работы процессора
- Заключение
Вопрос или проблема
Я пытаюсь установить набор частоты процессора на производительность в 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 минуты, вы видите, как ЦПУ МГц снижается:
Программа для мониторинга точной секунды включения энергосбережения
Создайте этот скрипт в /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 и избежать его переключения на "экономию энергии" при перезагрузке. Имейте в виду, что использование режима "производительность" может увеличить температуру процессора, поэтому следите за состоянием системы.