Las configuraciones predeterminadas del kernel de Ubuntu son tales que el regulador de escala de frecuencia de CPU de rendimiento se utilizará durante el arranque. La sección relevante del archivo de configuración del núcleo ( /boot/config-4.15.0-36-generic
, en este ejemplo) es:
#
# 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
Pero también de forma predeterminada durante el arranque ondemand
se ejecuta el servicio. Tiene capacidad para 1 minuto y luego cambia el gobernador de escala para cualquiera interactive
, ondemand
o powersave
, dependiendo de la disponibilidad. A su vez, la disponibilidad depende del controlador de escala de frecuencia de CPU que esté utilizando. El código es (en varias ubicaciones, busque 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 qué se llama "ondemand", pero establece otros gobernadores (por ejemplo, con el controlador intel_pstate establecerá el gobernador de ahorro de energía)? Debido a que esta herramienta es anterior al controlador intel_pstate, en una época en la que, con diferencia, el controlador de escala de frecuencia dominante era el controlador acpi-cpufreq, y "ondemand" era el gobernador predeterminado de Ubuntu preferido.
Entonces, una forma de arrancar y permanecer usando el regulador de escala de frecuencia de CPU de rendimiento es deshabilitar el servicio que se aleja de él (que también se mencionó en otra respuesta):
Antes de:
~$ 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
Deshabilitar el servicio:
~$ sudo systemctl disable ondemand
Removed /etc/systemd/system/multi-user.target.wants/ondemand.service.
reinicie, luego verifique nuevamente (asegúrese de esperar un minuto después del reinicio):
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: los ejemplos en esta respuesta son de una computadora que usa el controlador de escala de frecuencia de CPU acpi-cpufreq. Si está utilizando el controlador intel_pstate, sin gobernador bajo demanda, el gobernador de ahorro de energía se utilizará de forma predeterminada.
Pregunta anticipada: ¿Por qué se escalan las frecuencias de mi CPU, incluso cuando uso el regulador de rendimiento?
Respuesta: Los procesadores modernos escalan la frecuencia de la CPU, incluso en modo de rendimiento y en función de la profundidad del estado inactivo en el que se encuentran. Si realmente desea bloquear la frecuencia de la CPU, desactive todos los estados inactivos más profundos que 0. Sin embargo, tenga en cuenta que le costará una gran cantidad de energía.
Personalmente, y como se menciona en otra respuesta, uso el gobernador de rendimiento o el gobernador de ahorro de energía en función de cualquier trabajo que esté haciendo. Mis guiones son un poco 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
y:
$ 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
ejemplo de uso (en una computadora que usa el controlador 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
solo en esta pregunta, o cometiste el mismo error al crearlo? Esta pregunta puede no ser específica de 18.04 y probablemente no debería ser un informe de error en lugar de una pregunta aquí. Creo que la pregunta podría considerarse para reabrirla si la edita para agregar más detalles.