Varsayılan Ubuntu çekirdek yapılandırmaları, önyükleme sırasında performans CPU frekansı ölçeklendirme düzenleyicisinin kullanılacağı şekildedir. Çekirdek yapılandırma dosyasının ilgili bölümü ( /boot/config-4.15.0-36-generic
bu örnekte):
#
# 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
Ancak önyükleme sırasında varsayılan olarak ondemand
hizmet yürütülür. Bu 1 dakika boyunca uyur ve ardından ya ölçeklendirme vali değiştiren interactive
, ondemand
ya da powersave
olmamasına bağlı. Buna karşılık kullanılabilirlik hangi CPU frekansı ölçeklendirme sürücüsünü kullandığınıza bağlıdır. Kod şöyledir (birden fazla konumda şunu arayın 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
Neden "ondemand" olarak adlandırılır, ancak diğer valileri ayarlar (örneğin intel_pstate sürücüsü ile güç tasarrufu valisini ayarlayacaktır)? Bu araç, intel_pstate sürücüsünün önüne geçtiği için, baskın frekans ölçekleme sürücüsünün acpi-cpufreq sürücüsü olduğu ve "ondemand" ın tercih edilen Ubuntu varsayılan düzenleyicisi olduğu bir zamana kadar.
Bu nedenle, performans CPU frekansı ölçeklendirme düzenleyicisini kullanarak önyükleme yapmanın ve kalmanın bir yolu, kendisinden uzaklaşan hizmeti (başka bir cevapta da belirtilmiştir) devre dışı bırakmaktır:
Önce:
~$ 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
Hizmeti devre dışı bırakın:
~$ sudo systemctl disable ondemand
Removed /etc/systemd/system/multi-user.target.wants/ondemand.service.
yeniden önyükleme yapın, ardından tekrar kontrol edin (yeniden önyüklemeden sonra bir dakika beklediğinizden emin olun):
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
Not: Bu yanıttaki örnekler, acpi-cpufreq CPU frekans ölçeklendirme sürücüsünü kullanan bir bilgisayardan alınmıştır. Intel_pstate sürücüsünü, isteğe bağlı ve vali olmadan kullanıyorsanız, güç tasarrufu valisi varsayılan olarak kullanılır.
Beklenen soru: Performans düzenleyicisini kullanırken bile CPU frekanslarım neden ölçekleniyor?
Yanıt: Modern işlemciler, performans modunda ve girdikleri boşta kalma durumunun derinliğinin bir fonksiyonu olarak bile CPU frekansını ölçeklendirir. CPU frekansını gerçekten kilitlemek istiyorsanız, 0'dan daha derin olan tüm boş durumları devre dışı bırakın. Ancak, bunun çok büyük miktarda güce mal olacağını unutmayın.
Şahsen ve başka bir cevapta belirtildiği gibi, performans düzenleyicisini veya güç tasarrufu düzenleyicisini yaptığım işin bir işlevi olarak kullanıyorum. Betiklerim biraz farklı:
$ 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
ve:
$ 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
örnek kullanım (intel_pstate sürücüsünü kullanan bir bilgisayarda):
$ sudo ./set_cpu_performance
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
performance
performance
performance
performance
performance
performance
performance
performance
/etc/rc.local
yalnızca bu soruda mı yoksa oluştururken aynı yazım hatasını mı yaptınız? Bu soru 18.04'e özgü olmayabilir ve muhtemelen burada bir soru yerine bir hata raporu olmamalıdır. Daha fazla ayrıntı eklemek için düzenlerseniz, sorunun yeniden açılması düşünülebilir.