ডিফল্ট উবুন্টু কার্নেল কনফিগারেশনগুলি এমন যে পারফরম্যান্স সিপিইউ ফ্রিকোয়েন্সি স্কেলিং গভর্নর বুটের সময় ব্যবহৃত হবে। কার্নেল কনফিগারেশন ফাইলের সম্পর্কিত বিভাগটি ( /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
কেন এটি "অনডেম্যান্ড" বলা হয়, তবে এটি অন্যান্য গভর্নরকে সেট করে (উদাহরণস্বরূপ ইন্টেল_পেটেট চালকের সাথে এটি পাওয়ারস্যাভের গভর্নর সেট করবে)? কারণ এই সরঞ্জামটি ইন্টেল_পস্টেট ড্রাইভারটির পূর্ব-তারিখ তৈরি করেছিল, এমন সময় ফিরে এসেছিল যখন খুব বেশি সময় ধরে, প্রভাবশালী ফ্রিকোয়েন্সি স্কেলিং চালক ছিলেন অ্যাকপি-সিপুফ্রেইক ড্রাইভার এবং "অনডেম্যান্ড" ছিল পছন্দের উবুন্টু ডিফল্ট গভর্নর।
সুতরাং, পারফরম্যান্স সিপিইউ ফ্রিকোয়েন্সি স্কেলিং গভর্নর ব্যবহার করে বুট করার এবং থাকার এক উপায় হ'ল পরিষেবাটি যা এর থেকে দূরে চলে যায় সেটি অক্ষম করে দেওয়া (যা অন্য উত্তরেও উল্লেখ করা হয়েছিল):
আগে:
~$ 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
দ্রষ্টব্য: এই উত্তরের উদাহরণগুলি এমন কম্পিউটার থেকে যা এসিপি-সিপুফেরিক সিপিইউ ফ্রিকোয়েন্সি স্কেলিং ড্রাইভার ব্যবহার করে। যদি আপনি ইনটেল_পস্টেট ড্রাইভার ব্যবহার করেন, কোনও অনডেম্যান্ড গভর্নর না থাকলে, পাওয়ারসেভ গভর্নর ডিফল্টরূপে ব্যবহার করা হবে।
প্রত্যাশিত প্রশ্ন: পারফরম্যান্স গভর্নর ব্যবহার করার পরেও কেন আমার সিপিইউ ফ্রিকোয়েন্সি স্কেল করে?
উত্তর: আধুনিক প্রসেসরগুলি সিপিইউ ফ্রিকোয়েন্সি স্কেল করে এমনকি পারফরম্যান্স মোডে এবং নিষ্ক্রিয় অবস্থার গভীরতার একটি ফাংশন হিসাবে তারা যায়। আপনি যদি সিপিইউ ফ্রিকোয়েন্সিটি সত্যিই লক করতে চান তবে সমস্ত নিষ্ক্রিয় রাজ্যগুলিকে 0 এর চেয়েও গভীর করে অক্ষম করুন However
ব্যক্তিগতভাবে এবং অন্য উত্তরে যেমন উল্লেখ করা হয়েছে, আমি পারফরম্যান্স গভর্নর বা পাওয়ারসেভ গভর্নরকে আমি যা কিছু কাজ করছি তার একটি ফাংশন হিসাবে ব্যবহার করি। আমার স্ক্রিপ্টগুলি কিছুটা আলাদা:
$ 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
উদাহরণস্বরূপ ব্যবহার (কম্পিউটারে ইন্টেল_পস্টেট ড্রাইভার ব্যবহার করে):
$ 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 এর সাথে সুনির্দিষ্ট নয় এবং সম্ভবত এখানে একটি প্রশ্নের চেয়ে কোনও বাগ রিপোর্ট হওয়া উচিত নয়। আমি মনে করি আপনি আরও বিশদ যুক্ত করতে সম্পাদনা করলে প্রশ্নটি পুনরায় খোলার জন্য বিবেচনা করা যেতে পারে।