기본 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
왜 "온 디맨드"라고 불리 나 다른 거버너를 설정합니까 (예 : intel_pstate 드라이버를 사용하면 powersave 거버너를 설정합니다)? 이 도구는 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.
다시 부팅 한 다음 다시 확인하십시오 (다시 부팅 한 후 1 분 정도 기다리십시오).
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 드라이버를 사용하는 경우 기본적으로 powersave 조정기가 사용됩니다.
예상되는 질문 : 성능 조정기를 사용할 때도 왜 CPU 주파수가 확장됩니까?
답변 : 최신 프로세서는 성능 모드에서도 유휴 상태의 깊이에 따라 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에만 국한된 것이 아니며 아마도 여기서 질문이 아니라 버그 보고서가 아니어야합니다. 자세한 내용을 추가하기 위해 편집하면 질문을 다시 열 수 있다고 생각합니다.