Установите процессор CPU на производительность в 18.04
Я пытаюсь установить регулятор производительности процессора в 18.04, проблема в том, что он никогда не переживает перезагрузки.
Я попытался выполнить следующие действия в ответе на этот вопрос. Как установить "Производительность" вместо "Powersave" по умолчанию? но когда я перезагружаю компьютер, процессор переходит в режим энергосбережения.
Я также попытался создать файл с именем /etc/rc.local
с линией:
cpupower frequency-set --governor performance
Это также не переживает перезагрузки.
Как я могу это сделать?
8 ответов
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 минуту после загрузки автоматический переход на Powersave
По каким-либо причинам мой процессор Intel Skylake всегда запускается в режиме Performance, а затем автоматически переключается в режим Powersave с отметкой в 1 минуту.
Если вы установите режим Performance при запуске, он будет переопределен около 1 минуты метки Up Time в режим Powersave.
В GIF ниже частота процессора 3000+ МГц при запуске отображается в верхней части. Время срабатывания появляется около дна. Когда время работы достигнет 1 минуты, вы увидите, что частота процессора падает.:
Программа для отслеживания точной второй активации 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://Ask-ubuntu.ru/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
Подтверждение из этого ответа гласит, что эта минутная сила 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
Конфигурации ядра 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
Сначала вам нужно установить 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:
# 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
Я использую этот скрипт для установки 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
и запускайте в любое время, когда вам нужно (сразу после каждого запуска / перезагрузки компьютера).
У меня была похожая проблема. В моем случае я хотел установить регулятор на "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!
Простой скрипт для переключения между энергосберегающим режимом и режимом производительности. Вы можете попробовать с любым из 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