As configurações padrão do kernel do Ubuntu são tais que o governador 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
serviço é executado. Ele dorme por 1 minutos e, em seguida, muda o governador de escala para tanto interactive
, ondemand
ou powersave
, dependendo da disponibilidade. Por sua vez, a disponibilidade depende do driver de dimensionamento de frequência da CPU que você está usando. O código é (em vários locais, procure 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 define o governador de economia de energia)? Como essa ferramenta pré-data o driver intel_pstate, remonta a uma época em que, de longe, o driver de escala de frequência dominante era o driver acpi-cpufreq, e "ondemand" era o governador padrão preferido do Ubuntu.
Portanto, uma maneira de inicializar e permanecer usando o governador de dimensionamento de frequência da CPU de desempenho é desativar o serviço que muda dele (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
Desative o serviço:
~$ sudo systemctl disable ondemand
Removed /etc/systemd/system/multi-user.target.wants/ondemand.service.
reinicie 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 dimensionamento de frequência da CPU acpi-cpufreq. Se você estiver usando o driver intel_pstate, sem um governador ondemand, o governador de economia de energia será usado por padrão.
Pergunta antecipada: Por que minhas frequências de CPU aumentam, mesmo quando uso o regulador de desempenho?
Resposta: Os processadores modernos escalam a frequência da CPU, mesmo no modo de desempenho e em função da profundidade do estado inativo em que entram. Se você realmente deseja bloquear a frequência da CPU, desative todos os estados ociosos com profundidade maior que 0. No entanto, observe que isso custará uma enorme quantidade enorme de energia.
Pessoalmente, e conforme 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 esteja realizando. 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
/etc/rc.local
apenas nesta pergunta ou você fez o mesmo erro ao criá-lo? Esta questão pode não ser específica para 18.04 e provavelmente não deve ser um relatório de erro, e sim uma pergunta aqui. Acho que a questão pode ser considerada para reabertura se você a editar para adicionar mais detalhes.