2009年9月19日

Enhanced SpeedStep

使用しているPCはThinkPad X31で、CPUにはPentium-M(Baniasコア)が使われている。
このコアにはEnhanced Intel Speedstep Technologyが搭載されている。

このコアでは、動作周波数は600MHz〜1.7GHzが使用できるのだが、Xを起動すると1.7GHz固定になってしまう。処理自体はほとんど行わせていないにも係わらずファンが回り出したりするので、これを何とか設定できないものかな?と思い色々と試してみる。

まずはOSでどのように動作しているのかを確認。"sysctl -A"コマンドで関係しそうなものは以下。
  machdep.est.frequency.target = 1700
  machdep.est.frequency.current = 1700
  machdep.est.frequency.available = 1700 1400 1200 1000 800 600
availableは分かる。currentも"現在の周波数"ってことだろうけど、targetって何だろう?
カーネルのソースコード(sys/arch/x86/x86/est.c)をザッとながめたところ、targetで指定した周波数に設定されるように見える。(currentは参照するだけっぽい)

そこで、sysctlコマンドを使って周波数を変更できるか試してみた。
  $ sysctl -w machdep.est.frequency.target = 1000
  machdep.est.frequency.target: 1700 -> 1000
  $ sysctl machdep.est
  machdep.est.frequency.target = 1000
  machdep.est.frequency.current = 1000
  machdep.est.frequency.available = 1700 1400 1200 1000 800 600
設定できた模様。

過去にLinuxを使っていた時には、cpufreqd というデーモンプログラムで動作周波数を自動的に変更していたが、NetBSDでも同様なことをしてくれるプログラムは無いものだろうか?
と思って探してみたら、estd というプログラムがあった。今度試してみよう。

0 件のコメント: