Setel gubernur CPU ke kinerja di 18.04

25

Saya mencoba mengatur gubernur CPU untuk kinerja di 18,04, masalahnya adalah bahwa ia tidak pernah selamat dari reboot.

Saya sudah mencoba mengikuti langkah-langkah ini dalam jawaban untuk pertanyaan ini. Bagaimana mengatur "Kinerja" daripada "Powersave" sebagai default? tetapi ketika saya me-reboot komputer, gubernur CPU beralih kembali ke powersaver.

Saya juga mencoba membuat file yang disebut /etc/rc.localdengan baris:

cpupower frequency-set --governor performance

Itu juga tidak selamat dari reboot.

Bagaimana saya bisa melakukan ini?

Falc
sumber
3
Apa prosedur yang Anda ikuti? Apakah kesalahan ketik dalam nama file /etc/rc.localhanya dalam pertanyaan ini, atau apakah Anda membuat kesalahan ketik yang sama saat membuatnya? Pertanyaan ini mungkin tidak spesifik untuk 18.04 dan mungkin bukan laporan bug daripada pertanyaan di sini. Saya pikir pertanyaannya dapat dipertimbangkan untuk dibuka kembali jika Anda mengeditnya untuk menambahkan lebih detail.
Zanna
Parameternya --governor powersaveharus --governor performance...
WinEunuuchs2Unix
Saya mengikuti daftar perintah ini , tetapi ketika saya reboot komputer gubernur cpu kembali ke powersaver. Saya tidak menyadari ada kesalahan ketik pada perintah /etc/rc.local, saya mendapatkannya dari posting askubuntu lain di sini ketika saya mencoba membuat skrip untuk menjalankan perintah 'cpupower frequency-set - performance gubernur' dijalankan di memulai.
Falc
Ya saya sudah mencoba mengikuti utas itu, saya mendapatkan pesan ini: j @ j-ncase: ~ $ sudo update-rc.d ondemand nonaktifkan update-rc.d: error: tidak dapat menemukan skrip LSB untuk ondemand
Falc

Jawaban:

18
sudo apt-get install cpufrequtils
echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
sudo systemctl disable ondemand
Manajer malam
sumber
4
Sebenarnya, perintah terakhir saja sudah cukup. Setelah sudo systemctl disable ondemanddan reboot: cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governormenunjukkan performance.
Yalok Iy
6

Jawaban singkat

Dalam /etc/rc.localput di perintah ini:

sleep 120
cpupower frequency-set --governor performance

1 menit setelah boot, otomatis beralih ke Powersave

Untuk alasan apa pun CPU Skylake Intel saya selalu memulai dalam mode Kinerja dan kemudian beralih ke mode Hemat Daya pada tanda 1 menit secara otomatis.

Jika Anda mengatur mode ke Performa pada startup, itu akan ditimpa sekitar tanda Waktu 1 menit ke mode Hemat Daya .

Dalam GIF di bawah ini, kecepatan CPU 3000+ MHz saat start up muncul di dekat bagian atas. Waktu naik muncul di dekat bagian bawah. Ketika waktu tiba sekitar 1 menit Anda melihat CPU MHz drop off. :

CPU berjalan hemat 1 menit 2.gif


Program untuk memantau Powersave kedua yang tepat dipanggil

Buat skrip ini di /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

Hubungi skrip /etc/rc.localsebelum exit 0perintah (dijelaskan secara rinci di bawah).

Satu menit setelah masuk lihat output:

$ 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

Konfirmasi dari jawaban ini menyatakan kekuatan 1 menit untuk powersavegubernur ini dikendalikan oleh /etc/init.d/ondemand.


Tidur 120 detik sebelum mengatur Mode Kinerja

Cara termudah untuk tetap dalam mode Kinerja adalah mengedit /etc/rc.localdan menyisipkan baris-baris ini sebelum baris terakhir yang berisi exit 0:

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

Simpan file dan reboot.

Jika Anda memasukkan baris baru setelah exit 0itu tidak akan pernah dieksekusi.


Peringatan

Mesin Anda mungkin akan berjalan lebih panas 10 hingga 15 derajat C.

Anda mungkin perlu menghapus program lain yang mengubah frekuensi CPU jika mereka menimpa pengaturan Kinerja Anda /etc/rc.local

WinEunuuchs2Unix
sumber
Paket mana yang memiliki cpupowerdan GUI dari mana Anda memiliki animgif itu? Saya mencoba untuk menyetel Ryzen 7 dengan cpufreq-utilstetapi rasanya lamban bahkan dengan gubernur kinerja
Csaba Toth
@CsabaToth Saya menggunakan Conky untuk menampilkan CPU, RAM, HDD, SDD, Jaringan dan detail sistem lainnya. Anda tidak perlu cpupower tetapi itu adalah bagian dari cpufrequtilspaket. Jika sistem lamban coba Unity desktop, bukan desktop Gnome default .
WinEunuuchs2Unix
@ WinEunuchs2Unix terima kasih, saya belum pernah mendengar tentang Conky, dan sudah diinstal ke sistem saya. Saya menjalankan Devuan BTW dengan Xfce4. Jadi Conky mengatakan frekuensi CPU saya adalah 550 MHz (0,55 GHz), yang menjelaskan kelesuan dan apa yang saya harapkan, tetapi cpufreq-infomemberitahu 3,2 GHz dan saya memaksa performancegubernur. Saya perlu membuka Pertanyaan untuk ini.
Csaba Toth
4

