ตั้งค่า CPU Governoror เป็นประสิทธิภาพใน 18.04


25

ฉันกำลังพยายามตั้งค่าผู้ว่าการ CPU ให้มีประสิทธิภาพใน 18.04 ปัญหาคือว่ามันจะไม่สามารถรีบูตได้

ฉันได้ลองทำตามขั้นตอนเหล่านี้ในคำตอบสำหรับคำถามนี้ วิธีการตั้งค่า "ประสิทธิภาพ" แทนที่จะเป็น "Powersave" เป็นค่าเริ่มต้นอย่างไร แต่เมื่อฉันรีบูตเครื่องคอมพิวเตอร์ผู้ว่าราชการซีพียูจะเปลี่ยนกลับไปเป็น powersaver

ฉันได้ลองสร้างไฟล์ที่/etc/rc.localมีบรรทัดด้วย:

cpupower frequency-set --governor performance

นั่นยังไม่รอดจากการเรียบเครื่อง

ฉันจะทำสิ่งนี้ได้อย่างไร


3
คุณทำตามขั้นตอนอะไรบ้าง เป็นตัวพิมพ์ในชื่อไฟล์/etc/rc.localในคำถามนี้เท่านั้นหรือคุณพิมพ์ผิดแบบนั้นเมื่อสร้างมันขึ้นมา? คำถามนี้อาจไม่เฉพาะเจาะจงกับ 18.04 และอาจไม่ใช่รายงานข้อผิดพลาดแทนที่จะเป็นคำถามที่นี่ ฉันคิดว่าคำถามอาจถูกนำมาพิจารณาเพื่อเปิดใหม่หากคุณแก้ไขเพื่อเพิ่มรายละเอียดเพิ่มเติม
Zanna

พารามิเตอร์--governor powersaveควรจะเป็น--governor performance...
WinEunuuchs2Unix

ฉันติดตามรายการคำสั่งนี้แต่เมื่อฉันรีบูทคอมพิวเตอร์ผู้ว่าการซีพียูจะเปลี่ยนกลับไปเป็น powersaver ฉันไม่ทราบว่ามีการพิมพ์ผิดในคำสั่ง /etc/rc.local ฉันได้รับจากการโพสต์ askubuntu อื่นที่นี่เมื่อฉันพยายามสร้างสคริปต์ให้มีคำสั่ง 'cpupower frequency-set - ประสิทธิภาพของผู้ปกครอง' ทำงานที่ การเริ่มต้น
Falc


ใช่ฉันได้ลองทำตามเธรดนั้นฉันได้รับข้อความนี้: j @ j-ncase: ~ $ sudo update-rc.d ondemand ปิดการใช้งาน update-rc.d: ข้อผิดพลาด: ไม่พบสคริปต์ LSB สำหรับ ondemand
Falc

คำตอบ:


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

4
จริงๆแล้วเพียงแค่คำสั่งสุดท้ายก็เพียงพอแล้ว หลังจากsudo systemctl disable ondemandและบูต: แสดงให้เห็นว่าcat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor performance
Yalok Iy

6

คำตอบสั้น ๆ

ใน/etc/rc.localใส่ในคำสั่งเหล่านี้:

sleep 120
cpupower frequency-set --governor performance

1 นาทีหลังจากบูตสวิตช์อัตโนมัติไปที่ Powersave

ไม่ว่าจะด้วยเหตุผลใด Skylake Intel CPU จะเริ่มทำงานในโหมดประสิทธิภาพเสมอจากนั้นสลับไปที่โหมด Powersave ที่เครื่องหมาย 1 นาทีโดยอัตโนมัติ

หากคุณตั้งค่าโหมดเป็นประสิทธิภาพเมื่อเริ่มต้นระบบจะถูกแทนที่ด้วยเครื่องหมายเวลา 1 นาทีเป็นโหมดPowersave

ใน GIF ด้านล่างความเร็ว CPU 3000+ MHz เมื่อเริ่มต้นจะปรากฏขึ้นที่ด้านบน เวลาที่ใช้จะปรากฏขึ้นใกล้กับด้านล่าง เมื่อเวลาถึงประมาณ 1 นาทีคุณจะเห็น CPU MHz เลื่อนลง :

CPU ไปที่ powersave 1 นาที 2.gif


โปรแกรมตรวจสอบ Powersave วินาทีที่ถูกเรียก

สร้างสคริปต์นี้ใน/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คำสั่ง (อธิบายในรายละเอียดด้านล่าง)

หนึ่งนาทีหลังจากลงชื่อเข้าใช้ดูที่เอาต์พุต:

$ 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

ยืนยันจากนี้คำตอบของรัฐนี้ใช้บังคับ 1 นาทีถึงผู้ว่าราชการจังหวัดจะถูกควบคุมโดยpowersave/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 ที่คุณมี animgif นั้นมาจากไหน? ฉันพยายามปรับแต่ง Ryzen 7 ด้วยcpufreq-utilsแต่ก็รู้สึกซบเซาแม้กับผู้ว่าการแสดง
Csaba Toth

@CsabaToth ฉันใช้Conkyเพื่อแสดง CPU, RAM, HDD, SDD, เครือข่ายและรายละเอียดระบบอื่น ๆ คุณไม่จำเป็นต้องcpupowerแต่เป็นส่วนหนึ่งของcpufrequtilsแพ็คเกจ หากระบบช้าลองใช้เดสก์ท็อปUnityแทนเดสก์ท็อปGnome ที่เป็นค่าเริ่มต้น
WinEunuuchs2Unix

@ WinEunuchs2Unix ขอบคุณฉันไม่เคยได้ยิน Conky และติดตั้งลงในระบบของฉัน ฉันใช้ Devuan BTW กับ Xfce4 ดังนั้น Conky กล่าวว่าความถี่ซีพียูของฉันคือ 550 MHz (0.55 GHz) ซึ่งอธิบายความเกียจคร้านและเป็นสิ่งที่ฉันคาดหวัง แต่cpufreq-infoบอก 3.2 GHz และฉันบังคับperformanceผู้ว่าการ ฉันต้องเปิดคำถามเพื่อสิ่งนี้
Csaba จนถึง

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 นาทีจากนั้นมีการเปลี่ยนแปลงผู้ว่าราชการจังหวัดทั้งปรับ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

ทำไมถึงเรียกว่า "ondemand" แต่มันตั้งค่าผู้ว่าการคนอื่น ๆ (ตัวอย่างเช่นกับไดรเวอร์ intel_pstate มันจะตั้งผู้ว่าราชการ powersave)? เนื่องจากเครื่องมือนี้ pre-date ไดรเวอร์ intel_pstate กลับไปเมื่อเวลาผ่านไปไกลไดรเวอร์ปรับความถี่ที่โดดเด่นคือไดรเวอร์ acpi-cpufreq และ "ondemand" เป็นผู้ว่าราชการเริ่มต้นที่ต้องการอูบุนตู

ดังนั้นวิธีหนึ่งในการบูตและใช้งานโดยใช้มาตรวัดความถี่ซีพียูประสิทธิภาพคือการปิดใช้งานบริการที่เปลี่ยนแปลงไปจากมัน (ซึ่งถูกกล่าวถึงในอีกคำตอบหนึ่ง):

ก่อน:

~$ 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 หากคุณกำลังใช้ไดรเวอร์ intel_pstate โดยไม่มีผู้ควบคุม ondemand ผู้ว่าการประหยัดพลังงานจะถูกใช้โดยค่าเริ่มต้น

คำถามที่คาดหวัง: เพราะเหตุใดความถี่ซีพียูของฉันถึงขนาดถึงแม้จะใช้ตัวควบคุมประสิทธิภาพ

คำตอบ: ตัวประมวลผลที่ทันสมัยปรับความถี่ 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

สิ่งนี้ใช้ได้กับการตั้งค่าของฉัน แต่คุณเพียงแค่ต้องแก้ไขมันสำหรับการตั้งค่าของคุณ

ฉันเพิ่มใน /etc/rc.local โดยใช้ nano:

# 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 ปิด nano ด้วย Ctrl-X และ Y เพื่อบันทึก

จากนั้นสำหรับ 18.04 (อาจไม่ทำงานใน 16.04) ในการเรียกใช้บรรทัดคำสั่ง:

systemctl disable ondemand

จากนั้นในบรรทัดคำสั่ง - อ่าน /etc/rc.local จากนั้นรีบูต:

/etc/rc.local
reboot

หาก /etc/rc.local chokes และข้อผิดพลาดตรวจสอบให้แน่ใจว่าเป็น chmod + x /etc/rc.local


อีกสิ่งหนึ่งที่ฉันทำคือการแก้ไข /etc/init.d/ondemand หรือ ondemand ต้องถูกย้ายไปยัง ondemandzzz เพื่อปิดการใช้งาน มีการนอนหลับ 60 ครั้งใน /etc/init.d/ondemand ก่อนที่จะตั้งผู้ว่าการ แม้ว่า rc.local จะเปลี่ยนเป็นประสิทธิภาพในเวลาบูต แต่ 60 วินาทีหลังจากนั้นมันจะถูกเปลี่ยนโดย /etc/init.d/ondemand ใน /etc/init.d/ondemand เปลี่ยนบรรทัด: echo -n $ GOVERNOR> $ CPUFREQ เป็น: echo -n "performance"> $ CPUFREQ ถ้าคุณตัดสินใจที่จะเก็บ /etc/init.d/ondemand ทำงาน ...
WesZ

1

ฉันใช้สคริปต์ทุบตีนี้เพื่อตั้ง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' แต่หลังจากรีบูตฉันมักจะพบผู้ว่าการ 'ondemand' ฉันอ่านและลองใช้วิธีแก้ไขปัญหาส่วนใหญ่ที่นำเสนอที่นี่เพื่อประโยชน์

เคล็ดลับอะไรสำหรับฉันและฉันใช้ Ubuntu Mate 18.04.2 กำลังค้นหาไฟล์:

/ lib / systemd / ชุด 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.