PV: 回 / All:

【ガチ備忘録】ノパソのNVMe SSDの発熱を抑えるための電源設定

注意

このページのコンテンツは初心者お断りです。
環境差が非常に大きいため試さないでください。

Primary NVMe Idle Timeout、Primary NVMe Power State Transition Latency Toleranceの値を「パソコンの動作に支障のない範囲で調整して極限までPS1やPS2に降格させる」手法です。

SSDのプチフリを改善させる方法は他ブログに存在しますが、
このページはその逆を突き詰めます。

プチフリを許容し、代わりに消費電力と発熱を減らします。(狂気)

Primary / Secondary NVMe Idle Timeoutについて

ここで指定された時間が経過後、NVMe SSDに対して後述する、対応するNVMe Power State Transition Latency Toleranceで設定されたENLAT+EXLAT許容値の値を下回るPower Stateへ降格させます。

が、しかしこのテーブルに落としたいPS1やPS2の情報はありません。
なので、手探りで突き詰める必要があります。

デフォルト値 (Barance)

Primary Timeout
Bat: 100ms
AC: 200ms

Primary Latency Tolerance
Bat: 50ms
AC: 15ms

Secondary Timeout
Bat: 1000ms
AC: 2000ms

Secondary Latency Tolerance
Bat/AC: 100ms

NVMe | Microsoft Learn (https://learn.microsoft.com/ja-jp/windows-hardware/design/component-guidelines/power-management-for-storage-hardware-devices-nvme)

現状設定 (既に値を変更済み)

Primary Timeout
Bat: 50ms
AC: 90ms

Primary Latency Tolerance
Bat: 75ms
AC: 50ms

Secondary Timeout
Bat/AC: 0ms

Secondary Latency Tolerance
Bat/AC: 0ms

設定見直し

見直しは以下の方針にのっとって行います。

早くPower Stateを落とす
復帰は早くする

とすると、Primary Timeout 50msが長すぎるのでもう少し下げる。
また、Primary Latency Toleranceが75msも同様に許容しすぎなので許容値を下げる。

Primary Timeout
Bat: 15ms
AC: 90ms (変更なし

Primary Latency Tolerance
Bat: 20ms
AC: 50ms (変更なし

この結果、レイテンシはさほど変わらなかったものの、
体感の応答速度が大きく低下。タスク完了までのI/O待ち時間が増加したとみられる?
ファイルエクスプローラーのディスク一覧列挙処理では、750ms~1200msの時間を要した。

スケジューリングが、Eコアのみになっているのも影響してるのかもしれないので、
異種スレッドスケジュールポリシーを自動に変更

変更後、ファイルエクスプローラーのディスク一覧列挙に500ms程度を要した。
改善はしたが、流石に許容できないぐらい重いので設定は緩和する。
Primary変更前はせいぜい150ms~250msぐらいだったので悪化。

というわけで、次は最大電力を変更。
最大電力を変更すると、PS0に上がれなくなるので(PS0=100%だから)NVMeの省電力化に寄与する。

手始めに最大電力1%に設定した。
1%に設定したところでPS2の必要電力は供給されるので心配は不要。

変更したところ、平均レイテンシは変わらないが、
エクスプローラーのウインドウ自体の表示に時間がかかるようになった。

Primary Timeoutを既に許容限界まで突き詰めている影響かもしれないので、デフォルト設定に戻す。

このPCのデフォルトは、

Primary Timeout
Bat: 100ms
AC: 20ms

Primary Latency Tolerance
Bat: 50ms
AC: 15ms

となっているので、その数値に戻したうえで、最大電力1% (PS2強制) へと設定した。

体感はPrimary Timeoutを戻す前と全く変わらなかった。
PS2は思ったより下がりすぎているのかもしれない、ということで最大電力90% (PS1?)へと設定する。

気持ち早くなったが、体感はPS2と変わらず非常にもっさりしている。
やはりPower Stateを落とした状態で使うのは難しいのかもしれない。

そもそも、現状でも通常設定だと53℃まで上がるところを42℃で抑えて使えていることを考えると、
これ以上突き詰めるのは難しいのかもしれない。
そもそも、室温が25℃~27℃ぐらいの環境で使っているのにNVMe SSDの温度が42℃(室温+15℃ちょっと)であることを考えると、あまりにも既にしてあるチューニングが完成されすぎている…。触るところがない。

がしかし多分これをもう一度弄るとなった時に得た知見を忘れるのでここへ書き記しておく。
※このページが公開されてる理由は、自分がこれをスマホとかで見たいときがありそうだから。

P/Eコアの制御と省電力モード

このNVMe設定は基本的にEコアのみで動作する前提で動かしているため、Pコアがスケジューリングされると応答性がだいぶ改善する。

また、省電力モードはコアのクロック上昇を妨げるため、NVMeの応答とタイムアウトのタイミングがかみ合わなくなり、応答性が極度に悪化する可能性がある。

また、この設定はNVMeの発熱を抑えるためだけに行われており、プロセッサは基本的にAC電源接続時と同等のクロック上昇制御になるよう設定が変更されている。(完全には違うが)

そのため、プロセッサとNVMe省電力を両立させることができない。
処理がうまく噛み合わうよう、どちらかは常にアクティブな状態である必要がある。
そのため、Eコアを搭載しているこのパソコンではスケジューリングをEコア専用にした上で、省電力を優先しないよう閾値を変更している。

設定変更の目標が、プロセッサ速度の上昇、NVMeの省電力を目指している目的は、
プロセッサ冷却は「アクティブ冷却」であり、NVMe冷却が「パッシブ冷却」であるため。
また、電源に接続できない時間が比較的少ない環境にいるため、電源供給にさほどの問題がない。

省電力モードに入ると、プロセッサがパッシブ冷却を前提に動作する(ファン停止)ため、
システムの応答性が著しく悪くなる恐れがある。

あとがき

このページは備忘録なので書き方ぐっちゃぐちゃです。
もしこのページを参考にされていて、わかりにくいところがあればコメントを頂ければ修正加筆します。

なお、バックアップするのもリストアするのも、値を元に戻すのも壊れてからでは非常に面倒なため、変更するために必要なGUIDやレジストリキーは一切記載いたしません。ご了承ください。