Konfigurasi kernel Ubuntu default sedemikian rupa sehingga gubernur penskalaan frekuensi CPU kinerja akan digunakan selama boot. Bagian yang relevan dari file konfigurasi kernel ( /boot/config-4.15.0-36-generic, dalam contoh ini) adalah:

#
# 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

Tetapi juga secara default saat boot up ondemandlayanan dijalankan. Itu tidur selama 1 menit dan kemudian mengubah gubernur penskalaan ke salah satu interactive, ondemandatau powersave, tergantung pada ketersediaan. Pada gilirannya ketersediaan tergantung pada driver penskalaan frekuensi CPU yang Anda gunakan. Kode tersebut (di beberapa lokasi, cari 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

Mengapa ini disebut "ondemand", tetapi ia menetapkan gubernur lain (misalnya dengan driver intel_pstate itu akan mengatur gubernur yang hemat daya)? Karena alat ini meng-pre-date driver intel_pstate, kembali ke masa ketika, sejauh ini, driver penskalaan frekuensi yang dominan adalah driver acpi-cpufreq, dan "ondemand" adalah gubernur default Ubuntu yang disukai.

Jadi, salah satu cara untuk boot dan tetap menggunakan kinerja gubernur penskalaan frekuensi CPU adalah dengan menonaktifkan layanan yang berubah darinya (yang juga disebutkan dalam jawaban lain):

Sebelum:

~$ 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

Nonaktifkan layanan:

~$ sudo systemctl disable ondemand
Removed /etc/systemd/system/multi-user.target.wants/ondemand.service.

boot ulang, lalu periksa kembali (pastikan untuk menunggu beberapa saat setelah boot ulang):

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

Catatan: contoh dalam jawaban ini berasal dari komputer yang menggunakan driver scaling frekuensi CPU acpi-cpufreq. Jika Anda menggunakan driver intel_pstate, tanpa gubernur ondemand, gubernur yang hemat daya akan digunakan secara default.

Pertanyaan yang diantisipasi: Mengapa skala frekuensi CPU saya, bahkan ketika menggunakan gubernur kinerja?

Jawaban: Prosesor modern skala frekuensi CPU, bahkan dalam mode kinerja dan sebagai fungsi dari kedalaman keadaan siaga mereka masuk ke. Jika Anda benar-benar ingin mengunci frekuensi CPU maka nonaktifkan semua status siaga lebih dalam dari 0. Namun, perlu diketahui bahwa ini akan menghabiskan banyak daya.

Secara pribadi, dan sebagaimana disebutkan dalam jawaban lain, saya menggunakan gubernur kinerja atau gubernur hemat daya sebagai fungsi dari pekerjaan apa pun yang saya lakukan. Skrip saya sedikit berbeda:

$ 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

dan:

$ 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

contoh penggunaan (pada komputer menggunakan driver intel_pstate):

$ sudo ./set_cpu_performance
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
performance
performance
performance
performance
performance
performance
performance
performance
Doug Smythies
sumber
2

Apa yang saya lakukan adalah menggunakan file /etc/rc.local

Untuk membantu Anda menemukan jalan Anda, gunakan:

find / -name scaling_governor
find / -name scaling_max_freq

Ini berfungsi untuk pengaturan saya, tetapi Anda hanya perlu mengeditnya untuk pengaturan Anda

Saya menambahkan ke /etc/rc.local menggunakan 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

langsung di bawah garis shebang. Tutup nano dengan Ctrl-X dan Y untuk menyimpan

Kemudian untuk 18.04 (mungkin tidak berfungsi pada 16.04) pada baris perintah jalankan:

systemctl disable ondemand

Kemudian pada baris perintah - baca /etc/rc.local lalu reboot:

/etc/rc.local
reboot

jika /etc/rc.local tersedak dan kesalahan maka pastikan itu chmod + x /etc/rc.local

WesZ
sumber
Satu hal lain yang saya lakukan adalah mengedit /etc/init.d/ondemand atau ondemand perlu dipindahkan ke ondemandzzz untuk menonaktifkannya. Ada sleep 60 di /etc/init.d/ondemand sebelum mengatur gubernur. Meskipun rc.local akan mengubahnya menjadi kinerja saat boot, 60 detik kemudian akan diubah oleh /etc/init.d/ondemand. Di /etc/init.d/ondemand ubah baris: echo -n $ GOVERNOR> $ CPUFREQ ke: echo -n "performance"> $ CPUFREQ jika Anda memutuskan untuk mempertahankan /etc/init.d/ondemand berfungsi ...
WesZ
1

Saya menggunakan skrip bash ini untuk menetapkan performancegubernur:

#!/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 dapat dieksekusi chmod +x cpu.shdan dijalankan kapan saja Anda butuhkan (selalu setelah setiap komputer memulai / reboot).

Michal Przybylowicz
sumber
0

Saya punya masalah serupa. Dalam kasus saya, saya ingin mengatur gubernur menjadi 'schedutil', tetapi setelah reboot saya akan selalu menemukan gubernur menjadi 'ondemand'. Saya membaca dan mencoba sebagian besar solusi yang disajikan di sini tidak berhasil.

Apa triknya bagi saya, dan saya menggunakan Ubuntu Mate 18.04.2 menemukan file:

/ lib / systemd / set-cpufreq

mengeditnya untuk menyisipkan baris:

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

jadi sekarang file tersebut berbunyi:

    #! /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.

dan sekarang ketika saya boot komputer saya mulai dengan gubernur 'schedutil'!

Vulto
sumber