« 3.1にしてみた | トップページ | Vistaにしたいけど »

2007年4月 5日 (木)

クールで静かにアスロンを動かすのだ

 先日故あって実験君な扱いであまり日の目を見ていなかった自作3号を,本格的なホームサーバ化するべく,余っていたAthlon 64 3500+で動かすことにした。

 Athlon 64にはCool'n 'Quietと呼ばれる省電力機構があるんだけど,ホームサーバたるもの常にフルスロットルで動かれても困る(電気代も気になるよね)ので,FreeBSDでも使えないかな? なんて思っていた。

 ということで、man -k cpuでmanpagesを検索してみると,cpufreq(4)なんていうものがあるのがわかった。カーネルモジュール化されているので、単にrootでkldload cpufreqでcpufreqモジュールをロードするとpowernow0というデバイスが認識された。起動時にこいつが毎回ロードされるよう、/boot/loader.confにcpufreq_load="YES"の一文を加えておく。

 お次はこれをどう使うかなんだけど、cpufreqのmanpagesをよく読むと「sysctl(8)で直接つつくか,/etc/rc.d/power_profile経由でパラメータを設定できる」だの「タイムカウンターのソースをTSCから変更しないと使えない」だの書いてある。

 ということなので、まずはCool'n'Quietが動く下地作りをする。まず、sysctl kern.timecounter.hardwareを実行して、実際にどれを使っているかを確認する。やっぱりTSC。一応dev.cpu.0.freqのsysctl MIBを確認してみると、2200が返ってきた。2200MHz動作ということは,やっぱりフルスロットルで動いていたらしい。

 次に何が使えるかを見るんだけど、これはkern.timecounter.choiceのsysctl MIBで確認できる。どうやらTSCの他にはi8254というものが使えるらしい。sysctl kern.timecounter.hardware=i8254を実行してタイムカウンターの参照元を変えてみた。dev.cpu.0.freqを確認してみると、今度は1000を返している。ちなみにCPUがどれだけ電気を食ってるかは、dev.cpu.0.freq_levelsも参照すれば一応目安になるようだ。1000MHz動作時は22ワットですか、ほほぅ。2200MHz時は89ワットなので、4分の一になってる計算だ。

 いま設定したパラメータを起動時に毎回セットされるよう、/etc/sysctl.confにsysctl kern.timecounter.hardware=i8254を追加する。

 で、それはさておき、今度は実際にコントロールするプログラムが必要なんだけど、これにはpowerd(8)を使うそうな。powerdをデフォルトパラメーターで動かしてもいいんだけど、/etc/rc.confにpowerd_enable="YES"を追加した後、powerd_flags="-n adaptive -i 95 -r 75"を追加して/etc/rc.d/powerd startでpowerdを起動。

 という手順を経て、ようやくCool'n'Quietが有効になったんだけど、別に取り立てて変わったようなところは見当たらないところがミソ...なのか?

 ちなみに、http://nhh.mo-blog.jp/ttt/2006/06/freebsd_cpu_9abd.htmlで、詳しく解説してくれている方がいらっしゃるので、そちらも読んでみるといいかもしれない。

|

« 3.1にしてみた | トップページ | Vistaにしたいけど »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/164672/14569701

この記事へのトラックバック一覧です: クールで静かにアスロンを動かすのだ:

« 3.1にしてみた | トップページ | Vistaにしたいけど »