はじめに:高フレームレート下で発生する微小スタッターと音飛びの謎
現代のPCゲーミングにおいて、多くのプレイヤーを悩ませる深刻なトラブルの一つが「ハイエンド構成にもかかわらず発生する微小な引っかかり(マイクロスタッター)と音声のプチプチ音(ポップノイズ・音飛び)」です。最新世代のフラッグシップGPUと高性能CPUを搭載し、モニタリングツール上で240 FPS以上の極めて高い平均フレームレートを記録していても、実際の操作感は重く不安定で、1% Low(最小フレームレート)の落ち込みが頻発することがあります。
一般的なハードウェア監視オーバーレイ(FPSカウンター、GPU使用率グラフ、CPU温度計など)では、この原因を突き止めることができません。なぜなら、ボトルネックがグラフィックスの描画負荷や熱によるサーマルスロットリングではなく、Windowsカーネルの割り込み処理アーキテクチャである DPC(遅延プロシージャ呼び出し)および ISR(割り込みサービスルーチン)のレイテンシスパイク に起因しているためです。デバイスドライバが高特権レベルでCPUコアを占有すると、Windowsスケジューラはリアルタイム処理を強制停止させられ、ゲームの描画ループとOSのオーディオバッファが同時にデータ枯渇状態に陥ります。
Windowsカーネルアーキテクチャ:ISR、DPC、および IRQL 優先順位
ドライバがゲームのスタッターを引き起こす理由を理解するには、Windows NTカーネルがハードウェア割り込みを処理する仕組みを把握する必要があります。Windowsには、PASSIVE_LEVEL(IRQL 0)から高特権の HIGH_LEVEL まで段階的な「割り込み要求レベル(IRQL)」が存在します:
- ユーザーモードおよびゲームスレッド(
PASSIVE_LEVEL、IRQL 0):ゲームのメインロジック、物理演算、入力処理、DirectSound/WASAPIオーディオ生成などは通常の優先度で実行されます。 - 遅延プロシージャ呼び出し(
DISPATCH_LEVEL、IRQL 2):カーネルのスケジューラやドライバの後続処理が実行されます。CPUコアがDISPATCH_LEVELで動作している間、ユーザーモードのスレッドは完全にプリエンプト(実行中断)され、一切動作できません。 - 割り込みサービスルーチン(デバイスIRQL、DIRQL):ネットワークカード、NVMe SSD、GPUなどのハードウェアが割り込みを要求すると、CPUは現在の処理を即座に中断し、ドライバのISRを実行します。
1. 2段階の割り込み処理モデル
ハードウェアの即時応答性とシステム全体の応答性を両立させるため、Windowsは2段階のアプローチを採用しています:
- フェーズ 1:ISR の実行:ハードウェアからの割り込み信号を受理して緊急のレジスタ状態を保存し、直ちにDPCをシステムキューに登録して重い処理を先送りします。Microsoftの設計指針では、ISRの実行時間を 25マイクロ秒(µs)以内 に収めることが義務付けられています。
- フェーズ 2:DPC の処理:キューに入ったDPCは、カーネルスケジューラによってIRQL 2(
DISPATCH_LEVEL)で順次処理されます。Microsoftの指針では、単一のDPCルーチンの実行時間は 100マイクロ秒(µs)以内 である必要があります。
2. スケジューリングの遮断とバッファアンダーラン
DPCはユーザーモードよりも優先度の高いIRQL 2で実行されるため、Windowsのスレッドスケジューラは、DPCが完了するまでゲームスレッドにCPUコアを割り当てることができません。特定のドライバが非効率な実装や過剰な省電力状態の切り替えによって 1〜3ミリ秒(1,000〜3,000 µs) もの間CPUコアを占有し続けると、深刻な障害が発生します:
- オーディオバッファアンダーラン(音飛び・ノイズ):低遅延なゲームオーディオは、通常64〜256サンプルの極めて小さなバッファサイズで動作します。一般的な48,000 Hzの環境では、128サンプルのバッファは約2.67ミリ秒ごとに補充されなければなりません。DPCスパイクがオーディオ処理スレッドを停止させ、この締め切りを超過すると、DAC(D/Aコンバータ)のバッファが空になり、スピーカーから耳障りな「プチッ」というポップノイズや無音が発生します。
- フレームタイムスパイク(1% Low の急落):ゲームの描画提出スレッドがカーネル遅延に阻まれ、ディスプレイのリフレッシュウィンドウ(240Hzディスプレイなら4.16ミリ秒)に間に合わなかった場合、そのサイクルのフレーム更新を逃し、画面上で目に見える瞬間的なカクつき(スタッター)が発生します。
診断方法論:LatencyMon レポートの読み解き方
Windows環境でDPCおよびISRの異常を特定するための業界標準ツールが、Resplendence社が開発した LatencyMon です。ゲーム実行時と同等の負荷をかけた状態で測定し、以下の主要指標を確認します:
- 最高報告 DPC ルーチン実行時間(Highest reported DPC routine execution time):理想的なシステムでは 500 µs 未満 に収まります。1,000 µs(1.0 ms)以上 のスパイクが記録される場合、リアルタイム処理に支障をきたしていると判断されます。
- 最高報告 ISR ルーチン実行時間(Highest reported ISR routine execution time):通常は 100 µs 未満 である必要があります。この数値が高い場合、ハードウェアバスの競合やマザーボードの配線・設計上の問題を疑う必要があります。
- ドライバ別実行時間(Driversタブ):カーネルモジュールごとの累積実行時間とピーク実行時間が一覧表示されます。最も長い時間を記録しているドライバ名を特定することで、問題のサブシステムを絞り込めます。
主な原因ドライバ一覧
| ドライバファイル名 | 該当サブシステム | スパイクを引き起こす典型的な原因 |
|---|---|---|
nvlddmkm.sys | NVIDIA ディスプレイドライバ | 動的なP-State(クロック周波数)切り替え、PCIe ASPM復帰遅延、HDMI/DP音声との競合 |
amdkmdag.sys | AMD Radeon ドライバ | ディープスリープクロック遷移、ULPS(超低電力状態)、FreeSyncのポーリング処理 |
ndis.sys / tcpip.sys | ネットワークドライバインターフェース | EEE(省電力イーサネット)の休止復帰、Wi-Fiローミングのバックグラウンドスキャン、過度な割り込み加減設定 |
storport.sys / stornvme.sys | NVMe / SATA ストレージコントローラ | NVMeの自律的電源状態遷移(APST)、過度なSSDスリープからの復帰遅延 |
wdf01000.sys | Windows ドライバフレームワーク | 4K/8Kポーリングレートマウスの入力負荷、RGB制御ソフトによるハードウェアセンサーの高頻度監視 |
ACPI.sys | 電源管理・ハードウェア制御インターフェース | CPUのコアパーキング切り替え、深いC-State(C6/C7)省電力状態の出入りに伴うレイテンシ |
具体的かつ実践的なシステム最適化手順
DPCレイテンシスパイクを根本的に解消するには、割り込みの競合排除、GPUの電源管理設定、周辺機器の整理を体系的に行う必要があります。
1. メッセージシグナル割り込み(MSIモード)の有効化
旧来の周辺機器バスアーキテクチャでは、物理ピンによるラインベース割り込み(Line-Based IRQ)が使用されていました。この方式では複数のデバイスが同一のIRQライン(例:IRQ 16にGPU、サウンドカード、USBコントローラが相乗り)を共有するため、割り込みが発生するたびにCPUが全ドライバを順次ポーリングしなければならず、DPCキューの遅延が増大します。
現代のPCIeデバイスは メッセージシグナル割り込み(MSI / MSI-X) に対応しており、ホストメモリへ直接割り込みメッセージパケットを書き込むことで、物理ピンの共有問題を回避できます:
- 管理者権限を持つツール(MSI Utility v2など)を使用するか、レジストリを確認して、グラフィックスカードがMSIモードで動作しているかを検証します。
- レジストリパス
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI\[GPUデバイスのInstanceId]\Device Parameters\Interrupt Management\MessageSignaledInterruptProperties内のMSISupportedを1に設定します。 - 割り込み優先度を適切に設定することで、グラフィック処理用の割り込みが他の機器と干渉しない独立した経路を確保できます。
2. GPU電源管理の最適化と PCIe ASPM の無効化
近年のグラフィックスカードは、ロード画面やメニュー画面などの軽負荷時に素早くコアクロックを下げ、低電力状態(P5やP8)へと移行します。直後に激しいアクションシーンへ突入すると、低電力状態から最高性能(P0)へクロックを引き上げる際の物理的な遷移遅延により、nvlddmkm.sys のDPC実行時間が跳ね上がります:
- NVIDIA コントロールパネル:「3D 設定の管理」 -> 「電源管理モード」を「標準」から 「パフォーマンス最大化を優先」 に変更します。これにより、ゲーム実行中の不要なクロック低下を防ぎます。
- PCIe アクティブステート電源管理(ASPM)の無効化:Windowsの「電源オプション」 -> 「プラン設定の変更」 -> 「詳細な電源設定の変更」 -> 「PCI Express」 -> 「リンク状態の電源管理」を 「オフ」 に設定します。PCIeレーンがマイクロ秒単位でL0s/L1省電力状態に入るのを防ぎ、復帰時のバス遅延を排除します。
3. ネットワークアダプタの詳細設定
ndis.sys や tcpip.sys の遅延スパイクは、マザーボード上の有線LAN/Wi-Fiアダプタの省電力設定に起因することが多々あります:
- 「デバイス マネージャー」 -> 「ネットワーク アダプター」 -> 使用中のアダプタのプロパティ -> 「詳細設定」タブを開きます。
- 「省電力イーサネット」(Energy Efficient Ethernet, EEE) を 「無効」 に設定します。通信パケットが一時的に途切れた際のPHYチップのスリープを防ぎます。
- 「割り込み加減」(Interrupt Moderation) を適切に設定します。完全に無効にするとCPUへの割り込み負荷が過大になり、高すぎるとパケット配信が遅延します。競技用途では「低」または適度な設定が推奨されます。
- Wi-Fiアダプタの場合、「ローミングの積極性」(Roaming Aggressiveness) を 「最低」 に設定し、ゲーム中に近隣のアクセスポイントを探索するスキャン動作を阻止します。
4. 不要なオーディオエンドポイントと監視ソフトの整理
複数のオーディオデバイスがシステム内に混在していると、ドライバ競合が発生しやすくなります:
- USB外付けDACやマザーボードのアナログジャックを使用している場合、「デバイス マネージャー」 -> 「サウンド、ビデオ、およびゲーム コントローラー」から、ディスプレイ接続用の 「NVIDIA High Definition Audio」 または 「AMD High Definition Audio」 を 無効 に設定します。
- ハードウェアの温度や電圧を高頻度でポーリングするRGB制御ソフトやモニタリングユーティリティは、
wdf01000.sysを通じてカーネルポートへ連続アクセスし、定期的なスタッターを誘発します。不要なバックグラウンドサービスは停止またはアンインストールしてください。
DPC レイテンシ トリアージ マトリクス
| 主な症状 | LatencyMonの警告モジュール | 根本的な原因 | 推奨される即効対策 |
|---|---|---|---|
| ゲーム起動時や負荷変動時の音飛び | nvlddmkm.sys | GPUのP-State切り替えおよびPCIe ASPM復帰遅延 | 電源管理を「パフォーマンス最大化を優先」にし、PCIeリンク状態電源管理をオフにする |
| オンライン対戦中の周期的・規則的なカクつき | ndis.sys / tcpip.sys | LANカードのEEE省電力休止またはWi-Fiローミングスキャン | EEEを無効化し、Wi-Fiローミングを最低に設定。最新の安定版ドライバを適用する |
| マウス操作時やアイドル時における細かなノイズ | wdf01000.sys | 高ポーリングレートマウスの負荷やRGBソフトの監視 | オーディオ機器をCPU直結のUSBポートに接続し、RGB常駐ソフトを終了する |
| ゲームプレイ中に10〜15秒ごとに生じる大フリーズ | storport.sys | NVMe SSDの自律的電源状態(APST)切り替え遅延 | Windowsの電源設定でハードディスクの電源オフを「なし」にし、専用NVMeドライバを更新 |
| アイドル復帰時などに発生する全般的な音割れ | ACPI.sys | CPUコアパーキングや深いC-State(C6/C7)遷移 | 電源プランを「高パフォーマンス」にし、必要に応じてBIOSでC-Statesを無効化する |
動作確認用:デバイスの MSI モード確認 PowerShell スクリプト
管理者権限の PowerShell で以下のスクリプトを実行することで、主要なゲーム関連デバイス(GPU、ネットワーク、ストレージ)が最新のMSIモードで動作しているか、従来のレガシー割り込みを使用しているかを一括確認できます:
# 主要なPCIデバイスのメッセージシグナル割り込み(MSI)設定状況を確認
Get-PnpDevice -Class "Display", "Net", "SCSIAdapter" | ForEach-Object {
$device = $_
$instanceId = $device.InstanceId
$msiPath = "HKLM:\SYSTEM\CurrentControlSet\Enum\$instanceId\Device Parameters\Interrupt Management\MessageSignaledInterruptProperties"
$isMsi = $false
if (Test-Path $msiPath) {
$val = Get-ItemProperty -Path $msiPath -Name "MSISupported" -ErrorAction SilentlyContinue
if ($val.MSISupported -eq 1) { $isMsi = $true }
}
[PSCustomObject]@{
デバイス名 = $device.FriendlyName
クラス = $device.Class
MSI動作モード = if ($isMsi) { "有効 (MSI)" } else { "レガシー共有ピン (Pin)" }
ステータス = $device.Status
}
} | Format-Table -AutoSize
「レガシー共有ピン (Pin)」 と表示され、LatencyMonで該当デバイスの割り込み滞留が見られる場合、MSIモードへの移行によって割り込みの交通整理が行われます。
競技ゲーマーのためのシステム維持指針
- 必ずゲーム動作環境下で負荷テストを行う:デスクトップ放置のアイドル状態でLatencyMonを実行しても意味がありません。高リフレッシュレートでゲームを起動し、激しい描画とネットワーク通信が行われている状態でログを採取してください。
- クリーンインストールによるドライバ健全性の確保:GPUドライバの更新時は、Display Driver Uninstaller(DDU)を用いてセーフモードで不要なレジストリや古いファイルを完全に消去してから最新版を導入することを推奨します。
- USBバスの物理的トポロジを分離する:低遅延オーディオインターフェースは、高ポーリングレートのキーボードやマウス、Webカメラが接続された前面ハブではなく、マザーボードのCPU直結USBポートへ単独で接続してください。
- 客観的な検証ログに基づき管理する:PCの遅延特性はハードウェア、ファームウェア、OSドライバの相互作用による動的なバランスです。365Finds のような技術分析アーカイブを参照し、カーネルスケジューリングの根本原理に基づいたチューニングを施すことで、真に滑らかで遅延のないゲーム環境を維持してください。