Windows 11 でゲームがカクつく理由 (と本当の原因の見つけ方)
カクつきは低いフレーム レートではなく、遅れて届いた 1 つのフレームです。痕跡を残す原因、自分の原因がどれかを見分ける方法、それぞれへの対処を説明します。
カウンターは 160 を示しています。それでもゲームはがくっと止まります。ほんの一瞬映像が止まり、エイムが狙っていない場所に行き、その後はまた何事もなかったようになります。カウンターは一度も動いていません。それを上げるために何をしても役に立たないのはそのためです。
そのずれが、このページのテーマのすべてです。カクつきは低いフレーム レートではなく、遅れて届いた 1 つのフレームです。 フレーム カウンターは 1 秒間で平均するので、90 ms かかった 1 つのフレームは、隣にある 159 の短いフレームの中に消えてしまいます。感じたものを表す数値はフレーム タイムで、カクつきとは、前後のフレームよりずっと遅い 1 つのフレームです。
まず、正直な一文から。 下の 10 の原因のうち 2 つは、w0a の 1 つのチェック ボックスに対応します: 原因 8 のスケジューラーの値と、原因 9 のバックグラウンドのゲーム録画です。どちらのチェック ボックスも設定をあるべき値にするだけで、誰も調整していないマシンでは、1 つ目は変えるものを何も見つけません。感じているカクつきがそのどちらかだったかどうかは、変更前と変更後のキャプチャでしかわかりません。
まず、3 つの問題のどれなのかを見極める
同じ言葉で呼ばれますが、共通点はほぼありません。
- 引っかかり。 普段は問題なく、ときどき長い何かが起きます。それがこのページです。
- 普段からなめらかでない。 劇的なことは何もないのに、ゲームが一度もなめらかに感じられません。それはパーセンタイルの問題です: 平均 FPS は高いのに 1% Low が悪い。
- 低下。 フレーム レートが落ち、数秒から数分そのままになります。原因はまったく別です: ゲーム中の急な FPS 低下。
何かを変える前に記録を取る
推測こそが、これに何週間もかかる理由です。実際にプレイしているゲームの、実際にカクつく場所でのキャプチャは、「何が原因だろう」を「そのスパイクで何が起きたか」に変えます。そしてそれが、後のすべての変更を判断するための「変更前」になります。方法は ベンチマークの読み方 で扱っています。
原因を 1 つずつ
1. プロセッサのコアを占有するドライバー
ドライバーが割り込みや遅延プロシージャ呼び出しの中にいる間、そのコアは、どのスレッドの優先度よりも上で動きます: ドライバーが手放すまで、何も描画せず、入力も読みません。見落としやすいものです: どのフレーム タイムのグラフにも、どのタスク マネージャーにも表示されません。
見分け方: 測定します。レイテンシ テストの読み方 のカーネルの節は、コアを占有したすべてのドライバーを、占有時間の長い順に、ファイル名とともに一覧にします。約 1 ms を超えると、ドライバーは入力のレポートを押しのけています。4 ms 以上では、ほかに何を変えても、マシンは安定したフレーム タイムを保てません。
対処: その 1 つのドライバーをハードウェアのメーカーから更新します。システム全体ではなく、名前の出たファイルです。ネットワーク、ストレージ、オーディオのドライバーは、これを起こしうるドライバーに含まれます。
2. シェーダーのコンパイル
新しいエフェクト、新しいエリア、新しい武器が出てくると、ゲームはそれを描画する前にシェーダーをコンパイルしなければなりません。コンパイルは、フレームが待っている間に CPU 上で行われます。
見分け方: セッションやマップの最初の数分が最も悪く、プレイするにつれて消えていき、ドライバーやゲームの更新の後に戻ってきます。カクつきが消えていかないなら、これではありません。詳しくは シェーダー コンパイルのカクつき にあります。
対処: そのままプレイを続け、その期間の中ではベンチマークを取らないでください。コンパイラーを測定することになります。
3. ゲームがストリーミングするディスク
移動に合わせてアセットを読み込むゲームは、読み取りが遅いとカクつき、そのデータを待っているフレームが遅れたフレームになります。
見分け方: 引っかかりが新しいエリアに入るタイミングと重なり、長いフレーム間隔がディスクの活動と同じ時間帯に入ります。わかりやすいところを確認してください: ゲームが機械式のディスクにないか、ドライブがほぼいっぱいでないか、ゲームのフォルダーが書き込みのたびにアップロードするクラウド同期のフォルダーの中にないか、ページング ファイルが回転するディスクにないか。ストリーミングするゲームにとって、SSD は調整ではなく答えです。
4. メモリの逼迫
RAM がいっぱいになると、Windows はページをディスクに移し、戻ってくるページが引っかかりとして感じられます。わかりにくいほうのケースはコミット制限です: Windows が割り当てられるメモリの合計が残り少なくなると、メモリ マネージャーはまだ動いているプログラムからページを削り取り、ゲームはその削り取りを 1 秒未満のフリーズとして感じます。どちらも、タブを 40 個開いたブラウザーを閉じた瞬間によくなります。
5. ほかに動いているもの
Windows Update のワーカー、メンテナンスのタスク、スケジュールされたマルウェアのスキャン、忘れていた動画の書き出し。その作業はゲームが始まっても止まりません。レンダー スレッドと同じコアを待つので、平均が下がるのではなく、フレーム タイムのスパイクとして現れます。終わるのを待つのは、正当な対処です。
見分け方: ベンチマークのキャプチャ は、最も長いフレーム間隔を、同じ時間帯に入ったディスクの作業やハード フォールトとともに記録します。それが Windows のメンテナンスやウイルス対策のプロセスだった場合、長い間隔のカードがその間隔を数え、プロセスの名前を挙げます。それは同時に起きたことであって、その作業がフレームを遅らせた証拠ではありません: ウイルス対策は、どのプログラムが開くものでも読み取ります。
6. 熱と電力の制限
チップが温度や電力の上限に達すると、クロックが何度も下げられては上げられ、波打つフレーム タイムは、それを内側から感じたものです。この判断はファームウェアが Windows に尋ねずに自分で行います。すぐにではなくしばらくしてから始まり、部屋の暖かさに左右されます。
7. ディスプレイ
対応しているリフレッシュ レートより低く動いているモニターは、ハードウェアが必要としていない下限をフレームのペースに置きます。思い込まずに実際のレートを確認してください。クリーン インストールやケーブルの交換の後、意外に多くのマシンで間違っています。
8. 古いツールが残したスケジューラーの値
Win32PrioritySeparation は、スレッドがプロセッサをどれだけ長く使い続けるか、そしてフォアグラウンドのアプリケーションがどれだけ多くの時間を得るかを決めます。クォンタムが長いか固定されている値や、フォアグラウンドの取り分が 3:1 より小さい値は、ゲームとほかのすべての間でのプロセッサの分け方を変えます。それがフレーム タイムに何をするかは測定していません。Fix ページの メモリとシステムの既定値 カードが、Windows の既定値に戻します。
9. オーバーレイとキャプチャの層
オーバーレイはゲーム自身のフレームの中に描画し、バックグラウンドの録画は直近の数分を保存できるようにすべてのフレームをエンコードします。一度にすべてではなく、1 つずつ閉じてテストしてください。
10. マシンではなく試合
オンライン ゲームは、サーバー上の全員で同時に引っかかることがあります。同じマシンでシングル プレイのコンテンツが問題なく、フレーム タイムの記録でゲームが普通に表示を続けているなら、それは本当に役に立つ答えです: 原因は PC ではありません。
w0a にチェック ボックスがある 2 つの原因
原因 8: 「フォアグラウンドの優先度を適切な値に保つ (Win32PrioritySeparation)」 (「最適化」ページ)
1 つの DWORD 値: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\PriorityControl の下の Win32PrioritySeparation です。
これについての Microsoft のリファレンスは Windows 2000 向けに書かれたアーカイブのページで、3 組に分けて読む 6 ビットを、AABBCC と書いて説明しています:
| 組 | 決めるもの | 値 |
|---|---|---|
| AA (上位 2 ビット) | スレッドが 1 回にどれだけ長く動けるか | 01 長い、10 短い、00 または 11 エディション自身の既定値 (ワークステーションのエディションでは短い) |
| BB (中央の 2 ビット) | その長さが変わるかどうか | 01 可変、10 固定、00 または 11 エディションの既定値 (ワークステーションのエディションでは可変) |
| CC (下位 2 ビット) | フォアグラウンドのプログラムがどれだけ多くの時間を得るか | 00 同じ (かつ固定)、01 2:1、10 または 11 3:1。中央の組が可変を意味する場合だけ使われます。 |
- Windows の既定値:
0x2(2 進数で 000010)。ワークステーションのエディションでは、短く可変の間隔で、フォアグラウンドのプログラムがバックグラウンドの 3 倍の時間を得ることを意味します。同じリファレンスは、アプリケーションを優先するパフォーマンス オプションの選択に0x26(100110: 短い、可変、3:1) を、バックグラウンド サービスを優先する選択に0x18(011000: 長い、固定、同じ) を示しています。 - チェック ボックスがすること: まず値を読みます。長い間隔でも固定の間隔でもなく、すでにフォアグラウンドに 3:1 の取り分を与えている値は、そのまま残され、チェック ボックスはそう伝えます。その 3 つのどれかを満たさない値だけが
0x26に書き換えられます。Windows 自身の既定値では、チェック ボックスは何も書き込みません: クライアントのエディションでは、0x2がすでに0x26が求めるとおりにスケジューリングします。 - 適用されるタイミング: 再起動の後です。カーネルはこの値を起動時にスケジューリングの表に変えるので、レジストリで変えても、すでに動いているスケジューラーには何も変わらず、チェック ボックスは書き込んだときに再起動を求めます。
- 元に戻す方法: メモリとシステムの既定値 のカードが
2を書き戻し、再起動を求めます。同時に、ほかのメモリとスケジューラーの既定値も復元します。
原因 9: 「Xbox Game DVR を無効にする」 (「最適化」ページ)
| 値 | チェック ボックスが書き込む値 | Windows の既定値 (修復カードが復元するもの) |
|---|---|---|
HKCU\System\GameConfigStore、GameDVR_Enabled | 0 | 1 |
HKLM\SOFTWARE\Policies\Microsoft\Windows\GameDVR、AllowGameDVR | 0 | 存在しない |
HKCU\Software\Microsoft\Windows\CurrentVersion\GameDVR、AppCaptureEnabled | 0 | 1 |
HKCU\Software\Microsoft\GameBar、ShowStartupPanel | 0 | 存在しない |
HKCU\Software\Microsoft\GameBar、UseNexusForGameBarEnabled | 0 (CCD が 2 つある Ryzen X3D を除く) | 存在しない |
すべて DWORD です。CCD が 2 つある X3D プロセッサでは、チェック ボックスは最後の値に触れません: 録画の仕組みはオフのままですが、AMD のドライバーが聞いている Game Bar の部分は動き続けます。これは予防措置で、確証のある原因ではありません。チェック ボックスのメッセージは、どちらの道を取ったかを伝えます。その部分がそれらのチップでなぜ重要なのかは、Ryzen X3D、Game Bar、コア パーキング で説明しています。
- 適用されるタイミング: w0a はこのチェック ボックスでは再起動を求めません。
- 手放すもの: Game Bar の録画です。Win+G で開かなくなった場合や録画を戻したい場合は、Game Bar / ゲームのキャプチャ のカードが、Game Bar と Game DVR を Windows の既定値でオンに戻します。
- カクつき探偵の表示:
GameDVR_EnabledかAppCaptureEnabledがまだオンのときは、情報としてそれを示します。クリーン インストールではどちらも 1 なので、これは既定値で、故障ではありません。3 つ目の値HistoricalCaptureEnabled(バックグラウンドの録画) も読みますが、それは言い回しを選ぶためだけで、チェック ボックスはその値を書き込みません。
自分で確認する
次のコマンドは読み取るだけです:
reg query "HKLM\SYSTEM\CurrentControlSet\Control\PriorityControl" /v Win32PrioritySeparation
reg query "HKCU\System\GameConfigStore" /v GameDVR_Enabled
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\GameDVR"
reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\GameDVR" /v AllowGameDVR
reg query "HKCU\Software\Microsoft\GameBar"
結果の読み方:
- 値は 16 進数で表示されます:
Win32PrioritySeparation REG_DWORD 0x26は0x26という意味です。 0x2は Windows の既定値で、0x26はリファレンスにあるアプリケーションの設定です。クライアントのエディションでは、どちらも同じようにスケジューリングします。0x18はバックグラウンド サービスの設定です: 長く固定の間隔で、フォアグラウンドの取り分がなく、原因 8 が扱っているのはこれです。それ以外の値は、6 桁の 2 進数に直して上の表で読んでください。- Game DVR では、
0x0はオフ (チェック ボックスの値)、0x1はオン (Windows の既定値) を意味します。 AllowGameDVRの照会が行ではなくエラーで終わる場合、そのポリシーの値は存在せず、それが Windows の既定値です。
カクつき探偵がこれらをどう扱うか
カクつき探偵が調べるもの は、Windows とドライバーがすでに記録したものに対してこれらのチェックを行い、見つかったものすべてに、確証あり、可能性大、候補、未チェックのラベルを付けます。知っておく価値のあることが 2 つあります: いつも 10 個の問題を見つけるスキャンは対処を売り込んでいるのであり、実行できなかったチェックは、黙って問題なしとして扱われるのではなく、数に入れられます。
その後で、1 つ だけ変えて、同じ場面をもう一度キャプチャしてください。5 つの変更と 1 回の測定では、どれが効いたのかは何もわかりません。数値を動かさなかったものは元に戻すべきです。
原因ではないもの
これらはカクつきの対処として際限なく出回っていますが、w0a は記録に残っている理由から、そのどれも書き込みません:
DisablePagingExecutive、LargeSystemCache、DisablePageCombiningはカーネルのメモリ マネージャーを変え、NtfsMemoryUsageは NTFS ドライバーのプールを変えます。IoPageLockLimitとSecondLevelDataCacheもカーネルの前提です。カーネル レベルの値は製品のルールにより、決して書き込みません。GlobalTimerResolutionRequestsはSession Manager\kernelの下にあり、製品はこのキーを完全に拒否します。MSISupportedはデバイスの割り込みのモードを切り替えます。間違って設定すると、結果が黒い画面になることがあります。FeatureSettingsOverrideとFeatureSettingsOverrideMaskは、Spectre と Meltdown の緩和策をオフにします。OverlayTestModeとDisableOverlaysはマルチプレーン オーバーレイをオフにします。実際の Windows 11 25H2 のマシンで、これらは CS2 を完全に、繰り返しフリーズさせました。TdrDelayとTdrDdiDelayはグラフィックス ドライバーのウォッチドッグを長くし、それぞれのフリーズを長くするだけです。TdrLevelは回復をオフにします。
メモリが不足していないマシンでは、メモリ クリーナーは測定できるものを何も変えません。
関連
- ゲーム中の急な FPS 低下
- シェーダー コンパイルのカクつき
- レイテンシ テストの読み方
- カクつき探偵が調べるもの
- 平均 FPS は高いのに 1% Low が悪い
- DPC レイテンシ: ドライバーがカクつきの原因になるとき
- w0a が変更した内容を元に戻す
CS2 をプレイしていますか? 今でも効果がある起動オプションと、ビデオ設定のどの項目が実際にフレーム レートを左右するか: CS2 のカクつきと低 FPS を直す方法: 測定に基づくチェックリスト
このページは役に立ちましたか?
何が足りなかったか、何がうまくいかなかったかを教えてください。いただいた内容はすべて読んでいます。
送信されるのは、入力した内容とこのページの名前だけです。サーバーは不正利用を防ぐために接続元の IP アドレスも記録し、報告と一緒に削除します。16 歳未満の方は、この欄を使わないでください。 プライバシー ポリシー
このページで解決しなかった場合は、ご連絡ください。どの記事を読んだかを書いていただければ、その記事を修正します。