Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@strv

Linuxでコア電圧を読む

タイトルの通りのことをするのに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ではそれっぽい値が読めてる。

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

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What is going on with this article?