Die Ubuntu-Kernel-Standardkonfigurationen sind so, dass der CPU-Frequenzskalierungsregler für die Leistung während des Startvorgangs verwendet wird. Der relevante Abschnitt der Kernel-Konfigurationsdatei ( /boot/config-4.15.0-36-generic
in diesem Beispiel) lautet:
#
# 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
Aber auch beim Booten wird standardmäßig der ondemand
Dienst ausgeführt. Es bietet Platz für 1 Minuten und dann ändert sich die Skalierung Gouverneur entweder interactive
, ondemand
oder powersave
, je nach Verfügbarkeit. Die Verfügbarkeit hängt wiederum davon ab, welchen CPU-Frequenzskalierungstreiber Sie verwenden. Der Code lautet (an mehreren Stellen nach suchen 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
Warum heißt es "ondemand", setzt aber andere Gouverneure (zum Beispiel setzt es mit dem intel_pstate-Treiber den powersave-Gouverneur)? Da dieses Tool vor dem intel_pstate-Treiber ausgeführt wurde, war der bei weitem vorherrschende Frequenzskalierungstreiber der acpi-cpufreq-Treiber und "ondemand" der bevorzugte Ubuntu-Standard-Governor.
Eine Möglichkeit, mit dem CPU-Frequenzskalierungsregler zu booten und zu bleiben, besteht darin, den Dienst zu deaktivieren, der sich von ihm entfernt (was auch in einer anderen Antwort erwähnt wurde):
Vor:
~$ 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
Deaktivieren Sie den Dienst:
~$ sudo systemctl disable ondemand
Removed /etc/systemd/system/multi-user.target.wants/ondemand.service.
Neustart, dann erneut prüfen (eine Minute nach dem Neustart warten):
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
Hinweis: Die Beispiele in dieser Antwort stammen von einem Computer, der den acpi-cpufreq-CPU-Frequenzskalierungstreiber verwendet. Wenn Sie den intel_pstate-Treiber ohne On-Demand-Governor verwenden, wird standardmäßig der Powersave-Governor verwendet.
Erwartete Frage: Warum skalieren meine CPU-Frequenzen, auch wenn der Leistungsregler verwendet wird?
Antwort: Moderne Prozessoren skalieren die CPU-Frequenz auch im Leistungsmodus und in Abhängigkeit von der Tiefe des Ruhezustands. Wenn Sie die CPU-Frequenz wirklich sperren möchten, deaktivieren Sie alle Leerlaufzustände, die niedriger als 0 sind. Beachten Sie jedoch, dass dies sehr viel Strom kostet.
Persönlich und wie in einer anderen Antwort erwähnt, verwende ich den Performance-Gouverneur oder den Powersave-Gouverneur in Abhängigkeit von meiner Arbeit. Meine Skripte sind etwas anders:
$ 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
und:
$ 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
Beispielverwendung (auf einem Computer mit dem intel_pstate-Treiber):
$ sudo ./set_cpu_performance
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
performance
performance
performance
performance
performance
performance
performance
performance
/etc/rc.local
nur in dieser Frage, oder haben Sie beim Erstellen denselben Tippfehler gemacht? Diese Frage ist möglicherweise nicht spezifisch für den 18.04. Und sollte wahrscheinlich kein Fehlerbericht und keine Frage hier sein. Ich denke, die Frage könnte zum erneuten Öffnen in Betracht gezogen werden, wenn Sie sie bearbeiten, um weitere Details hinzuzufügen.