18.04에서 CPU 관리자를 성능으로 설정


24

18.04에서 CPU 조정기를 성능으로 설정하려고하는데 문제는 재부팅 후에도 지속되지 않는다는 것입니다.

나는 다음 시도했다 다음 단계 이 질문에 대한 답변에서 기본값으로 대신 "절전"의 설정 방법 "성능"에? 그러나 컴퓨터를 재부팅하면 CPU 관리자가 다시 절전 기능으로 전환됩니다.

또한 /etc/rc.local라인으로 불리는 파일을 만들려고했습니다 .

cpupower frequency-set --governor performance

또한 재부팅 후에도 지속되지 않습니다.

어떻게해야합니까?


3
정확히 어떤 절차를 따랐습니까? /etc/rc.local이 질문에서 파일 이름의 오타 만입 니까, 아니면 만들 ​​때 동일한 오타를 만드셨습니까? 이 질문은 18.04에만 국한된 것이 아니며 아마도 여기서 질문이 아니라 버그 보고서가 아니어야합니다. 자세한 내용을 추가하기 위해 편집하면 질문을 다시 열 수 있다고 생각합니다.
잔나

매개 변수 --governor powersave는 다음과 같아야합니다 --governor performance.
WinEunuuchs2Unix

명령 목록을 따랐 지만 컴퓨터를 재부팅하면 CPU 관리자가 다시 절전 기능으로 전환됩니다. 나는 /etc/rc.local 명령에 오타가 있다는 것을 몰랐다. 나는 다른 askubuntu 게시물 에서 'cpupower frequency-set --governor performance'명령을 실행하도록 스크립트를 만들려고 할 때 여기 에서 그것을 얻었다 . 시작.
Falc


그래, 나는 그 스레드를 따르려고 노력했다, 나는 다음 메시지를 얻는다 : j @ j-ncase : ~ $ sudo update-rc.d ondemand disable update-rc.d : error : 주문형에 대한 LSB 스크립트를 찾을 수 없음
Falc

답변:


18
sudo apt-get install cpufrequtils
echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
sudo systemctl disable ondemand

4
실제로 마지막 명령만으로 충분합니다. After sudo systemctl disable ondemandand reboot :가 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor표시 performance됩니다.
Yalok Iy

6

짧은 답변

에서 /etc/rc.local이러한 명령에 넣어 :

sleep 120
cpupower frequency-set --governor performance

부팅 후 1 분 자동 절전으로 전환

어떤 이유로 든 Skylake Intel CPU는 항상 성능 모드에서 시작한 다음 1 분 표시에 자동으로 절전 모드로 전환됩니다.

시작시 모드를 성능 으로 설정하면 1 분의 가동 시간 표시가 절전 모드 로 대체 됩니다.

아래 GIF에서 시작시 3000+ MHz CPU 속도가 상단 근처에 나타납니다. 가동 시간이 바닥 근처에 나타납니다. 가동 시간이 약 1 분이되면 CPU MHz가 떨어집니다. :

CPU가 1 분 동안 절전합니다 2.gif


호출 된 정확한 두 번째 절전을 모니터링하는 프로그램

이 스크립트를 작성하십시오 /usr/local/bin/watch-gov.sh:

#! /bin/bash

# NAME: watch-gov.sh
# PATH: /usr/local/bin
# DESC: Set governnor to performance and watch for change
#       Ask Ubuntu question: /ubuntu/1021748/set-cpu-governor-to-performance-in-18-04/1084727#1084727
# CALL: called from `/etc/rc.local`
# DATE: Created Oct 18, 2018.

echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
last_gov=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)
Uptime=$(uptime)
echo "watch-gov.sh: Set to performance at $Uptime " > /tmp/watch-gov.log

for ((i=0; i<300; i++)) ; do
    curr_gov=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)
    if [ $last_gov != $curr_gov ] ; then
        last_gov=$curr_gov
        Uptime=$(uptime)
        echo "watch-gov.sh: Current governor: $last_gov Uptime: $Uptime" >> \
            /tmp/watch-gov.log
    fi
    sleep 1
done

명령 /etc/rc.local전에 스크립트를 호출하십시오 exit 0(아래에 자세히 설명).

로그인 한 후 1 분 후에 출력을보십시오.

$ cat /tmp/watch-gov.log
watch-gov.sh: Set to performance at  17:50:09 up 0 min,  0 users,  load average: 0.00, 0.00, 0.00 
watch-gov.sh: Current governor: powersave Uptime:  17:51:09 up 1 min,  1 user,  load average: 1.89, 0.62, 0.22

답변을 확인 하면 powersave주지사에 대한 1 분의 힘이에 의해 제어됩니다 /etc/init.d/ondemand.


성능 모드를 설정하기 전에 120 초 절전

성능 모드를 유지하는 가장 간단한 방법은 /etc/rc.local다음을 포함하는 마지막 행 앞에이 행 을 편집 하고 삽입하는 것입니다 exit 0.

sleep 120 # Give CPU startup routines time to settle.
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

파일을 저장하고 재부팅하십시오.

새 줄을 삽입하면 exit 0실행되지 않습니다.


경고

기계는 아마도 10-15도 더 뜨겁게 작동 할 것입니다.

CPU 주파수를 변경하는 다른 프로그램이 성능 설정을 재정의하는 경우 제거해야 할 수도 있습니다. /etc/rc.local


어떤 패키지가 cpupower있고 어떤 GUI를 가지고 있습니까? Ryzen 7을 튜닝하려고 cpufreq-utils하지만 공연 총재조차도 느려 집니다.
Csaba Toth

