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


37

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

(知事にをエコーするのは簡単/sys/devices/system/cpu/cpu*/cpufreq/scaling_governorだと思いますが、カスタムソリューションを探していません。)


2
「カスタムソリューション」とは、シェルスクリプトが受け入れられないことを意味し、組み込みのGUIボタンである必要がありますか?
jgファウスト

標準インストールにソリューションが既に存在するかどうか疑問に思っています(GUIは必要ありません)。
-htorque

このページをチェックしてください:idebian.wordpress.com/2008/06/22/cpu-frequency-scaling-in-linuxの「debian implementation」:ブートのデフォルトを変更することは明らかに可能です。powernowdというユーザースペースツールがあります。(これは、投稿が2008年のものであるため、返信ではなくコメントです。まだ機能するかどうかはテストしていません...)
jg-faustus

回答:


25

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

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

6
-r関連オプションは、すべてのコアに対してそれを行うわけではありません。オプション-c <number>でCPU番号を指定する必要がありますが、このスクリプトはすべてのCPUに対して一度にそれを行います。for((i = 0; i <$(nproc); i ++)); do cpufreq-set -c $ i -r -g performance; 行って
スリランカ

6
まさに、@ Sriは正しい。cpufreq-set実際、最終的にはシンプルですが必要な機能が不足しています。この投票カウンターが明確に示すように、多くの人々は、その説明が単にそれを完結させるように誤解を招くので、単にそれを認識していません。
-poige

2
テストせずにこれらの+1を提供するのは誰ですか???? これはまったく機能しません。私が見つけた最も簡単な作業ソリューションを投稿しました。
switch87 16

20

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

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

これで、次のように実行できsetgov ondemand、すべてのコアがオンデマンドガバナーに切り替わります。


2
ファイルscaling_governorはrootによって所有され、許可が制限されているため、これは機能しません。許可の変更は常に推奨されるとは限りません。
スリランカ

user49449の回答に対する私のコメントの代替スクリプトを参照してください。
スリランカ

6

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

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

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

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

2

また、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

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

端末で再起動します。



0

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.