web-dev-qa-db-ja.com

高い遅延プロシージャコールの根本的な原因を知るにはどうすればよいですか?

デュアルコアプロセッサを使用していますが、2つのうち1つは常に100%です。 ProcessExplorerを見ると、遅延プロシージャコールであることがわかります。ネットを読んでいると、色々な答えが返ってきます。

私の場合、問題が何であるかを絞り込むためにいくつかのステップを設定することは可能ですか?

Update 1:FWIW、問題はセーフモードでも解決しません。

アップデート2:PCの背面から可能な限りすべてのプラグを抜いたので、40%以上の空きプロセッサが購入されました。 RATTV3ツール もダウンロードしましたが、私のマシンでは、何らかの理由でドライバーごとの内訳が表示されません。 DPCLatencyCheckerとRATTV3 here の両方の良い説明があります。

Update 3:LatencyMon (下記の私の回答を参照)は、それがnvstor32.sys-NVidiaのSATAドライバーであることを通知します-約5300 µsの時間。

Update 4:プロットが厚くなり、リカバリディスクの起動を試みるかどうかを検討します(ハードウェアの問題ではなく、実際にドライバであるかどうかを確認します)。 DVD/CDプレーヤーが機能していない(つまり、ボタンを押してもドアが開かない)ことに気付きました。マシンをマザーボードの交換から戻したばかりであることを考えると、彼らがプラグインするのを忘れているのではないかと思いました。再起動すると、すべてが正常でした-DPC(現在は最高300µs)はもうありません!

更新5:次の日に問題が発生し、パスワードプレーヤーのカーソルがスローモーションで点滅していても、CDプレーヤーが再び機能しない...試しました考えられるすべてのプラグを抜いて、2回目の再起動時に再び動作しました(Update2と同様)。次回は、CDプレーヤーを完全に取り外してみます...

更新6:気づいたのは、システムイベントログにnvstor32.sysParity error detected in \Device\RaidPort0と言うエラーが表示され、その後、再初期化の送信に関する警告が表示されることです。 RaidPort0がどれであるかを計算する必要があります...(注、RAIDセットアップはありません。これは単なる標準のAcerです)。ああ、システムロールバック(または何と呼ばれていても)を実行すると、アバストのセットアップが強制終了されたようです。起動しない(RPCエラー)、アンインストールできない(setifaceエラーが発生した)ためです。

アップデート7:最後に、DVDを取り外した状態で再起動する時間を得ました。 DPCの問題はもうありません! (ただし、ページフォールトがたくさんありますが、それは後で行います)。次のステップ:ケーブルかDVDプレーヤーかを確認します。

アップデート8:SATAケーブルを借り、それで起動しましたが、問題ありません。 CD/DVDプレーヤーが機能し、nvstor32.sysでDPCの問題が発生せず、プロセッサがブロックされていません。ハッピーエンド...ほぼ:アバストの問題、起動時のstorport.sysの明らかなDPCの問題(USBの場合は通常か?)、ハードページフォールトがたくさんあります。しかし、それらは他の質問の対象になります。

追記:私は最近同じ問題を抱え始め、同じ方法を使用して、USBスティック(私が使用していたもの)まで追跡することができましたReadyBoost)が撃たれています。

41
Benjol

DPCレイテンシが高い原因を見つけた経緯を以下に示します。


サウンドの再生中にシステムでクリック音とポップ音が発生しました。これは、カーネルモードの何かがCPUを独占していることを意味することを知っていました。私が最初に考えたのは、 Process Explorer をざっと見回して、不自然なものがないか確認することでした。私の注意を引いた唯一のことは、Deferred Procedure Calls(DPCs)の実行に費やされた過度の時間でした:

Screenshot of Process Explorer showing high DPC time

DPCはドライバー内で実行されるコードであることは知っていました。課題は、どのドライバを理解することでした。 DPCレイテンシチェッカー に目を向けると、レイテンシがどれほど悪かったかがわかりました。

screenshot of DPC Latency Checker

DPC Latency Checkerは、 Device Manager でデバイスを通過し、重要でないハードウェアを1つずつ無効にすることを提案します(ネットワークカード、サウンドカード)、バグのあるドライバーを分離することを期待しています。 (デバイスを無効にし、DPCレイテンシが突然低下した場合:犯人が見つかりました!)

screenshot of disabling devices

