การกำหนดค่าเริ่มต้นของเคอร์เนล Ubuntu นั้นจะใช้การปรับมาตราส่วนความถี่ CPU ประสิทธิภาพในระหว่างการบู๊ต ส่วนที่เกี่ยวข้องของไฟล์กำหนดค่าเคอร์เนล ( /boot/config-4.15.0-36-generic
ในตัวอย่างนี้) คือ:
#
# 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
แต่โดยค่าเริ่มต้นในระหว่างการบู๊ตondemand
บริการก็จะถูกดำเนินการ มันนอนเป็นเวลา 1 นาทีจากนั้นมีการเปลี่ยนแปลงผู้ว่าราชการจังหวัดทั้งปรับinteractive
, ondemand
หรือpowersave
ขึ้นอยู่กับความพร้อม ในทางกลับกันความพร้อมใช้งานขึ้นอยู่กับไดรเวอร์การปรับขนาดความถี่ CPU ที่คุณใช้ รหัสคือ (ในหลาย ๆ สถานที่ค้นหา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
ทำไมถึงเรียกว่า "ondemand" แต่มันตั้งค่าผู้ว่าการคนอื่น ๆ (ตัวอย่างเช่นกับไดรเวอร์ intel_pstate มันจะตั้งผู้ว่าราชการ powersave)? เนื่องจากเครื่องมือนี้ pre-date ไดรเวอร์ intel_pstate กลับไปเมื่อเวลาผ่านไปไกลไดรเวอร์ปรับความถี่ที่โดดเด่นคือไดรเวอร์ acpi-cpufreq และ "ondemand" เป็นผู้ว่าราชการเริ่มต้นที่ต้องการอูบุนตู
ดังนั้นวิธีหนึ่งในการบูตและใช้งานโดยใช้มาตรวัดความถี่ซีพียูประสิทธิภาพคือการปิดใช้งานบริการที่เปลี่ยนแปลงไปจากมัน (ซึ่งถูกกล่าวถึงในอีกคำตอบหนึ่ง):
ก่อน:
~$ 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
ปิดการใช้งานบริการ:
~$ sudo systemctl disable ondemand
Removed /etc/systemd/system/multi-user.target.wants/ondemand.service.
รีบูตแล้วตรวจสอบอีกครั้ง (อย่าลืมรออีกหนึ่งนาทีหลังจากรีบูต):
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
หมายเหตุ: ตัวอย่างในคำตอบนี้มาจากคอมพิวเตอร์ที่ใช้ไดรเวอร์การปรับขนาดความถี่ของ acpi-cpufreq หากคุณกำลังใช้ไดรเวอร์ intel_pstate โดยไม่มีผู้ควบคุม ondemand ผู้ว่าการประหยัดพลังงานจะถูกใช้โดยค่าเริ่มต้น
คำถามที่คาดหวัง: เพราะเหตุใดความถี่ซีพียูของฉันถึงขนาดถึงแม้จะใช้ตัวควบคุมประสิทธิภาพ
คำตอบ: ตัวประมวลผลที่ทันสมัยปรับความถี่ CPU แม้ในโหมดประสิทธิภาพและเป็นฟังก์ชั่นของความลึกของสถานะไม่ได้ใช้งานที่พวกเขาเข้าไป หากคุณต้องการล็อคความถี่ CPU จริงๆให้ปิดการใช้งานสถานะที่ไม่ได้ใช้งานทั้งหมดที่ลึกกว่า 0 อย่างไรก็ตามโปรดทราบว่าจะต้องใช้พลังงานจำนวนมหาศาล
โดยส่วนตัวและตามที่กล่าวไว้ในคำตอบอื่นฉันใช้ผู้ว่าการปฏิบัติงานหรือผู้ว่าการประหยัดอำนาจเป็นหน้าที่ของสิ่งที่ฉันกำลังทำอยู่ สคริปต์ของฉันแตกต่างกันเล็กน้อย:
$ 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
และ:
$ 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
การใช้งานตัวอย่าง (บนคอมพิวเตอร์ที่ใช้ไดรเวอร์ 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
ในคำถามนี้เท่านั้นหรือคุณพิมพ์ผิดแบบนั้นเมื่อสร้างมันขึ้นมา? คำถามนี้อาจไม่เฉพาะเจาะจงกับ 18.04 และอาจไม่ใช่รายงานข้อผิดพลาดแทนที่จะเป็นคำถามที่นี่ ฉันคิดว่าคำถามอาจถูกนำมาพิจารณาเพื่อเปิดใหม่หากคุณแก้ไขเพื่อเพิ่มรายละเอียดเพิ่มเติม