はとのーと

エジソンノート(アイデア、思い付き、メモ)として使っています。誰かの役に立つかもしれないので公開しています。

ThinkPad X220のCPU周波数と温度についてのメモ

ThinkPad X220はすぐに熱くなってしまうため、できるだけCPU周波数を下げて温度が下がるようにしたい。 そのための調査メモ。

関連ページ: 自宅のX220についてのメモ - はとのーと

参考資料

CPU周波数ドライバーを調べる

cpupower frequency-infoコマンドで調べる。

$ cpupower frequency-info
analyzing CPU 0:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency:  Cannot determine or is not supported.
  hardware limits: 800 MHz - 3.40 GHz
  available cpufreq governors: performance powersave
  current policy: frequency should be within 800 MHz and 2.70 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency: Unable to call hardware
  current CPU frequency: 1.60 GHz (asserted by call to kernel)
  boost state support:
    Supported: yes
    Active: yes
    25500 MHz max turbo 4 active cores
    25500 MHz max turbo 3 active cores
    25500 MHz max turbo 2 active cores
    25500 MHz max turbo 1 active cores

ドライバはintel_pstate、ガバナーはpowersaveを使っている。

intel_pstateは以下によって設定できる。

  1. cpupowerコマンド
  2. /sys/devices/system/cpu/intel_pstateのファイル

intel_pstateを設定する

1. cpupowerコマンド

cpupower frequency-set コマンド 周波数で周波数を指定する。

コマンド: * -u - 最大周波数を指定する * -d - 最小周波数を指定する * -f - 固定周波数を指定する

周波数は 2400MHz4GHz のように単位を付けて指定する。

$ sudo cpupower frequency-set -u 3200MHz
Setting cpu: 0
Setting cpu: 1
Setting cpu: 2
Setting cpu: 3
2. /sys/devices/system/cpu/intel_pstateのファイル

/sys/devices/system/cpu/intel_pstateにあるファイルを読み込むことで設定値が表示でき、書き込むことで動作を指定することができる。

ファイル:

  • 書き込めるもの
    • max_perf_pct - ドライバから要求される最大のP状態を制限する。パーセンテージ表示
    • min_perf_pct - ドライバから要求される最小のP状態を制限する。パーセンテージ表示
    • no_turbo - ターボブースト周波数範囲以下でP状態を選択するようにドライバを制限する
  • 書き込めないもの
    • turbo_pct - ターボブースト範囲にあるハードウェアがサポートするトータルパフォーマンスのパーセンテージ。no_turboの値の影響を受けない
    • num_pstates - ハードウェアがサポートするP状態の数を表示する。no_turboの値の影響を受けない
    • status - ドライバが使われているかを表示する。offまたはactive

内容を一括表示するにはカレントディレクトリを/sys/devices/system/cpu/intel_pstateに変更したあとに次のように入力する。

$ for f in *; do echo $f "->" `cat $f`; done
max_perf_pct -> 50
min_perf_pct -> 23
no_turbo -> 0
num_pstates -> 27
status -> active
turbo_pct -> 27