擬似CnQ Softwareを作ろうと思った

背景

AthlonX2 7750BEを買ったみたものの、以前の65W AthlonX2に比べ発熱し、定格動作*1では今使ってるCPUファンは回りっぱなしになっちゃって、うるさいのでどうにかしたいなぁと。
K10のCnQ絡みのソフトウェアとしては、現状K10statのみ。k10statは、あくまで各P-Stateの変更用ってスタンスをとってるっぽいので、CnQを有効に出来ない環境(Win2000)では、必要に応じて手動でP-Stateを切り替える必要があり結構手間。スタンバイからの復帰後、変更が無効になってしまってる(再度設定が必要)というのもう〜ん、という感じ*2
近い将来、CrystalCPUIDとのMultiple Managerが対応する予定みたいだけれど、blog・BBSを見た感じではしばらくかかりそう。
ってことで、擬似CnQソフトウェアを試しに作ってみようと思った。

現状

BKDG片手に、k10statの挙動やCrystalCPUIDのソースを参考にして仮組み。AthlonX2 7750BEでは、ハードウェアではP-Stateを2つしか持ってないのが不満だったので、ソフト内部で擬似的にP-Stateを4つ持たせてみた。とりあえず負荷に応じて動的に周波数を変更出来る用に。あとは電圧の変更実装して一応完成、、、予定。

Flash再生させると片側のコアにだけやたら負荷がかかるんだけど、何かまずいんだろうか…。まぁいいや。

参考にしたページとか

Crystal Dew R&D Labs - 【草稿】 .NET で始める Ring0 プログラミング(仮)
http://crystaldew.info/2007/09/20/%e3%80%90%e8%8d%89%e7%a8%bf%e3%80%91-net-%e3%81%a7%e5%a7%8b%e3%82%81%e3%82%8b-ring0-%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%ef%bc%88%e4%bb%ae%ef%bc%89/
C#でWinRing0を使う取っ掛かりに。
CrystalMark会議室 - SetThreadAffinityMask() の実装について
http://crystalmark.info/bbs/c-board.cgi?cmd=ntr;tree=1784
AffinityMaskのかけ方が分からなかったので。下位bitから順にCPU0,1,2…のフラグってだけのようで、分かったら単純な話なんだなぁと。あとシフト演算の使いどころを、ココで見て初めて理解。
@IT .NET Tips - 2進数文字列と16進数文字列を相互に変換するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/057convhex/convhex.html
2進数文字列⇔数値を変換するスマートな方法ないかなぁと思って探した中で、一番ヨサゲな方法だったので。Convertクラスの型変換メソッド使用時に2つめの引数で、基数を指定できたようで…、しらなんだorz

*1:Win2000を使っているのでCnQを有効に出来ない…orz

*2:とはいえ、他に何もない現状では、k10statは大変便利です。はい。