Konfigurasi kernel Ubuntu default sedemikian rupa sehingga gubernur penskalaan frekuensi CPU kinerja akan digunakan selama boot. Bagian yang relevan dari file konfigurasi kernel ( /boot/config-4.15.0-36-generic
, dalam contoh ini) adalah:
#
# 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
Tetapi juga secara default saat boot up ondemand
layanan dijalankan. Itu tidur selama 1 menit dan kemudian mengubah gubernur penskalaan ke salah satu interactive
, ondemand
atau powersave
, tergantung pada ketersediaan. Pada gilirannya ketersediaan tergantung pada driver penskalaan frekuensi CPU yang Anda gunakan. Kode tersebut (di beberapa lokasi, cari 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
Mengapa ini disebut "ondemand", tetapi ia menetapkan gubernur lain (misalnya dengan driver intel_pstate itu akan mengatur gubernur yang hemat daya)? Karena alat ini meng-pre-date driver intel_pstate, kembali ke masa ketika, sejauh ini, driver penskalaan frekuensi yang dominan adalah driver acpi-cpufreq, dan "ondemand" adalah gubernur default Ubuntu yang disukai.
Jadi, salah satu cara untuk boot dan tetap menggunakan kinerja gubernur penskalaan frekuensi CPU adalah dengan menonaktifkan layanan yang berubah darinya (yang juga disebutkan dalam jawaban lain):
Sebelum:
~$ 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
Nonaktifkan layanan:
~$ sudo systemctl disable ondemand
Removed /etc/systemd/system/multi-user.target.wants/ondemand.service.
boot ulang, lalu periksa kembali (pastikan untuk menunggu beberapa saat setelah boot ulang):
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
Catatan: contoh dalam jawaban ini berasal dari komputer yang menggunakan driver scaling frekuensi CPU acpi-cpufreq. Jika Anda menggunakan driver intel_pstate, tanpa gubernur ondemand, gubernur yang hemat daya akan digunakan secara default.
Pertanyaan yang diantisipasi: Mengapa skala frekuensi CPU saya, bahkan ketika menggunakan gubernur kinerja?
Jawaban: Prosesor modern skala frekuensi CPU, bahkan dalam mode kinerja dan sebagai fungsi dari kedalaman keadaan siaga mereka masuk ke. Jika Anda benar-benar ingin mengunci frekuensi CPU maka nonaktifkan semua status siaga lebih dalam dari 0. Namun, perlu diketahui bahwa ini akan menghabiskan banyak daya.
Secara pribadi, dan sebagaimana disebutkan dalam jawaban lain, saya menggunakan gubernur kinerja atau gubernur hemat daya sebagai fungsi dari pekerjaan apa pun yang saya lakukan. Skrip saya sedikit berbeda:
$ 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
dan:
$ 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
contoh penggunaan (pada komputer menggunakan 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
hanya dalam pertanyaan ini, atau apakah Anda membuat kesalahan ketik yang sama saat membuatnya? Pertanyaan ini mungkin tidak spesifik untuk 18.04 dan mungkin bukan laporan bug daripada pertanyaan di sini. Saya pikir pertanyaannya dapat dipertimbangkan untuk dibuka kembali jika Anda mengeditnya untuk menambahkan lebih detail.