Le configurazioni predefinite del kernel Ubuntu sono tali che durante l'avvio verrà utilizzato il regolatore di ridimensionamento della frequenza della CPU delle prestazioni. La sezione pertinente del file di configurazione del kernel ( /boot/config-4.15.0-36-generic
, in questo esempio) è:
#
# 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
Ma anche per impostazione predefinita durante l'avvio il ondemand
servizio viene eseguito. Si dorme per 1 minuto e poi cambia il regolatore di scala a uno interactive
, ondemand
o powersave
, a seconda della disponibilità. A sua volta, la disponibilità dipende dal driver di ridimensionamento della frequenza della CPU in uso. Il codice è (in più posizioni, cerca 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
Perché si chiama "ondemand", ma imposta altri governatori (ad esempio con il driver intel_pstate imposterà il governatore powersave)? Perché questo strumento precede il driver intel_pstate, in un'epoca in cui, di gran lunga, il driver di ridimensionamento della frequenza dominante era il driver acpi-cpufreq e "ondemand" era il governatore predefinito di Ubuntu preferito.
Quindi, un modo per avviare e continuare a utilizzare il regolatore di ridimensionamento della frequenza della CPU è disabilitare il servizio che cambia da esso (che è stato anche menzionato in un'altra risposta):
Prima:
~$ 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
Disabilita il servizio:
~$ sudo systemctl disable ondemand
Removed /etc/systemd/system/multi-user.target.wants/ondemand.service.
riavviare, quindi ricontrollare (assicurarsi di attendere un minuto dopo il riavvio):
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: gli esempi in questa risposta provengono da un computer che utilizza il driver di ridimensionamento della frequenza della CPU acpi-cpufreq. Se si utilizza il driver intel_pstate, senza governatore ondemand, verrà utilizzato per impostazione predefinita il governatore powersave.
Domanda anticipata: perché le frequenze della mia CPU sono ridimensionate, anche quando si utilizza il Performance Governor?
Risposta: I processori moderni scalano la frequenza della CPU, anche in modalità prestazioni e in funzione della profondità dello stato di inattività in cui entrano. Se vuoi davvero bloccare la frequenza della CPU, disabilita tutti gli stati di inattività più profondi di 0. Tuttavia, tieni presente che costerà un'enorme quantità di energia.
Personalmente, e come menzionato in un'altra risposta, uso il governatore delle prestazioni o il governatore del risparmio energetico in funzione di qualsiasi lavoro stia facendo. I miei script sono leggermente diversi:
$ 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
esempio di utilizzo (su un computer che utilizza il 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
solo in questa domanda o hai fatto lo stesso errore durante la creazione? Questa domanda potrebbe non essere specifica per il 18.04 e probabilmente non dovrebbe essere una segnalazione di bug piuttosto che una domanda qui. Penso che la domanda potrebbe essere presa in considerazione per la riapertura se la modifichi per aggiungere ulteriori dettagli.