アフィリエイト・アドセンス広告を利用しています。詳細は こちら

PC ゲームで OS 巻き込んでフリーズしたり、ディスプレイドライバーの応答停止と回復でゲームがクラッシュしてまともにゲームできない場合の対処方法

最近 PC ゲームをプレイしている最中に OS ごと巻き込んで完全にフリーズしたり、ゲームがクラッシュして 「ディスプレイドライバの応答停止と回復」 が表示されたりと、一度だけでなく何度も同じことが繰り返されて、まともにゲームがプレイできない状態が続いておりました。

いろいろ調べて試行錯誤してみた結果、原因とその対処方法がわかりましたので、その内容をまとめてみました。

PC ゲームで OS 巻き込んでフリーズしたり、ディスプレイドライバーの応答停止と回復でゲームがクラッシュしてまともにゲームできない場合の対処方法



PC ゲーム中にクラッシュ・フリーズする、DirectX に回復不能なエラー DXGI_ERROR_DEVICE_HUNG メッセージが表示される、ディスプレイドライバー nvlddmkm が応答停止になる原因

Call of Duty : WWII オープンベータプレイ時にゲームがクラッシュ、DirectX に回復不能なエラーが発生しました IDXGISwapChain::Present failed: (error 0x887a0005) GetDeviceRemovedReason returned DXGI_ERROR_DEVICE_HUNG エラーメッセージ
イベントビューア ディスプレイドライバー nvlddmkm が応答を停止しましたが、正常に回復しました。 エラーログ

画像は Call of Duty : WWII オープンベータプレイ時にゲームがクラッシュして表示された、「DirectX に回復不能なエラーが発生しました DXGI_ERROR_DEVICE_HUNG」 エラーメッセージです。

イベントビューアには 「ディスプレイドライバー nvlddmkm が応答を停止しましたが、正常に回復しました。」 というエラーログも残っていました。

ゲームがクラッシュしてエラー落ちするのはまだ運がいいほうで、ゲームによってはそのまま画面が固まりキーボード操作も受け付けなくなって、リセットボタンで強制的にPC を再起動するしかないといった状況になることが何度もありました。

GPU-Z NVIDIA GeForce GTX970 の Boost Clock は 1329MHz
NVIDIA Inspector GTX970 の P-State が P0 (フルロード) の状態で、Current Clock と Est_Max が 1455MHz、Boost Clock 1329MHz を大きく上回る状態
NVIDIA GeForce GTX970 フルロード時 GPU-Z の Sensors のモニタリングにて、GPU Core Clock が 1455MHz で稼働しているのが確認できる

このエラー内容からネット上にある対処方法を調べてみると、グラボの 自動オーバークロック機能(GPU Boost)が原因 である可能性が高いことがわかってきました。

GPU-Z で私が使っている NVIDIA GeForce GTX970 GV-N970G1 GAMING-4GD の Boost Clock をチェックしてみると、メーカーの仕様通り 1329MHz が設定されています。

GeForce GTX 970 の GPU Boost のリファレンス仕様は 1178MHz となっているので、大きくオーバークロックが設定されているのがわかります。

ところが、ゲームやベンチマークなどビデオカードの負荷の高い処理を走らせてみると、NVIDIA Inspector の P-State が P0 (フルロード) の状態では、Current Clock と Est_Max が 1455MHz で Boost Clock 1329MHz 設定を大きく上回っています。GPU-Z の GPU Core Clock も 1455MHz になっていることも確認できました。

この Boost Clock (GPU Boost) の仕様については 4Gamer.net の記事 に詳しく解説されています。

どうやら、GPU Boost は上限値ではなく平均的に到達するクロックで、環境次第でさらに オーバークロック GPU コアクロックと GPU コア電圧が上がる可能性がある うえに GPU Boost をユーザー側で無効化できない ようです。

この機能が原因でゲームプレイに支障が発生してしまう問題については、次に紹介する ツールで Power Target (Power Limit) を下げるツールでグラボのクロックを下げる のいずれかの方法でユーザーが手動で制御することで解決できる可能性があります。

対策方法 1 : ツールでグラボの Power Target (Power Limit) を下げる

最初に紹介するのは、NVIDIA InspectorPower Target (MSI Afterburner なら Power Limit) を適切に調節することで、Base クロックを手動で下げることなくクラッシュやフリーズを回避する方法です。

