18.04でCPUガバナーをパフォーマンスに設定する


24

18.04でCPUガバナーをパフォーマンスに設定しようとしていますが、問題は再起動に耐えられないことです。

この質問への回答でこれらの手順に 従ってみました。「Powersave」の代わりに「Performance」をデフォルトとして設定するには しかし、コンピューターを再起動すると、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周波数設定--governorパフォーマンス」を持つようにスクリプトを作成しようとしたとき起動。
ファルク


オンデマンドのためのLSBスクリプトを見つけることができません:J @ J-ncase::〜$ sudoのアップデート-rc.dのオンデマンド無効に更新-rc.dの:エラー私は、そのスレッド次試してみたうん、私はこのメッセージを取得する
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
ヤロックIy

6

短い答え

では/etc/rc.local、これらのコマンドでプット:

sleep 120
cpupower frequency-set --governor performance

Powersaveへのブート自動切り替えの1分後

何らかの理由で、Skylake Intel CPUは常にパフォーマンスモードで起動し、1分経過すると自動的に省電力モードに切り替わります。

起動時にモードを[ パフォーマンス]に設定すると、電力モードへの1分間の稼働時間マークの前後で上書きされます。

以下のGIFでは、起動時の3000+ MHz CPU速度が上部近くに表示されます。稼働時間は下部近くに表示されます。稼働時間が約1分に達すると、CPU MHzが低下します。:

CPUが省電力状態になる1分2.gif


呼び出された正確な2番目の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(以下で詳しく説明します)。

ログインしてから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アニメーションがありますか?私はRyzen 7を調整しようとしてcpufreq-utilsいますが、パフォーマンスガバナーを使用しても緩慢に感じます
Csaba Toth

@CsabaToth Conkyを使用して、CPU、RAM、HDD、SDD、ネットワーク、およびその他のシステムの詳細を表示します。cpupowerは必要ありませんが、cpufrequtilsパッケージの一部です。システムが遅い場合は、デフォルトのGnomeデスクトップの代わりにUnityデスクトップを試してください。
WinEunuuchs2Unix

@ WinEunuchs2Unixありがとう、Conkyについて聞いたことがなく、システムにインストールされました。Xfce4でDevuan BTWを実行しています。したがって、Conkyは私のCPU周波数が550 MHz(0.55 GHz)であると言います。これは動きの遅さを説明し、私が期待したものですが、cpufreq-info3.2 GHzを伝え、performance知事を強制しています。この質問を開く必要があります。
チャバトス

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ドライバーを使用すると、省電力ガバナーが設定されます)。このツールはintel_pstateドライバーよりも前のものであるため、支配的な周波数スケーリングドライバーはacpi-cpufreqドライバーであり、「ondemand」が優先されるUbuntuのデフォルトガバナーでした。

したがって、パフォーマンスCPU周波数スケーリングガバナーを使用して起動し続けるための1つの方法は、それから変更されるサービスを無効にすることです(別の回答でも言及されています)。

前:

~$ 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周波数スケーリングドライバーを使用するコンピューターのものです。ondemandガバナーなしで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

シェバンラインの直下。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であることを確認してください


私がやっていることの1つは、/ etc / init.d / ondemandを編集するか、ondemandを無効にするためにondemandzzzに移動する必要があることです。ガバナーを設定する前に/etc/init.d/ondemandにスリープ60があります。rc.localはブート時にパフォーマンスに変更しますが、60秒後に/etc/init.d/ondemandによって変更されます。/etc/init.d/ondemandで次の行を変更します。echo -n $ GOVERNOR> $ CPUFREQに:echo -n "performance"> $ CPUFREQ /etc/init.d/ondemandを機能させ続ける場合...
ウェス

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.