はじめに
Surface Go 3を知人からもらいタブレットPCに感動したのでヤフオクでSurface Pro 6とSurface Pro 7+をジャンクで購入。7+は不動で6は動作したので早速使おうと思ったらめちゃくちゃ重い。何をするにも重い。どういうことなのか調べてみたら後述する原因が見つかった。
原因
どうやらはるか昔のMicrosoftのファームウェアのバグだった・・・らしい。(引用元:https://www.nichepcgamer.com/archives/1075513592.html)
しかし、自分の環境はすでに最新バージョンが入っており解決されているはずに見えたが、調べた感じIntelの省電力管理ではよくある話らしい。
watch grep "MHz" /proc/cpuinfoで確認したところ、ずっと400.0000で張り付いていた。
原理としてはCPUが既定値以上の高温担った場合クロックを下げてサーマルスロットリングをすることで温度を下げるが、既定値以下であっても高温であると誤認して常時サーマルスロットリングを実行。その結果、0.4Ghzで動き続けるというものだった。
そもそもWindows 11が入っていたときから動作が妙に重かったり、そのせいかディスクアクセスまでめちゃくちゃ遅かったりと予兆は合ったものの、Go 3を使ってたせいもあって割と普通なもんだと思ってた。よくよく考えてみれば8世代のi5がPentiumに負けるはずはない。
解決法を探してたところ、BD_PROCHOTというものがスロットリングを管理しているのでそれを無効化。その後、電源管理ができるtlpを入れて最大値を制限するということに落ち着いた。
※BD_PROCHOTは温度管理機能を無効化するに等しいらしく、真に高温でクロックを下げないといけない場面になると基盤を痛める原因になる場合があるそう。その対策として当方はバッテリー駆動時は1/3のクロックで動くように設定することで対策した。正しいのかは知らない。
環境
- OS: Fedora 43 (GNOME)
linux-surfaceカーネルを導入済み。
Secure BootはOFFにしてある。ONにしてもこれが動作するのかは未検証。
1. throttledを入れる
throttledというSurfaceやThinkPad関係で同じような原因でクロックが下がっている端末に対して変更を加えるソフトを導入。
当環境はFedoraなのでREADME.mdに従ってFedora用をインストール。
# abn/throttledリポジトリを有効化
sudo dnf copr enable abn/throttled
# throtteldをインストール
sudo dnf install -y throttled
# システム起動時に実行&即時起動を有効化
sudo systemctl enable --now throttled
2. /etc/throttled.confをいじる
vimでもnanoでもなんでもいいのでroot権限でDISABLED_BDPROCHOTの値をTrueにする
当方はvimなのでsudo vim /etc/trottled.confで操作した。
※[BATTERY]と[AC]の2つの項目があるので両方変更する。
3. systemctlでサービスを再起動
sudo systemctl restart throttled
上記のコマンドを実行するとうまく行けばクロック制限が解除される。ただし、負荷が大きいと上限までクロックを上げ始めるのでtlpを入れる。
4. tlpの導入
普通に入れる。
sudo dnf install tlp
5. /etc/tlp.confを触る
sudo vim /etc/tlp.conf
自分はバッテリー駆動の際は最大クロックの1/3に設定し、ACを繋いだ際にはフル稼働するようにした。
6. tlpの再起動
sudo systemctl restart tlp
その後、バッテリー駆動にしたり電源を繋いだりして正しくクロックが制限されているか確認する。
さいごに
i5-8350Uで1/3でもこの記事書くくらいには余裕で動く。そんな重い作業しないし、tlpがなんなのか10年越しくらいに理解したのでいい勉強になった。クロック制限をきつくすればそれなりにバッテリーも節約されそう?