NVIDIA Inspector で GTX970 フルロード(P0)時の設定を、Base Clock Offset 0 Mhz、Power and Temperature Target (Power Target、Power Limit) 100%にした場合、フルロードさせると Power が 180W 前後になり Temperature が 70度近く上昇する
NVIDIA Inspector で GTX970 フルロード (P0) 時の設定を、Base Clock Offset 0 Mhz、Power and Temperature Target (Power Target、Power Limit) 100%にした場合、GPU-Z NVIDIA GeForce GTX970 の GPU Core Clock (Boost Clock) は 1455MHz、Power Consumption は 70% TDP 以上になる

NVIDIA Inspector で Show Overclocking ボタン(クリック後は Hide Overclocking に変わる)からオーバークロック設定を開き、Performance Level [3] - ( P0 ) を開きます。

Base Clock Offset は 0 Mhz(デフォルト設定) のままで、Power and Temperature Target (Power Target、Power Limit) 100% の状態でフルロードさせると、Power が 180W 前後になり Temperature が 70度近くまで上昇 します。私が使っている GIGABYTE GV-N970G1 GAMING-4GD ではデフォルト設定でこのように動作していることになります。

GPU-Z の Sensors モニタリング画面を見ると GPU Core Clock (Boost Clock) は 1455MHzPower Consumption70% TDP 以上になっているのがわかります。

この Power Consumption の数値を NVIDIA InspectorPower and Temperature Target (Power Target、Power Limit) で制御することで、Base Clock Offset (MHz) をいじることなくオーバークロックを抑えながら、かんたんにグラボの消費電力が下げられるうえに、ワットパフォーマンスを改善することができます。

NVIDIA Inspector で GTX970 フルロード(P0)時の設定を、Base Clock Offset 0 Mhz、Power and Temperature Target (Power Target、Power Limit) 60%にした場合、フルロードさせると Power が 150W 前後になり Temperature が 65度前後まで下がる
NVIDIA Inspector で GTX970 フルロード(P0)時の設定を、Base Clock Offset 0 Mhz、Power and Temperature Target (Power Target、Power Limit) 60%にした場合、GPU-Z NVIDIA GeForce GTX970 の GPU Core Clock (Boost Clock) は 1400MHz 以下、Power Consumption は 60% TDP までとなる

NVIDIA Inspector で Power and Temperature Target (Power Target、Power Limit) 60% に設定を変更して Apply Clocks & Voltage ボタンをクリックします。

グラボをフルロードさせると Power が 150W 前後になり、Temperature が 65度前後まで下がっている ことが確認できました。

GPU-Z の Sensors モニタリング画面を見ると GPU Core Clock (Boost Clock) は 1400MHz 以下Power ConsumptionNVIDIA InspectorPower and Temperature Target で設定した 60% TDP までで、それ以上上がりませんでした。

NVIDIA Inspector で GTX970 フルロード(P0)時の設定を、Base Clock Offset 0 Mhz、Power and Temperature Target (Power Target、Power Limit) 50%にした場合、フルロードさせると Power が 120W 前後になり Temperature が 60度前後まで下がる
NVIDIA Inspector で GTX970 フルロード(P0)時の設定を、Base Clock Offset 0 Mhz、Power and Temperature Target (Power Target、Power Limit) 50%にした場合、GPU-Z NVIDIA GeForce GTX970 の GPU Core Clock (Boost Clock) は 1300MHz 以下、Power Consumption は 50% TDP までとなる

NVIDIA Inspector でさらに Power and Temperature Target (Power Target、Power Limit) を 50% まで下げてみます。

グラボをフルロードさせると Power が 120W 前後になり、Temperature が 60度前後まで下がっている ことが確認できました。

GPU-Z の Sensors モニタリング画面を見ると GPU Core Clock (Boost Clock) は 1300MHz 以下Power ConsumptionNVIDIA InspectorPower and Temperature Target で設定した 50% TDP までで、それ以上は上がりません。

以上、ツールで Power Target (Power Limit) の設定を下げることで、グラボ高負荷時のクラッシュ・フリーズ問題を回避する方法の紹介でした。

