[PR] この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。

1. 概要

1.1. cpufreq

バージョン2.6系のLinuxカーネルには、CPUが持っている動的なクロック周波数や電圧(対応している場合)の変更機能を利用するためのcpufreqという仕組みがあります。単独で使用すると効果はそれほど高くないかもしれませんが、後述のcpufreqdと組み合わせてうまく設定をすることで、CPUの消費電力を大幅に削減することができます。

1.1.1. ポリシーの決定

cpufreqでは

  • クロックや電圧を調節する際の動作モード「governor」の種類

  • 変動するクロック周波数の範囲(最小値と最大値による指定)

の2つにより、動作ポリシーが決定されます。クロック周波数の範囲は、CPU自体の持つ範囲内で、変動を許可する範囲を指定することになります。ただし、変更の段階もCPUによって定められていて数も少ないため、細かい周波数変動をさせることはできません。

cpufrequtils(http://www.kernel.org/pub/linux/utils/kernel/cpufreq/cpufrequtils.html)のcpufreqd-infoコマンドを使用すると、これらの情報に加え、現在の動作状態も調べることができます。

例1 cpufreqd-infoによる情報の取得例

$ cpufreq-info
cpufrequtils 002: cpufreq-info (C) Dominik Brodowski 2004-2006
Report errors and bugs to linux@brodo.de, please.
analyzing CPU 0:
  driver: powernow-k8
  CPUs which need to switch frequency at the same time: 0
  hardware limits: 1000 MHz - 2.20 GHz
  available frequency steps: 2.20 GHz, 2.00 GHz, 1.80 GHz, 1000 MHz
  available cpufreq governors: ondemand, powersave, userspace, performance
  current policy: frequency should be within 1000 MHz and 1.80 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency is 1000 MHz.

hardware limits(CPU自体の変動可能範囲)available frequency steps(CPUが切り替えることのできるクロック周波数の段階一覧)は確認しておくとよいでしょう。


1.1.2. governorの一覧

governorには以下の種類があります。

表1 governorの種類と動作ポリシー

種類動作
ondemand負荷がかかるとクロックを上げ、負荷が下がるとクロックも下げる(値は急に大きく変動する)
conservative負荷がかかるとクロックを上げ、負荷が下がるとクロックも下げる(値はゆっくり段階的に変動する)
powersave負荷に関わらず、最低のクロックで動作
performance負荷に関わらず、最高(定格)のクロックで動作

1.2. cpufreqd

cpufreqdは、CPU負荷や動作中のプログラム、センサ値などのシステムからの状態を監視しながら適切な動作ポリシーを適用するプログラムです。上手に設定することで、CPUの消費電力を大幅に削減することができます。

1.2.1. cpufreqdの設定

cpufreqdの設定は/etc/cpufreqd.confで行います。ここでは、設定の書き方を簡単に扱います。

  1. # 全体設定
  2. [General]
  3. pidfile=/var/run/cpufreqd.pid
  4. poll_interval=4 # システムの状態を見てプロファイル変更の検討を行う間隔[秒]
  5. enable_remote=1 # cpufreqd-setによるプロファイルの変更を行えるようにする
  6. remote_group=wheel # プロファイルの変更を許可するグループ
  7. verbosity=0 # 出力詳細度・テスト時以外は0で
  8. [/General]
  9.  
  10. # プロファイルの定義
  11. # 周波数部分は最大値に対するパーセント表記も可能
  12. [Profile]
  13. name=conservative min-mid # プロファイル識別名
  14. minfreq=1000000 # 最低クロック(Hz)
  15. maxfreq=2000000 # 最大クロック(Hz)
  16. up_threshold=70 # (ondemand/conservative時のみ)
  17. # CPU使用率のパーセンテージが
  18. # この値を超えるとクロックが上がる
  19. down_threshold=40 # (conservative時のみ)CPU使用率のパーセンテージが
  20. # この値を下回るまでクロックを下げない
  21. policy=conservative # このプロファイルで使用するgovernor名
  22. [/Profile]
  23.  
  24. # 以下同様にしてプロファイル定義を続けて記述
  25. [Profile]
  26. name=...
  27. ...
  28. policy=...
  29. [/Profile]
  30.  
  31. # ルール定義
  32. # ダイナミック・モードのプロファイル自動切り替えの条件を記述
  33. # ルール記述の順番によっても挙動が変わるので
  34. # 意図した通りにならないときは順番を変えるのも手
  35. # ルール名とプロファイル名は異なっていてもOK
  36. [Rule]
  37. name=fixed min # ルール識別名
  38. cpu_interval=0-100 # CPU使用率がこの範囲のときに下のプロファイルを検討
  39. programs=program1,program2,program3 # これらのプログラムのいずれかが
  40. # 動作しているときに下のプロファイルを検討
  41. profile=fixed min # 上の条件を満たしたときに選択するプロファイルの識別名
  42. [/Rule]
  43.  
  44. # 以下同様にしてルール定義を続けて記述
  45. [Rule]
  46. name=...
  47. ...
  48. profile=...
  49. [/Rule]
  50.  
  51. [Rule]
  52. name=default
  53. cpu_interval=0-100
  54. profile=conservative min-max
  55. [/Rule]

設定のテストは、(動作していれば)事前にデーモンを停止しておいて

$ sudo /etc/init.d/cpufreqd stop

cpufreqd-D-Vのオプション[1]付きで実行し、Ctrl+Cで止める形で行うと便利です。

$ sudo /usr/sbin/cpufreqd -D -V 7

その後、システムの起動スクリプトから開始します。

$ sudo /etc/init.d/cpufreqd start

1.2.2. 手動でプロファイルを切り替える

cpufreqdは、通常時は定義済みのルールに基づいて自動的にプロファイルを切り替えます。しかし、状況によっては、手動でプロファイルを指定して切り替えたいこともあります。

そういったときにはcpufreqd-setというコマンドでcpufreqdの動作モードを「マニュアル・モード」に切り替えた上でプロファイルの番号を指定することで手動でのプロファイル切り替えは可能なのですが、この作業は面倒で、後で自動的にプロファイルを切り替える「ダイナミック・モード」へ戻すことも必要になります。

1.3. cpufreqd-icon

cpufreqd-iconはシステムトレイに常駐して、メニューからcpufreqdのプロファイルの手動変更を簡単に行えるようにしたツールです。ダイナミック・モードへの変更も同様に簡単にできます。

1.4. システム要件

動作に必要なソフトウェア/バージョン1.9.91-

  • Linux 2.6以上

  • cpufreqd 2.2.0以上

  • GLib 2.32以上

  • GTK+ 3.10以上

  • libnotify 0.7.6以上

  • gksu (デーモン制御とテストツール使用時のみ)

  • システムトレイをサポートしたパネルなど

動作に必要なソフトウェア/バージョン1.9.0-1.9.2

  • Linux 2.6以上

  • cpufreqd 2.2.0以上

  • GLib 2.22以上

  • GTK+ 2.16以上

  • libnotify 0.4.1以上

  • GtkSourceView 2.4以上 (テストツールでのみ使用)

  • gksu (デーモン制御とテストツール使用時のみ)

  • システムトレイをサポートしたパネルなど

ビルドに必要なソフトウェア/バージョン1.9.90-(開発パッケージ)

  • GLib 2.22以上[lib(64)glib2.0-devel,libglib2.0-devなどのパッケージ名]

  • GTK+ 3.0以上[gtk3-devel,libgtk-3-devなどのパッケージ名]

  • libnotify 0.4.1以上[lib(64)notify1-devel,libnotify-devなどのパッケージ名]

  • GtkSourceView 3.2以上(テストツールでのみ使用)[gtksourceview3-devel,libgtksourceview-3.0-devなどのパッケージ名]

ビルドに必要なソフトウェア/バージョン1.9.0-1.9.2(開発パッケージ)

  • GLib 2.22以上[lib(64)glib2.0-devel,libglib2.0-devなどのパッケージ名]

  • GTK+ 2.16以上[lib(64)gtk2.0_0-devel,libgtk2.0-devなどのパッケージ名]

  • libnotify 0.4.1以上[lib(64)notify1-devel,libnotify-devなどのパッケージ名]

  • GtkSourceView 2.4以上(テストツールでのみ使用)[gtksourceview-devel,libgtksourceview2.0-devなどのパッケージ名]

[注意]注意

GtkSourceViewライブラリはconfigureスクリプトに--disable-cpufreqd-test-gtkオプションを付けてテストツールをビルドしない設定にした場合は不要です。

動作に必要なソフトウェア/バージョン1(0.9)系

  • Linux 2.6以上

  • cpufreqd 2.2.0以上

  • GLib 2.14以上

  • GTK+ 2.10以上

  • libnotify 0.4.1以上

  • システムトレイをサポートしたパネルなど

ビルドに必要なソフトウェア/バージョン1(0.9)系(開発パッケージ)

  • GLib 2.14以上[lib(64)glib2.0-devel,libglib2.0-devなどのパッケージ名]

  • GTK+ 2.10以上[lib(64)gtk2.0_0-devel,libgtk2.0-devなどのパッケージ名]

  • libnotify 0.4.1以上[lib(64)notify1-devel,libnotify-devなどのパッケージ名]

また、カーネルのcpufreq[2]の動作要件として

  • クロック周波数の動的な変更を行う省電力機能に対応していて、BIOS上でも有効になっている

  • CPUに対応したデバイスドライバがLinux(カーネル)に存在し、モジュールの場合は読み込まれている

という条件を満たしていることが必要となります。

cpufreqdに関しては、設定ファイル/etc/cpufreqd.confにおいて

  • 許可したグループのメンバがプロファイルを変更できるようにするための「enable_remote=1」指定が記述されている

  • 使用しているユーザアカウントが属するグループ名がremote_groupの値に記述されている

の条件を満たしている必要があります。



[1] 後ろの数字は出力の詳細度で、5から7あたりの範囲で試すのが良さそう

[2] CPUが持っている動的なクロック周波数や電圧(対応している場合)の変更機能を利用するための仕組み