sudo apt-get install cpufrequtils
echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
sudo systemctl disable ondemand
Estou tentando configurar o controlador da CPU para o desempenho em 18.04, o problema é que ele nunca sobrevive a reinicializações.
Eu tentei seguir estas etapas em uma resposta a essa pergunta Como definir "Performance" em vez de "Powersave" como padrão? mas quando eu reinicio o computador, o controlador da CPU volta para o modo de economia de energia.
Eu também tentei criar um arquivo chamado /etc/rc.local
com a linha:
cpupower frequency-set --governor performance
Isso também não sobrevive a reinicializações.
Como posso fazer isso?
sudo apt-get install cpufrequtils
echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
sudo systemctl disable ondemand
Em /etc/rc.local
coloque estes comandos:
sleep 120
cpupower frequency-set --governor performance
Por qualquer motivo, minha CPU Intel Skylake sempre é inicializada no modo Performance e, em seguida, alterna automaticamente para o modo Powersave na marca de 1 minuto.
Se você definir o modo como Desempenho na inicialização, ele será substituído em torno da marca de 1 minuto Tempo atual para o modo Economia de energia .
No GIF abaixo, a velocidade da CPU de 3000+ MHz na inicialização aparece perto do topo. O tempo de atividade aparece perto da parte inferior. Quando o tempo de ativação atinge cerca de 1 minuto, você vê a queda do CPU-MHz. :
Crieestescriptem/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://sobrelinux.info/questions/276064/set-cpu-governor-to-performance-in-18-04"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
Chame o script em /etc/rc.local
antes do comando exit 0
(explicado em detalhes abaixo).
Um minuto após o login, veja a saída:
$ 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
A confirmação desta resposta indica que essa força de 1 minuto para o powersave
governor é controlada por /etc/init.d/ondemand
.
A maneira mais simples de permanecer no modo Performance é editar /etc/rc.local
e inserir essas linhas antes da última linha contendo exit 0
:
sleep 120 # Give CPU startup routines time to settle.
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
Salve o arquivo e reinicie.
Se você inserir as novas linhas após exit 0
, ele nunca será executado.
Sua máquina provavelmente ficará 10 a 15 graus C mais quente.
Pode ser necessário remover outros programas que alteram a frequência da CPU se eles substituírem suas configurações de desempenho em /etc/rc.local
O que eu fiz foi usar o arquivo /etc/rc.local
Para ajudar você a encontrar seus caminhos, use:
find / -name scaling_governor
find / -name scaling_max_freq
Isso funciona para minha configuração, mas você só precisa editá-la para sua configuração
Eu adicionei /etc/rc.local usando 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
diretamente sob a linha shebang. Feche o nano com Ctrl-X e Y para salvar
Então, para 18.04 (pode não funcionar em 16.04) na linha de comando, execute:
systemctl disable ondemand
Em seguida, na linha de comando - leia /etc/rc.local e, em seguida, reinicie:
/etc/rc.local
reboot
se /etc/rc.local chokes and errors então certifique-se de que é chmod + x /etc/rc.local
Estou usando este script bash para definir o performance
governor:
#!/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 é executável chmod +x cpu.sh
e é executado a qualquer momento que você precisar (sempre após cada inicialização / reinicialização do computador).
As configurações padrão do kernel do Ubuntu são tais que o controlador de escala de frequência da CPU de desempenho será usado durante a inicialização. A seção relevante do arquivo de configuração do kernel ( /boot/config-4.15.0-36-generic
, neste exemplo) é:
#
# 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
Mas também por padrão durante a inicialização, o ondemand
service é executado. Ele dorme por 1 minuto e, em seguida, altera o regulador de escala para interactive
, ondemand
ou powersave
, dependendo da disponibilidade. Por sua vez, a disponibilidade depende de qual driver de escala de frequência da CPU você está usando. O código é (em vários locais, procure por 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
Por que é chamado "ondemand", mas define outros governadores (por exemplo, com o driver intel_pstate, ele irá definir o governador powersave)? Porque esta ferramenta é anterior ao driver intel_pstate, de volta a uma época em que, de longe, o driver dominante de escala de frequência era o driver acpi-cpufreq, e "ondemand" era o governador padrão preferido do Ubuntu.
Portanto, uma maneira de inicializar e continuar usando o controlador de escala de frequência da CPU de desempenho é desabilitar o serviço que é alterado (que também foi mencionado em outra resposta):
Antes:
~$ 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
Desativar o serviço:
~$ sudo systemctl disable ondemand
Removed /etc/systemd/system/multi-user.target.wants/ondemand.service.
reinicialize e verifique novamente (não se esqueça de esperar um minuto após a reinicialização):
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
Nota: os exemplos nesta resposta são de um computador que usa o driver de ajuste de frequência da CPU acpi-cpufreq. Se você estiver usando o driver intel_pstate, sem um controlador ondemand, o governador powersave será usado por padrão.
Pergunta antecipada: Por que minhas frequências de CPU escalam, mesmo quando se usa o governador de desempenho?
Resposta: Os processadores modernos escalonam a frequência da CPU, mesmo no modo de desempenho e como uma função da profundidade do estado inativo em que eles entram. Se você realmente quiser bloquear a frequência da CPU, desabilite todos os estados inativos mais de 0. Entretanto, observe que isso custará uma grande quantidade de energia.
Pessoalmente, e como mencionado em outra resposta, eu uso o governador de desempenho ou o governador de economia de energia como uma função de qualquer trabalho que estou fazendo. Meus scripts são um pouco diferentes:$ 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
e:
$ 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
exemplo de uso (em um computador usando o driver intel_pstate):
$ sudo ./set_cpu_performance
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
performance
performance
performance
performance
performance
performance
performance
performance