Я пытаюсь установить регулятор ЦП на производительность в 18,04, проблема состоит в том, что она никогда не переживает перезагрузки.
Я попытался выполнить эти шаги в ответе на этот вопрос, Как установить "Производительность" вместо "Powersave" как значение по умолчанию? но когда я перезагружаю компьютер переключатели регулятора ЦП назад к powersaver.
Я также попытался создать названный файл /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
По любым причинам мой Intel CPU Skylake всегда запускает в режиме Performance и затем переключается на режим Powersave в метке 1 минуты автоматически.
При установке режима на Производительность на запуске, это будет переопределено около 1 минуты Метка времени к режиму Powersave.
В GIF ниже, 3000 + скорость ЦП МГц при запуске появляется около вершины. Время появляется около нижней части. Когда время поражает приблизительно 1 минуту, Вы видите ЦП, который привозит МГц.:
Создайте этот сценарий в /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
.
Самый простой способ остаться в режиме 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
То, что я сделал, было использовать файл/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
Я использую этот сценарий удара для установки 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
и выполненный в любое время Вам нужно (когда-либо прямо после каждого запуска компьютера / перезагрузка).
Конфигурации ядра 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
У меня была подобная проблема. В моем случае я хотел установить регулятор на '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' регулятора!
Простой скрипт для переключения между режимом энергосбережения и режимом производительности. Вы можете попробовать с любым из «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