試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

マルチコアCPU環境におけるcpufreqdの動作に関するメモ(後半・2010/11/12現在)

マルチコアCPU環境におけるcpufreqdの動作に関するメモ(前半・2010/11/10現在)」の続き。見出し「プロファイル自動切り替えモード(非マニュアルモード)におけるコアごとのプロファイル割り当て」における続きとなる。

  1. プロファイル自動切り替えモード(非マニュアルモード)におけるコアごとのプロファイル割り当て <前半>
    1. バージョン2.4.2の時点ではうまく動作しない? <前半>
    2. 同一のプロファイルを2つ以上のコアに指定したい場合
    3. コアごとに異なるプロファイルを割り当てることの実用性について
  2. 関連:マルチコアCPU環境におけるcpufrequtilsのcpufreq-setの動作について

同一のプロファイルを2つ以上のコアに指定したい場合
同一のプロファイル名を2つ以上のコアに指定しようとしてもうまくいかないが、同じ内容のプロファイルを別名で作成してそれぞれ指定することはできる。ただ、同時に適用させたいコアの数だけ必要になるので、その数が多い場合は問題になるかもしれない。
下は3コアCPUで800MHz固定(クロックの最大値と最小値が同一なのでgovernorはどれでも同じだが、用途からpowersaveとした)のプロファイルを同時に2つのコアで用いる場合の設定例の一部となる。
[一部]ファイル名: /etc/cpufreqd.conf

[Profile]
name=ps_800
minfreq=800000
maxfreq=800000
policy=powersave
[/Profile]

[Profile]
name=ps_800_2
minfreq=800000
maxfreq=800000
policy=powersave
[/Profile]

[Rule]
name=[ルール名]
cpu_interval=[ルール適用対象の最小CPU使用率]-[ルール適用対象の最大CPU使用率]
programs=[動かすとこのルールが適用されるようにするコマンドの名前...]
profile=CPU0:ps_800;CPU1:ps_800_2;CPU2:[別のプロファイル名]
[/Rule]

もちろん、(コア数に関係なく)全てのコアで同一のプロファイルを用いるようにしたいのであれば

profile=ps_800

のように1つのプロファイル名を指定するだけでよい。

コアごとに異なるプロファイルを割り当てることの実用性について
コアごとのプロファイル割り当てでクロック範囲の異なるものが混ざっていると

  • 特定のコアだけクロックが上がるようにする
  • 特定のコアだけ低いクロックで動かす

といったことができるが、こうした動作を要求する場面はCPUを普通に使っている限りにおいてはあまりなく、CPUのコア電圧(Vcore)はクロックの一番高いコアに合わせられる(hwmonの出力を見て判断)ということもあるので、省電力目的で効果がどれほどあるのかについては不明。例えば、3コアのCPUで各コアのクロックがそれぞれ「800MHz/800MHz/1900MHz」の状態と「1900MHz/1900MHz/1900MHz」の状態はともにコア電圧は同じになるが、前者のほうが省電力になるのかどうかというのはそれぞれにおける実際の消費電力を(低負荷時・高負荷時ともに)測定してみないと分からない。

関連:マルチコアCPU環境におけるcpufrequtilsのcpufreq-setの動作について

(cpufreqdのようなデーモンを経由した操作ではなく)cpufreqの仕組みに直接アクセスするcpufrequtilsのcpufreq-setコマンド(実行には管理者権限が必要)は、そのままでは0番のCPUコアにのみ操作を行い(manページにもこの動作に関する記述がある)、--cpu [CPU番号(0から)](-c [CPU番号])オプションを付けることで任意のCPUコアに対して操作を行うことができる。
例えば、2番のCPUコアのgovernorを「performance」に切り替える場合

$ sudo cpufreq-set -c 2 -g performance

とする。

使用したバージョン:

  • cpufreqd 2.4.2
  • cpufrequtils 007