CPU温度を取得する

フリーの温度取得ソフトがCPU温度を取得している仕組みが気になって調べてみると、最近のCoreアーキテクチャのCPUにはDigital Thermal Sensor (DTS)というCPU温度を取得するためのCPU機能が搭載されているそうで、そいつを使っているらしいということがわかった。


プログラム的にはどうやってアクセスするのかいねと探して回ってみると、IntelのCPUマニュアル(参照)に記載されているIA32_THERM_STATUSというMSR値を読めば良いらしいという事まではわかったのだけど、残念ながらMSRの読み出し(RDMSR)はRing 0の特権命令で、OS上から普通のアプリでは実行することが出来ない。


じゃあどうしようかとさらに探してみると、OlsMsrEditor/WinRing0(参照)というOS上で直接MSR読み書きが可能な素敵フリーソフトがあることがわかり、試してみると確かにそれらしい値を取り出すことが出来る。


IA32_THERM_STATUSのMSR indexは19CH(上記Intelのマニュアルに記載)、例えばCPU 3に対して読み取った結果の画面が以下。


取得した値の3F(10進で63)の部分が温度値で、読み方がややこしいのだけど、この値はCPU毎の定数として設定されるTCC activation temperatureとの差。Q9450では105℃の設定だそうなので(参考)、実際のCPU温度は105-63で42℃。