02/27/2019, 6:20 PM GMT+9

メモリもCPU使用率も正常なのに、PCが異常に遅くなった問題を解決した

tl;dr

PC が急に遅くなったので原因を調べたところ、CPU 温度が異常に高かったためだと分かりました。CPU クーラーのネジが緩んでいたため、それを締め直したところ、CPU 温度は正常域に戻り、解決されました。

事象

ブラウジングやテキストファイルの編集など、あまり負荷のかからない作業で、遅延を感じました。音楽再生(動画ではない)でも、途切れたり音質の低下を感じました。

環境

OS: Windows

CPU: Intel Core i7-3770 (OC 無し)

RAM: 16GB

ストレージ: SSD

GPU: GTX 1060

CPU がやや古いですが、当時のハイエンドモデルであるため、日常用途では特に不満を感じませんでした。メモリも十分です。GPU に関しては、GPU 負荷のかからない作業でもストレスを感じるほど遅かったので、今回はあまり関係ないと思います。

調査

タスクマネージャーを見てみる

CPU 使用率は 10 %から 40 %を推移。メモリ使用は 10 GB 程度。I/O にも問題なし。

これだけの情報では、どこが原因なのか分からず困っていたのですが、ある重要な指標を見逃していることに気づきました。クロック周波数です。

タスクマネージャー上に表示される CPU クロック周波数。画像は正常時の状態を表している。

遅かったときの画像は撮っていなかったのですが、そのときはおよそ 1.5 GHz ほどで、ひどいときには 1 GHz を下回ることもありました。定格が 3.4 GHz なので、確かにこれでは普段と比べて著しく遅く感じたでしょう。とりあえず、直接的な原因は CPU クロック周波数の低下でしょう。しかし、なぜこのような現象が起こったのでしょうか。

なぜクロック周波数が低下したのか

CPU 温度が高すぎるためにクロック周波数が落ちているのではないか(仕組みは後述)と考え、調べてみることにしました。

Open Hardware Monitor による CPU 情報。CPU Core の温度が 100℃ を超える高温に達している。

SpeedFan による CPU 情報。Core 0 から Core 3 の温度が 100℃ を超えている一方、System や GPU など、ケース内の他の部分は正常であることが読み取れる。

読み通り、CPU 温度が異常に高くなっていることが分かりました。ちなみに、CPU クロック周波数が低下していることは、Open Hardware Monitor の画像から読み取れますね。

これで、CPU 温度が高いためにクロック周波数が落ちているために、PC の動作が遅くなっていることがわかりました。次なる疑問は、なぜ CPU 温度が上昇したのかです。

なぜ CPU 温度が上昇したのか

CPU クーラーのファンは正常に回転しているように見えました。リテール品でしたが、OC はしていないため、性能面では十分なはずです。そもそも、これまでは問題なく動いていたのです。ファンの回転数も、CPU クーラーからの情報を信じるのであれば、SpeedFan では 2036 RPM となっており、正常と言えるでしょう。

とりあえず、実際に中の様子を見てみようと思い、CPU クーラーを外そうとしたところ、グラグラしていました。CPU クーラーのネジが緩んでいたのです。これではファンが回っていても冷却が不十分になるはずです。

解決

CPU クーラーのネジを締め直し、再び起動したところ、正常に戻りました。ただ、依然として、少し温度が高いのは気になります。

Open Hardware Monitor による CPU 情報。Core 温度は 70℃台まで低下した。クロック周波数は 3.7 GHz まで上昇した。

高熱によってクロック数が落ちる仕組み

この仕組みは「thermal throttling」と呼ばれ、CPU が熱によって故障するのを防ぐために、CPU のクロック周波数を自動的に落とす機能です。

プロセッサーは、スロットリング自動シャットダウンという 2 つのモードの温度に対する保護機能があります。設定されているスロットル温度をコアが超えると、消費電力を制限して、その温度以下に戻します。スロットル温度は、プロセッサーと BIOS の設定によって異なります。サーマル・ソリューションのエラーや組み立ての失敗など、スロットリングを実行しても温度が低下しない状況では、CPU は恒久的な損傷を防ぐために自動的にシャットダウンします。

https://www.intel.co.jp/content/www/jp/ja/support/articles/000005597/processors.html (太字は筆者)

なお、このスロットル温度についてですが、

Tcase Max とは Tcase の測定最大温度です。Tcase と温度仕様は、インテルの Web サイトで確認することができます。
Tjunction Max とは、サーマル・スロットリング機能が有効になる前にコアが到達する最大温度のことです。

https://www.intel.co.jp/content/www/jp/ja/support/articles/000005597/processors.html (太字は筆者)

https://ark.intel.com/content/www/jp/ja/ark/products/65719/intel-core-i7-3770-processor-8m-cache-up-to-3-90-ghz.html によると、core i7 3770 の T_junction は 105 ℃ です。

すなわち、今回の場合は、CPU クーラーの取り付けが不適切であったためCPU のコア温度が上昇し、スロットル温度(105 ℃)に達したために、スロットリングが実行されてクロック周波数が低下した。しかし、冷却性能は大幅に低下していたとはいえ全く冷却できないわけではなかったので、スロットリング後に温度が 105 ℃ を超えて上昇することはなかった。よって、自動シャットダウンは発生しなかったということなのではないかと考えます。

CPU 使用率とは

このようにクロック数が意図的に落とされていたので、あらゆる処理に遅延が発生していました。通常、CPU が原因で重くなっているというと、CPU 使用率が 100 %に達しているイメージがありますが、今回のケースはそうではありませんでした。CPU 使用率は一体何を表しているのでしょうか。

CPU 使用率(CPU utilization)とは、CPU が使用されている時間の割合のようです。だとしたら、クロック数低下によって動作が遅くなるとき、CPU を使用する時間は長くなるので、CPU 使用率は上昇すると思うのですが、なぜでしょう…。もしかしたら、分子となる CPU 使用時間計算に CPU サイクルを利用している一方、分母となる総時間は CPU が定格で動いていることを前提にしているのかも?なんて思っています。

感想

一時は CPU クーラーを変えようかとか、グリスを塗り直そうかとか、挙句の果てには CPU を買い換えようかなどと考えていたので、原因が分かって良かったです。i7 3770 でいつまで戦えるか頑張ってみたいと思います。CPU を変えるとなると、M/B やメモリまで変えなければならないので、お金がかかりますからね。


Cosnomi
Cosnomi

コンピュータ(Web, 機械学習など)が好きな医学部生

Twitter / GitHub