CPUの動作周波数をコントロールする

Mac miniにLMDEをインストールしたらCPUの動作が状況によって変わるように設定されていました。
ノートPCなどのバッテリ駆動のパソコンならば必要な機能ですが、Mac miniではあまり必要性が感じられない機能ですので、設定を変更したいと思います。

この設定を行うにはカーネルがこの機能を使えるようになっている必要がありますが、最近のカーネルでは標準でこの機能は有効になっているそうです。

CPUの状態を調べる

LMDEではcpufrequtilsパッケージがインストールされるようで、これに含まれているコマンドをパソコン起動時にに実行して動作設定を変更しています。
このパッケージには設定参照用のコマンドも含まれていますので端末でコマンドを実行することで状態を確認することが出来ます。

コマンド

cpufreq-info

コマンド実行結果

Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 10.0 us.
  hardware limits: 1000 MHz - 1.83 GHz
  available frequency steps: 1.83 GHz, 1.67 GHz, 1.50 GHz, 1.33 GHz, 1000 MHz
  available cpufreq governors: powersave, userspace, conservative, ondemand, performance
  current policy: frequency should be within 1000 MHz and 1.83 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency is 1000 MHz.
  cpufreq stats: 1.83 GHz:13.81%, 1.67 GHz:0.41%, 1.50 GHz:0.42%, 1.33 GHz:3.18%, 1000 MHz:82.17%  (16276)
analyzing CPU 1:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 1
  CPUs which need to have their frequency coordinated by software: 1
  maximum transition latency: 10.0 us.
  hardware limits: 1000 MHz - 1.83 GHz
  available frequency steps: 1.83 GHz, 1.67 GHz, 1.50 GHz, 1.33 GHz, 1000 MHz
  available cpufreq governors: powersave, userspace, conservative, ondemand, performance
  current policy: frequency should be within 1000 MHz and 1.83 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency is 1000 MHz.
  cpufreq stats: 1.83 GHz:13.05%, 1.67 GHz:0.20%, 1.50 GHz:0.21%, 1.33 GHz:1.44%, 1000 MHz:85.09%  (15936)

オプション無しで実行したので、すべてのコアと設定が出力されます。
Mac mini2.1は1CPUでコアが2つなのでこのような実行結果になります。

CPUの動作はガバナーと呼ばれるプリセットがいくつかあり、そのプリセットによってCPUの動作を変えているようです。

現在の設定を確認するには先ほど出力された設定のcurrent policyを見るか、コマンドで
cpufreq-infoにオプション-pを付けることでで確認することが出来ます。

コマンドと実行結果

cpufreq-info -p

1000000 1833000 ondemand

出力された結果の数値は最低周波数と最高周波数になります。
ondemandの設定は状況に合わせて周波数を変え、CPU使用率が一定値以上になった時に周波数を変化させる設定です。

ガバナーの変更

CPUの動作周波数を常に最高にするにはガバナーをondemandからperformanceに変えることで可能になります。
performanceは常にCPUの最高周波数で動作させる設定です。

管理者権限でcpufreq-setコマンドを実行して設定を変更できます。

コマンド

sudo cpufreq-set -r -g performance


-rオプションですべてのCPUの設定を変更することができるそうです。
-gオプションでその後に入力したガバナーに設定することが出来ます。
これで設定が変わったはずなので確認してみます。

コマンドと実行結果

cpufreq-info -p

1000000 1833000 performance

変わったようです。

しかし、cpufreq-infoで確認すると、-rオプションを付けてもCPU 0だけが変更されCPU 1はガバナーが変更されていません。
どうやら-rオプションは実CPUが複数の場合に有効なオプションのようです。
また、コアごとに動作周波数も変えることが出来るのを初めて知りました。

コアごとにガバナーを変更する場合は、-cオプションにCPU番号を付けることで特定のコアに設定をすることが出来ます。
-cオプションを付けない場合は0番のCPUを選択したとみなされます。

コマンド

sudo cpufreq-set -c 1 -g performance

これで1番のCPUも設定が変更出来ました。


再起動すると設定は元に戻る

設定は再起動すると起動時に/etc/init.d/cpufrequtilsが実行され、ここに書かれた内容にリセットされてしまいます。
起動時に設定をデフォルトから変更したい場合は、/etc/default/cpufrequtilsファイルを作成し、そこに設定を書いておくことで変更することが出来ます。
設定は変更したい部分だけ記述すればOKです。

ファイルは何もしていなければ存在しませんので新規に作成します。
エディタを管理者権限でファイル名を指定して実行します。

コマンド

sudo nano /etc/default/cpufrequtils

内容はガバナーの設定を変更するだけですので以下の設定をファイル内に記述します。
GORVENOR="performance"

記述したらファイルを保存してエディタを終了します。


起動スクリプトで再実行させる

cpufrequtilsを再実行させて先ほど作成した設定ファイルを読み込ませます。

コマンドと実行結果

sudo /etc/init.d/cpufrequtils restart

[ ok ] CPUFreq Utilities: Setting performance CPUFreq governor...CPU0...CPU1...done.

cpufreq-infoで変更されたか確認します。

コマンド実行結果

Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 10.0 us.
  hardware limits: 1000 MHz - 1.83 GHz
  available frequency steps: 1.83 GHz, 1.67 GHz, 1.50 GHz, 1.33 GHz, 1000 MHz
  available cpufreq governors: powersave, userspace, conservative, ondemand, performance
  current policy: frequency should be within 1000 MHz and 1.83 GHz.
                  The governor "performance" may decide which speed to use
                  within this range.
  current CPU frequency is 1.83 GHz.
  cpufreq stats: 1.83 GHz:33.54%, 1.67 GHz:0.59%, 1.50 GHz:0.22%, 1.33 GHz:6.79%, 1000 MHz:58.87%  (81041)
analyzing CPU 1:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 1
  CPUs which need to have their frequency coordinated by software: 1
  maximum transition latency: 10.0 us.
  hardware limits: 1000 MHz - 1.83 GHz
  available frequency steps: 1.83 GHz, 1.67 GHz, 1.50 GHz, 1.33 GHz, 1000 MHz
  available cpufreq governors: powersave, userspace, conservative, ondemand, performance
  current policy: frequency should be within 1000 MHz and 1.83 GHz.
                  The governor "performance" may decide which speed to use
                  within this range.
  current CPU frequency is 1.83 GHz.
  cpufreq stats: 1.83 GHz:53.99%, 1.67 GHz:0.16%, 1.50 GHz:0.17%, 1.33 GHz:1.40%, 1000 MHz:44.28%  (73500)


これで常にクロックが最高値で動作するようになりました。
クロックが上がってもCPUの温度は使用率が低いならば上昇しません。

※このユーティリティでは限界値を超えたクロックの設定(オーバークロック)は出来ません。

Comments