Windows でシステム割り込みの CPU 使用率が高い原因
システム割り込み(System Interrupts)はプログラムではありません。ハードウェアへの応答、つまりデバイスが注意を求めたときに反応するドライバーのコードに使われたCPU時間を示す、タスク マネージャーの行です。低い数値は正常で、このページのために測ったアイドル状態のノートPCでは1%未満でした。静かなPCで数%以上が続くなら、たいていドライバーかデバイスが原因なので、その1つを見つけるのが解決策です。この行は終了できず、ディスク上にシステム割り込みという名前のものもありません。
その数字の意味
デバイスは何かが必要になるとプロセッサーに割り込みます。ネットワーク カードにパケットが届いた、オーディオ デバイスが次のバッファーを必要としている、といった場合です。Windowsはすぐにドライバーの割り込みルーチンを実行します。Microsoftのドライバーのドキュメントによると、これらのルーチンはできるだけ速く実行する必要があるため、残りの処理は遅延プロシージャ コール(DPC)に引き渡されます。DPCは少し後に、割り込みより低い優先度で、ただし通常のプログラムよりは先に実行されます。システム割り込みはこの時間を合計したものです。
だから数値以上に響きます。DPCや割り込みルーチンがコアで動いている間、そこにある通常のスレッドは待たされるので、遅いドライバーは音の乱れ、マウスのカクつき、フレーム落ちとして現れます。
タスク マネージャーは丸めて、1秒に1回しかサンプリングしないので、測ってみてください。
(Get-Counter '\Processor(_Total)\% DPC Time', '\Processor(_Total)\% Interrupt Time' -SampleInterval 2 -MaxSamples 5).CounterSamples | ForEach-Object { '{0} {1:N2}' -f $_.Path, $_.CookedValue }
このページを確認したとき、Windows 11を動かしているアイドル状態のThinkPadでは、どちらも0.38でした。公式な上限はありませんが、おおまかな目安として、静かなPCでどちらかが5%を超えて続くなら調べる価値があります。
ドライバーを見つける
まず何が変わったかを考え、次にデバイスを外し、それから測ります。
- 不要なものをすべて抜く。USBハブ、Webカメラ、オーディオ インターフェイス、ドッキング ステーション、プリンターです。1つ抜くごとに1分ほど数値を見ます。故障したUSBデバイスは定番の原因で、この手順は無料です。
- 何が変わったかを考える。始まる直前にドライバーかWindowsの更新がありましたか。デバイス マネージャーでそのデバイスのプロパティ › ドライバーを開き、ドライバーを元に戻すを試します。
- デバイス マネージャーで疑わしいものを1つずつ無効にする。まずWi-FiとBluetoothのアダプター、次にオーディオ、それからディスプレイとディスク以外のものです。1分見たら、また有効にします。
- まだ答えが出なければLatencyMonで測る。Resplendenceのこの無料のツールは、ドライバーごとのDPC時間とISR時間を報告します。問題が起きている間に数分間実行し、Driversタブを実行時間の長い順に並べて読みます。ネットワークなら
ndis.sys、あるいはベンダーのオーディオ ドライバーのように、そこに出るファイル名が探す場所を教えてくれます。 - もっと詳しく知りたいときはトレースを記録する。MicrosoftのWindows Performance RecorderはWindowsに含まれていて、管理者のターミナルが必要です。
wpr -start CPU
wpr -stop interrupts.etl
症状が出てから1分後に止め、ファイルをWindows Performance Analyzerで開いて、DPC/ISRのグラフを見ます。
ドライバー名が示すもの
| ドライバーまたはデバイス | よくある原因 | 試すこと |
|---|---|---|
ndis.sys、Wi-FiまたはEthernetのドライバー |
ネットワーク ドライバー、またはその上のVPNやフィルター | PCまたはチップのメーカーから更新し、VPNをオフにして試す |
HDAudBus.sys、RtkHDAud.sys、USBオーディオ |
オーディオ ドライバー | PCメーカーから更新するか、別の出力で試す |
USBPORT.SYS、USBXHCI.SYS |
USBデバイスやハブの不調 | デバイスを1つずつ抜き、別のポートを試す |
nvlddmkm.sys、amdkmdag.sys、igdkmd64.sys |
グラフィックス ドライバー | GPUまたはPCのメーカーからクリーン インストールで更新する |
storport.sys、stornvme.sys |
ディスクまたはストレージのドライバー | ファームウェアを更新し、ドライブの状態を確認する |
ACPI.sys |
ファームウェアや電源管理 | PCメーカーからBIOSまたはUEFIを更新する |
ノートPCでは、そのハードウェア向けに作られているので、まずPCメーカーのサポート ページを使ってください。すべて抜き、ドライバーが最新で、クリーンに再起動してもまだ数値が高いなら、特に落としたり水をこぼしたりしたあとは、ハードウェアが原因の可能性が十分にあります。ここではLinuxのライブUSBが役立ちます。そこでもマシンがカクつくなら、原因がWindowsのドライバーである可能性は低くなります。
やってはいけないこと
- 終了する方法を探さない。この行の背後にプロセスはなく、タスク マネージャーには止めるものがありません。
- ドライバー更新ユーティリティを入れない。ノートPCに合わないビルドを選ぶことが多く、直したい問題そのものになりえます。
- フォーラムの投稿にある割り込みやMSIの設定をレジストリで変更しない。値を誤ると、PCが起動しなくなることがあります。
- 「システム最適化ツール」にお金を払わない。ドライバーのバグは直せず、それ自身のバックグラウンド処理が増えます。
Moleでできること
Mole for Windowsはシステム割り込みを一覧にしません。ステータスは実在のプロセスを読むもので、この行はそうではないからです。ドライバーのツールもありません。役立つのは、もう一方を除外することです。ステータスで実際に忙しく動いているプロセスが見つかれば、そのプロセスが問題かもしれないので、まずWindowsでCPU使用率が高いときを読んでください。負荷を説明するプロセスがないなら、上の手順が正しい道です。通常のプログラムではない、ほかのタスク マネージャーの行については、システム アイドル プロセスを参照してください。
よくある質問
タスク マネージャーのシステム割り込みとは?
ハードウェアに応答するドライバーのコードの実行にCPUが使った時間を、1行にして表示したものです。ファイルはなく、背後にプログラムもありません。
システム割り込みはCPUをどれくらい使うべき?
アイドル時は通常1%を大きく下回り、ネットワークやディスクの負荷が高いときは一時的に上がることがあります。静かなPCで数%が続くなら、調べる価値があります。
システム割り込みを無効にできる?
できません。サービスでもプログラムでもなく、ハードウェアが必要とする処理を報告しているので、直すべきはその原因のドライバーかデバイスです。
システム割り込みはウイルス?
違います。マルウェアが自前のドライバーを動かすことはありますが、まれです。LatencyMonが見覚えのないドライバーを示したなら、Microsoft Defenderでスキャンするのが妥当です。
システム割り込みで音が乱れるのはなぜ?
そのコードは通常のプログラムより先に実行されるため、遅いドライバーがあると、そのコアのオーディオ プログラムが次のバッファーに間に合わなくなります。LatencyMonはこのケースのために作られていて、ドライバーを特定してくれます。