डिफ़ॉल्ट उबंटू कर्नेल विन्यास ऐसे हैं कि बूट के दौरान प्रदर्शन 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
। बदले में उपलब्धता इस बात पर निर्भर करती है कि आप किस सीपीयू फ्रीक्वेंसी स्केलिंग ड्राइवर का उपयोग कर रहे हैं। कोड है (कई स्थानों में, खोज करें 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 ड्राइवर के साथ यह पॉवरवेव गवर्नर सेट करेगा)? क्योंकि यह उपकरण Intel_pstate ड्राइवर को पूर्व-दिनांकित करता है, एक समय पहले, जब तक, प्रभावी आवृत्ति स्केलिंग ड्राइवर acpi-cpufreq ड्राइवर था, और "ondemand" पसंदीदा Ubuntu डिफ़ॉल्ट गवर्नर था।
इसलिए, बूट करने और प्रदर्शन CPU आवृत्ति स्केलिंग गवर्नर के उपयोग से बने रहने का एक तरीका उस सेवा को अक्षम करना है जो इससे दूर हो जाती है (जिसका दूसरे उत्तर में भी उल्लेख किया गया था):
इससे पहले:
~$ 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 CPU आवृत्ति स्केलिंग ड्राइवर का उपयोग करता है। यदि आप Intel_pstate ड्राइवर का उपयोग कर रहे हैं, जिसमें कोई ondandand गवर्नर नहीं है, तो पॉवरसेव गवर्नर डिफ़ॉल्ट रूप से उपयोग किया जाएगा।
प्रत्याशित प्रश्न: प्रदर्शन राज्यपाल का उपयोग करते हुए भी मेरे 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 के लिए विशिष्ट नहीं हो सकता है और शायद यहाँ एक प्रश्न के बजाय एक बग रिपोर्ट नहीं होनी चाहिए। मुझे लगता है कि प्रश्न को फिर से खोलने पर विचार किया जा सकता है यदि आप इसे और अधिक विवरण जोड़ने के लिए संपादित करते हैं।