残念ながら、可能な限りすべてを無効にした後(まだコンピューターを使用できます—ハードドライブ、ビデオカード、マウス、またはマウスが接続されているUSBハブを無効にしないでくださいに!)、レイテンシはまだ高かった。次に、 Windows Performance ToolkitWindows SDK の一部)と優れたブログ投稿を参照しましたPeter Weiland著、 "Deasing DPC Time" 。 Windows Performance Toolkitをインストールした後:

Screenshot of Windows SDK installer, with Windows Performance Toolkit being selected

管理者特権のコマンドプロンプトを開いて実行しました。

>xperf -on Latency

Latencygroupは、カーネルグループプロバイダー:

>xperf -providers kg
   Base           : PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+PROFILE+MEMINFO
   Diag           : PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSWITCH+PERF_COUNTER+COMPACT_CSWITCH
   DiagEasy       : PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSWITCH+PERF_COUNTER
   Latency        : PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSWITCH+PROFILE
   ...

この場合、Latencyはカーネルフラグに対応します。

  • PROC_THREAD プロセスとスレッドの作成/削除
  • [〜#〜] loader [〜#〜] カーネルお​​よびユーザーモードのイメージロード/アンロードイベント
  • [〜#〜] profile [〜#〜] CPUサンプルプロファイル
  • [〜#〜] cswitch [〜#〜] コンテキストスイッチ
  • [〜#〜] dpc [〜#〜] DPCイベント
  • [〜#〜]割り込み[〜#〜] 割り込みイベント
  • DISK_IO ディスクI/O
  • HARD_FAULTS ハードページフォールト

1分間実行した後、トレースを停止し、ファイルに保存しました。

C:\Users\Ian\Desktop\xperf -d thingy1.etl

次に、次のコマンドでトレースの結果を表示しました。

C:\Users\Ian\Desktop\xperf thingy1.etl

これにより、グラフィカルな Windows Performance Analyzer がロードされます。 DPC CPU Usage グラフを右クリックして、 Summary Table を選択しました。これは、ドライバーごとにDPCで費やされた時間の内訳を示しています。

screenshot of XPerf output

すぐに、1つのドライバー(tsvp.sys)がDPC実行あたり平均2.8msを取っていることがわかります。これは、他のどのドライバーよりも桁違いに遅いです。

screenshot

グーグルtsvp.sysは、私が最近インストールした CommView という答えをくれました。

ここでの問題は、このドライバーを無効にする方法です。 AutoRuns を使用すると、ドライバーサービスとしてインストールされていることがわかります。

screenshot of autoruns

デバイスマネージャーを使用して、このドライバーをホストするサービスを無効にできます。最初に Show hidden devices を展開し、次にNon-Plug and Play Driversノードを展開します。

screenshot of device manager

最後に、ドライバーサービスを停止し、スタートアップモードをSystem(ドライバーはWindowsの重要な部分であり、Windowsはそれなしでは起動できないことを意味する)からDemand(つまり、Iしたいときにドライバーを起動できます):

screenshot of device manager

ドライバーサービスを停止すると、DPCの遅延がすぐに修正されました。

screenshot

CommViewを完全にアンインストールする場合とアンインストールしない場合がありますが、現時点では、DPCの遅延が大きい場合の問題を解決しました。


アップデート:Windows 8以降 非プラグアンドプレイドライバーがデバイスに表示されないマネージャー

注Windows 8およびWindows Server 2012以降、プラグアンドプレイマネージャーは非PnP(レガシ)デバイスのデバイスの更新を作成しなくなりました。したがって、デバイスマネージャーで表示するそのようなデバイスはありません。非表示のデバイスをデバイスマネージャーの表示に含めるには、[表示]をクリックし、[非表示のデバイスの表示]を選択します。

Microsoftはこの機能を取り上げ、何もないものに置き換えました。よくやった。

典型的なオタクの怒りでは、 役に立たない答え

  • デバイスマネージャーで非pnpドライバーが表示されることはありません
  • なぜこれが必要なのですか?

幸いなことに、NirSoftは代替品を作成しました。 ServiWin を使用すると、すべてのサービスを表示、停止、および開始できます(Microsoftが管理者に表示を許可する必要があるものも含む)。

screenshot of ServiWin

43
Ian Boyd

進捗レポート

私がこれまでに見つけた最良のツールは LatencyMon です。これは基本的に、前の2つのツールが実行するすべてのことを、何も考えさせることなく実行します。ダウンロードページでは、電子メールで登録するように求められますが、私が行ったときには何も起こりませんでしたが、ページの下部までスクロールしてダウンロードできます。

alt text

13
Benjol

私の場合、私は LatencyMon (Benjolの回答から)を使用し、ドライバーが生命、宇宙、およびすべてを凍結していることを発見しました(また)storport.sysこれは、「 高性能バス 」のMicrosoftドライバーです。これは、問題がIO関連していたことを疑っています。

私も先に進んで Windows 7イベントビューア 、フォルダWindowsログ->アプリケーションを確認し、いくつかのバッチを見つけましたボリュームシャドウコピー(VSS)のエラーが30分から2時間ごとに発生します。詳細は次のとおりです。

Volume Shadow Copy Service error: Error calling a routine on the Shadow Copy Provider {b5946137-7b9f-4925-af80-51abd60b20d5}. Routine returned E_INVALIDARG. Routine details GetSnapshot({00000000-0000-0000-0000-000000000000},000000000023C850). 

Operation:
   Get Shadow Copy Properties

Context:
   Execution Context: Coordinator

それから私は 一体何がVSSであるか とそれが何のために使われるかを調査し始めました。私は先に進みました いくつか - ページ - - VSSトラブルシューティング 。これらすべてを調べたところ、大きな疑いがあったのは、私のバックアップソフトウェア CrashPlan でした。

そのリードに続いて、私はすぐに VSSエラーに関連するページ を見つけました。そこにある指示に従って、VSSを使用するオープンファイルのバックアップを無効にすることにより、フリーズ、カーネルCPUの高使用率などは完全になくなりました。誤解しないでください。CrashPlanは素晴らしいです!私のマシンではこの機能が機能していませんでした。

ところで、このページは、私の問題の根本的な原因を見つけるのに役立つ最初のリードを与えてくれたTHE ONEです。 @Benjolと以前に回答してくれた他のすべてに感謝します!私の答えが他の人にも役立つことを願っています...

6
Chuim

システムをビジー状態に保つデバイスドライバーが存在する可能性があります。これを分析する1つの方法は、 DPCレイテンシーチェッカー を実行することです。次に、一度に1つのドライバーを無効にして、DPCの負荷が低下するかどうかを確認します。 (Process Explorerも機能します。)

コンピューターの管理->デバイスマネージャーでデバイスドライバーを無効にできます。

4
Andomar

この問題は解決するのが難しく、必ずしも悪いドライバーやIRQの競合に限らないので、ここに回答を追加する必要があると思います。

RPCレイテンシが高く、プロ向けUSBサウンドカードでポップ/クラックルが発生していました。承認された回答に記載されているツールは、問題を引き起こしている特定のドライバーを特定するのに役立ちませんでした。レイテンシは、HAL、USBPORT.SYS、Windowsカーネルなどの多くのプロセスで発生していました。これらのプロセスをさらに掘り下げても、明らかな原因は明らかになりませんでした。

私の場合、問題は低レベルであり、特定のチップセットとBIOSリビジョンを備えたGigaByteマザーボードに固有であることがわかりました。解決策は、Intel SpeedStepと、CPU速度と電圧をオンザフライで調整するその他すべてのマザーボード固有の機能を無効にすることでした。これらのオプションをオフにすると、RPCレイテンシはすぐに修正されました。

3
Alex

グラフィックカードをGeForce GTX 550 Tiにアップグレードしたときに表示されるnVidia 10/100/1000イーサネットコントローラーのIRQエラーを解決した後、このエラーが発生し始めました。

新しいGeForceドライバー295.73にアップグレードしてから割り込みの競合を解決した後、既存のnForce SATA/RAIDコントローラードライバーを削除、損傷、またはアンインストールしたようです。私はRAIDを使用していません。エラーは解決せず、Vista Ultimate 64ビットが時々ロックされます。

Webで見つけたトラブルシューティングの提案をすべて試した後、簡単な解決策が現れました... nForce SATA/RAIDコントローラー15.58にアップグレードしましたが、他のnForceドライバーはそのままにしておきました。

これで問題が解決し、ドライバーの競合もすべて解決しました。それもあなたに役立つことを願っています。

1
NorthAlabama