Các cấu hình nhân Ubuntu mặc định sao cho bộ điều chỉnh tỷ lệ tần số CPU hiệu suất sẽ được sử dụng trong quá trình khởi động. Phần có liên quan của tệp cấu hình kernel ( /boot/config-4.15.0-36-generic
, trong ví dụ này) là:
#
# 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
Nhưng cũng theo mặc định trong quá trình khởi động, ondemand
dịch vụ được thực thi. Nó ngủ trong 1 phút và sau đó thay đổi người điều chỉnh tỷ lệ thành một trong hai interactive
, ondemand
hoặc powersave
, tùy thuộc vào tình trạng sẵn có. Lần lượt tính khả dụng tùy thuộc vào trình điều khiển mở rộng tần số CPU mà bạn đang sử dụng. Mã này là (ở nhiều vị trí, tìm kiếm 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
Tại sao nó được gọi là "ondemand", nhưng nó đặt các thống đốc khác (ví dụ với trình điều khiển intel_pstate, nó sẽ thiết lập thống đốc powersave)? Bởi vì công cụ này có trước trình điều khiển intel_pstate, từ trước đến nay, trình điều khiển mở rộng tần số chiếm ưu thế là trình điều khiển acpi-cpufreq và "ondemand" là thống đốc mặc định ưa thích của Ubuntu.
Vì vậy, một cách để khởi động và duy trì sử dụng bộ điều chỉnh tỷ lệ tần số CPU hiệu suất là vô hiệu hóa dịch vụ thay đổi khỏi nó (cũng được đề cập trong câu trả lời khác):
Trước:
~$ 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
Vô hiệu hóa dịch vụ:
~$ sudo systemctl disable ondemand
Removed /etc/systemd/system/multi-user.target.wants/ondemand.service.
khởi động lại, sau đó kiểm tra lại (chắc chắn đợi một phút sau khi khởi động lại):
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
Lưu ý: các ví dụ trong câu trả lời này là từ một máy tính sử dụng trình điều khiển thang đo tần số CPU acpi-cpufreq. Nếu bạn đang sử dụng trình điều khiển intel_pstate, không có thống đốc ondemand, thì thống đốc powersave sẽ được sử dụng theo mặc định.
Câu hỏi dự đoán: Tại sao tần số CPU của tôi mở rộng, ngay cả khi sử dụng bộ điều chỉnh hiệu suất?
Trả lời: Bộ xử lý hiện đại chia tỷ lệ tần số CPU, ngay cả trong chế độ hiệu năng và như là một hàm của độ sâu của trạng thái nhàn rỗi mà chúng đi vào. Nếu bạn thực sự muốn khóa tần số CPU thì hãy vô hiệu hóa tất cả các trạng thái nhàn rỗi sâu hơn 0. Tuy nhiên, lưu ý rằng nó sẽ tiêu tốn một lượng điện năng rất lớn.
Cá nhân, và như đã đề cập trong một câu trả lời khác, tôi sử dụng thống đốc hiệu suất hoặc thống đốc quyền hạn như một chức năng của bất kỳ công việc nào tôi đang làm. Kịch bản của tôi hơi khác một chút:
$ 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
và:
$ 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
sử dụng ví dụ (trên máy tính sử dụng trình điều khiển 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
chỉ trong câu hỏi này, hoặc bạn đã thực hiện cùng một lỗi đánh máy khi tạo nó? Câu hỏi này có thể không cụ thể cho 18.04 và có lẽ không nên là một báo cáo lỗi hơn là một câu hỏi ở đây. Tôi nghĩ rằng câu hỏi có thể được xem xét để mở lại nếu bạn chỉnh sửa nó để thêm chi tiết.