LoginSignup
2
1

More than 3 years have passed since last update.

Linuxでコア電圧を読む

Last updated at Posted at 2020-07-27

タイトルの通りのことをするのにCLI環境で楽に実行できる方法を調べたのでメモ

必要

  • intel CPU Sandy Bridge 以降
    • intel以外のことは調べてないので不明
  • msr-tools
    • apt-get とかでインストールできる
  • msrドライバ
    • /dev/cpu/*/msr が存在しない場合は modprobe msr でロードする

読む

生値

sudo rdmsr 0x198 -u --bitfield 47:32

電圧[V]に変換

awk "BEGIN { print $(sudo rdmsr 0x198 -u --bitfield 47:32)/8192 }"

bc でもいいけど、awk のほうが確実にインストールされている気がする。

繰り返し読む

watch -n 1 'awk "BEGIN { print $(sudo rdmsr 0x198 -u --bitfield 47:32)/8192 }"'

やってること

CPUのMSR (Model Specific Register) レジスタのアドレス0x198は MSR_PERF_STATUS という名前で、コア電圧がビット[47:32]に格納されている。これをrdmsrコマンドで読み出し、読み出しやすいように変換する。

取説によると、

P-state core voltage can be computed by MSR_PERF_STATUS[37:32] * (float) 1/(2^13).

とのことなので、読みだした値を8192で割ってる。(↑[37:32]になってるけど多分誤植)

ただし、このレジスタの[47:32]ビットの定義があるのはSandy Bridgeのテーブル2-20だけで、他の世代については記載がない。取説によるとMSR_hogeは世代ごとに定義されるものなので、上書きされる可能性はある。現に、Core世代(core2duoとかの)では、ビット[46,44:40]はそれぞれ別の定義が存在する。

これについてSandy Bridge以降の世代のCPUで読んだ場合に値が保証されるのか調べたものの、解釈が割れておりよくわからなかった。ただし、上書き定義も無い。手持ちのKaby Lakeではそれっぽい値が読めてる。

もっと確実な方法があったら教えて下さい。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1