web-dev-qa-db-ja.com

すべてのコアのCPU周波数スケーリングガバナーを一度に設定するにはどうすればよいですか?

CPU周波数スケーリングガバナーは、コアごとに個別に行うのではなく、すべてのコアに対して一度に設定したいと思います。これを行う方法はありますか?

(ガバナーを/sys/devices/system/cpu/cpu*/cpufreq/scaling_governorにエコーすることは簡単ですが、カスタムソリューションを探しているわけではありません。)

36
htorque

私は何度もグーグルで検索したが、それは不可能だと思うので、次のワンライナーを.bashrcに追加した。

function setgov ()
{
    echo "$1" | Sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 
}

これで、setgov ondemandのようなものを実行でき、すべてのコアがondemandガバナーに切り替わります。

18
htorque

私はまだLinux初心者ですが、cpufrequtilsを使用してそれを行うことができるとは思いませんか(Ubuntu OSにはバンドルされていませんが、リポジトリにあります)

Sudo apt-get install cpufrequtils
Sudo cpufreq-set -r -g performance
  • -rフラグは、すべての(「すべてのハードウェア関連」)コアの変更を設定するために使用されます
24
user49449

すべてのコアのガバナーを変更する最も短いコマンドは次のとおりです。

Sudo bash -c 'for i in {0..7}; do cpufreq-set -c $i -g performance; done'

前述のhtorqueのように.bashrcに追加できます。ルートSudo setgov performanceとして実行する必要があります。

function setgov ()
{
     for i in {0..7}; 
     do 
         cpufreq-set -c $i -g $1; 
     done
}
6
switch87

Ubuntu 16.04以降では、約30秒後にガバナーがデフォルトでpowersaveに戻るため、これを固執するように設定します(Ubuntu Mateを使用しています)。

  1. この(1行の)コードを入力してください(前の回答のswitch87のおかげで)

    sleep 60 && bash -c 'for i in {0..7}; do cpufreq-set -c $i -g performance; done'
    
  2. ディレクトリ内のファイルに

    /etc/rc.local
    

私のものは、「exit 0」の上の行であり、コメント化されたものの下にコメントがありません。

知らない人のための「rc.local」は、コマンドをSudoとして実行します。ガバナーを変更するためのコマンドはすべて、Sudoとして実行する必要があります。

ガバナーはpowersaveにリセットし、60秒後にコードをSudoとして実行してパフォーマンスに戻します。

「コピーするコード内の」「60」を、コマンドを遅らせる必要がある時間(秒単位。60= 60秒= 1分)に変更し、「コマンド」部分の「パフォーマンス」を必要なガバナーに変更します。への変更。

私が何時間も探し続けたうちに、これに対するこれ以上の恒久的な修正は見つかりませんでした。これが私が見つけた最良の修正である場合、節電状態になるのは数分ですよね?右。

最善の修正方法ではありませんが、省電力機能への小さな切り替えを行った後、ある程度永続的になります。すぐに起動してゲームや何かにジャンプしたい場合は、単にコードを入れてから省電力から切り替えるか、タイミングを下げる必要があります(所要時間によって異なります)すべてを起動して、正しくパフォーマンスに切り替えます)。

そして、いつものように、デフォルトに戻すには(最初の場所でデフォルトで節電するようにデフォルト設定していたかもしれない理由で、人々のPCの過熱に関するいくつかの問題を見ました)、rc.localからコードを削除して再起動するか、元に戻しますCPUアイコンインジケータスイッチャーを使用して手動で実行するか、実行します。

 Sudo /etc/init.d/cpufrequtils restart

端末で再起動します。

2
Roiikka

実行中にbashコード補完を追加することもできます。

function setgovernor () {
    echo "$1" | Sudo tee 
    /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 
}
complete -W "$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors)" setgovernor
2
Ray Malanga

Switch87の答えに基づいて、すべてのCPUで他のcpufreq-set-all処理を実行できる単純なスクリプトcpufreq-setを作成しました。

   #!/bin/bash
   MAX_CPU=$((`nproc --all` - 1))
   for i in $(seq 0 $MAX_CPU); do
       echo "Changing CPU " $i " with parameter "$@;
       cpufreq-set -c $i $@ ;
   done

これで、次のように(もちろんchmod +xの後)呼び出すことができます:

cpufreq-set-all -g powersave

または

cpufreq-set-all -f 800Mhz
0
side2k

これを実行すると、すべてのコアに対して一度に実行できます

Sudo cpupower frequency-set --governor performance
0