グラボ本来の性能を落とすことになりますが、引き換えに高負荷時の安定性を得るとともに、消費電力と温度を下げることができますので、PC ゲームが頻繁にクラッシュ・フリーズするようであれば、ぜひこの設定をやってみてください。

対策方法 2 : ツールでグラボのクロックを下げる

こちらはツールでグラボのクロックを下げてゲームのクラッシュ・フリーズを回避する方法です。

ツールでグラボの Power Target (Power Limit) を下げた方が消費電力と温度を下げながらも性能は維持しつつ、高負荷時に PC がクラッシュするようなことはなくなったので、現在はそちらの方法をメインで使用しています。

NVIDIA Inspector NVIDIA GeForce GTX970 でオーバークロック設定を開き(Show Overclocking ボタン)、Performance Level [3] - ( P0 ) を選んで Base Clock Offset 変更(ここでは -100MHz)、Apply Clocks & Voltage ボタンで設定を反映、Create Clocks Shortcut ボタンでデスクトップにショートカットが作成される

ビデオカードに設定されている Boost Clock からさらにオーバークロックされた状態で動作することで、フリーズやクラッシュ、ディスプレイドライバーの応答停止と回復を起こしていた可能性が高いことがわかりました。

以前はそのようなトラブルはなく、前からこの設定のままで動作していたと思いますが、HDD やら拡張カードを増設 したことでシステムの消費電力が増えたことと、購入した電源ユニット (SilverStone STRIDER Gold Evolution SST-ST75F-G-E) が 24時間稼働で 4年以上経過 し続けたことによる老朽化もあわさってか、グラボの負荷に耐えられなくなってきた可能性がでてきました。

もしくは、リファレンスクロック(1178MHz)から 277MHz も自動オーバークロック(1455MHz)させていたので、そもそもグラボ自体が過剰なオーバークロック設定で常用できるようなものではなかったのかもしれません。

最初は古くなった電源ユニットの交換を考えましたが、今回はビデオカードの Boost Clock 設定を引き下げて固定することで対処できることがわかりましたので、NVIDIA Inspector を使って Boost Clock の設定を変更してみます。

NVIDIA Inspector で Show Overclocking ボタン(クリック後は Hide Overclocking に変わる)からオーバークロック設定を開き、Performance Level [3] - ( P0 ) を選んで Base Clock Offset を変更します。画像では試しに -100MHz に変更しています。

Apply Clocks & Voltage ボタンで設定が反映されますが、PC を再起動すると元のクロック数に戻ってしまいます。そこで、Create Clocks Shortcut ボタンでデスクトップにショートカットを作成して Windows のスタートアップに入れることで、Windows 起動時に設定したクロック数に固定することができます。

NVIDIA Inspector で Base Clock Offset 変更後の NVIDIA GeForce GTX970 フルロード時 GPU-Z Sensors のモニタリング画面、NVIDIA Inspector GTX970 の P-State が P0 (フルロード) の状態で GPU Core Clock が 1355MHz(1455MHz - 100MHz) で稼働しているのを確認

NVIDIA Inspector で Base Clock Offset 変更後の、GeForce GTX970 フルロード時の GPU-Z Sensors モニタリング画面です。

GeForce GTX970 の P-State が P0 (フルロード時) の状態で、GPU Core Clock が 1355MHz(1455MHz - 100MHz) で稼働しているのを確認できました。

あとは NVIDIA Inspector で落としどころを決めて、ゲームやベンチマークなどの高負荷時にフリーズやクラッシュしなくなれば設定完了です。

NVIDIA Inspector で Base Clock Offset 変更後、MSI Afterburner でも Core Clock (MHz) 項目が反映されているのが確認できる。GeForce シリーズなら 600番台以降 で GPU Boost 機能があれば、おそらくどのオーバークロックツールでも設定変更が可能と思われる

こちらは MSI Afterburner の画面です。

NVIDIA Inspector で試しに変更した Base Clock Offset -155MHz が MSI Afterburner でも Core Clock (MHz) 項目に反映されているのが確認できます。

NVIDIA Inspector 以外のオーバークロックツールでもクロック数の設定が変更できるかと思いますので、PC ゲームなどで高負荷時にフリーズやクラッシュするような状態が続くようであれば、グラボのクロック数を下げてみることで解決できるかもしれません。

関連記事