@CsabaToth Conky 를 사용 하여 CPU, RAM, HDD, SDD, 네트워크 및 기타 시스템 정보를 표시합니다. cpupower 는 필요하지 않지만 cpufrequtils패키지의 일부입니다 . 시스템이 느리다면 기본 Gnome 데스크탑 대신 Unity 데스크탑을 사용해보십시오 .
WinEunuuchs2Unix

@ WinEunuchs2Unix 덕분에 Conky에 대해 들어 본 적이 없으며 시스템에 설치되었습니다. Xfce4에서 Devuan BTW를 실행하고 있습니다. Conky는 내 CPU 주파수가 550MHz (0.55GHz)이며, 이는 부진과 설명이지만 cpufreq-info3.2GHz는 performance주지사를 강요한다고 말합니다 . 이에 대한 질문을 열어야합니다.
Csaba Toth

4

기본 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 분 동안 휴면 상태를 유지 한 다음 가용성에 따라 스케일링 조정기를 interactiveondemand또는 로 변경합니다 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

2

내가 한 것은 /etc/rc.local 파일을 사용하는 것이 었습니다

경로를 찾는 데 도움이되도록 다음을 사용하십시오.

find / -name scaling_governor
find / -name scaling_max_freq

이것은 내 설정에서 작동하지만 설정을 위해 편집해야합니다.

nano를 사용하여 /etc/rc.local에 추가했습니다.

# Set CPU Governor and Freq at boot up
 echo "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
 echo 1500000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
 echo 2000000 > /sys/devices/system/cpu/cpu4/cpufreq/scaling_max_freq
 echo "performance" > /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor

shebang 라인 바로 아래. Ctrl-X 및 Y로 nano를 닫아 저장

그런 다음 명령 줄에서 18.04 (16.04에서는 작동하지 않을 수 있음) 동안 다음을 실행하십시오.

systemctl disable ondemand

그런 다음 명령 행에서 /etc/rc.local을 읽고 다시 부팅하십시오.

/etc/rc.local
reboot

/etc/rc.local이 질식하고 오류가 발생하면 chmod + x /etc/rc.local인지 확인하십시오.


내가하는 또 다른 일은 /etc/init.d/ondemand 또는 ondemand를 편집하는 것이 ondemandzzz로 이동하여 비활성화해야합니다. 조정자를 설정하기 전에 /etc/init.d/ondemand에 휴면 60이 있습니다. rc.local이 부팅시 성능으로 변경하더라도 60 초 후에 /etc/init.d/ondemand에 의해 변경됩니다. 에서 /etc/init.d/ondemand 라인 변경 : 에코 -n $ 총재>에 $ cpufreq를 : 에코 -n "성능"> $ cpufreq를 사용하면 작업 /etc/init.d/ondemand 유지하기로 결정한 경우 ...
WesZ

1

이 bash 스크립트를 사용하여 performance조정자 를 설정하고 있습니다 .

#!/bin/bash

sudo cpufreq-set --cpu 0 --governor performance
sudo cpufreq-set --cpu 1 --governor performance
sudo cpufreq-set --cpu 2 --governor performance
sudo cpufreq-set --cpu 3 --governor performance
sudo cpufreq-set --cpu 4 --governor performance
sudo cpufreq-set --cpu 5 --governor performance
sudo cpufreq-set --cpu 6 --governor performance
sudo cpufreq-set --cpu 7 --governor performance

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

Make는 chmod +x cpu.sh언제든 실행 가능 하고 필요할 때마다 실행됩니다 (모든 컴퓨터 시작 / 재부팅 직후).


0

나는 비슷한 문제가 있었다. 필자의 경우에는 총재를 'schedutil'로 설정하고 싶지만 재부팅 후 항상 총재가 '요청'인 것으로 나타났습니다. 나는 여기에 제시된 대부분의 솔루션을 읽고 사용해 보았습니다.

나를 위해 속임수는 무엇이며 Ubuntu Mate 18.04.2를 사용하고 있습니다. 파일을 찾고있었습니다.

/ lib / systemd / set-cpufreq

라인을 삽입하기 위해 편집 :

    *schedutil*)
            GOVERNOR="schedutil"
            break
            ;;

이제 파일을 읽습니다.

    #! /bin/sh
    # Set the CPU Frequency Scaling governor to "ondemand"/"powersave"      where available
    set -eu

    FIRSTCPU=`cut -f1 -d- /sys/devices/system/cpu/online`
    AVAILABLE="/sys/devices/system/cpu/cpu$FIRSTCPU/cpufreq/scaling_available_governors"
    DOWN_FACTOR="/sys/devices/system/cpu/cpufreq/ondemand/sampling_down_factor"

    [ -f $AVAILABLE ] || exit 0

    read governors < $AVAILABLE
    case $governors in
            *interactive*)
                   GOVERNOR="interactive"
                   break
                   ;;
            *schedutil*)
                   GOVERNOR="schedutil"
                   break
                   ;;
            *ondemand*)
                   GOVERNOR="ondemand"
                   case $(uname -m) in
                           ppc64*)
                           SAMPLING=100
                   ;;
                   esac
                   break
                   ;;
            *powersave*)
                   GOVERNOR="powersave"
                   break
                   ;;
            *)
                   exit 0
                   ;;
    esac

    [ -n "${GOVERNOR:-}" ] || exit 0

    echo "Setting $GOVERNOR scheduler for all CPUs"

    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.

이제 컴퓨터를 부팅 할 때 'schedutil'조정자로 시작합니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.