
Gelegentlich stoße ich auf Server (Windows 2003 und 2008) mit hoher Prozessor-Interruptzeit. Gibt es eine Möglichkeit herauszufinden, welches Programm oder Gerät die Interrupts verursacht?
Antwort1
Nachdem ich die Dokumentation durchforstet hatte (basierend auf den anderen Antworten hier), habe ich letztendlich dieses Verfahren verwendet:
Erfassen Sie das ETW-Protokoll des Problems
Am einfachsten geht das mit demWindows-Leistungsaufzeichnung. Ich bin nicht sicher, wann es zum ersten Mal aufgetaucht ist, aber es scheint in neuere Windows-Versionen integriert zu sein. Stellen Sie das Profil auf ein
CPU usage
.oder navigieren Sie mithilfe einer Eingabeaufforderung mit erhöhten Rechten zu dem Ordner, der es enthält, und verwenden Sie das Befehlszeilentool xperf:
xperf -on base+interrupt+dpc
Beachten Sie, dass Sie Process Monitor oder eine andere App, die ETW verwendet, schließen müssen. Andernfalls wird die folgende Fehlermeldung angezeigt:
xperf: error: NT Kernel Logger: Cannot create a file when that file already exists. (0xb7).
Beenden Sie die Ablaufverfolgung / speichern Sie das Protokoll
xperf -d interrupt_trace.etl
Öffnen Sie die Ablaufverfolgung in
Windows Performance Analyzer
(Teil des Windows Performance Toolkit). An einigen Stellen wirdxperfview
stattdessen die Verwendung von empfohlen.Erweitern Sie
Computation
->CPU Usage (Sampled)
->DPC and ISR Usage by Module, Stack
, klicken Sie mit der rechten Maustaste undadd graph to analysis view
Dies wies direkt auf den betreffenden Treiber hin. In diesem Fall nutzt HDAudBus.sys konstant 10,82 % meiner CPU über Interrupts, was genau das ist, was mir Process Explorer angezeigt hat.
Antwort2
Wenn Sie mit Low-Level-Systemtools umgehen können;
Windows-Leistungsanalysator (WPA)
Windows Performance Analyzer (WPA) ist eine Reihe von Leistungsüberwachungstools, mit denen detaillierte Leistungsprofile von Microsoft Windows-Betriebssystemen und -Anwendungen erstellt werden.
Nachdem Sie gelernt haben, wie Sie xperf verwenden, schauen Sie sich Folgendes an:
Die DPC/ISR-Aktion erstellt einen Textbericht, der die verschiedenen Kennzahlen zu DPCs und ISRs zusammenfasst. Die Verwendung dieser Aktion ist wie folgt:
Code kopieren -a dpcisr [-dpc -isr -summary -interval [n] -bucket [n] -range T1 T2 ]
Möglichkeit
Beschreibung
dpc
Nur Statistiken für DPC anzeigen
isr
Nur Statistiken für ISR anzeigen
Zusammenfassung
Zusammenfassender Bericht anzeigen
Intervall [dt]
Nutzungsbericht für Intervalle von dt anzeigen, Standard ist 1 Sekunde
Eimer [dt]
Histogramm für Intervalle von dt anzeigen, Standard ist 2 Sekunden
Bereich T1 T2
Verzögerungen zwischen T1 und T2 anzeigen
If no data type is specified, default is to show report for both DPC
und ISR. Wenn kein Berichtstyp angegeben ist, werden standardmäßig alle drei Berichtsarten gedruckt.
Antwort3
Hier ist der beste Artikel, den ich dazu gefunden habe, mit Tutorials, Screenshots und Download-Links zu den entsprechenden Tools:
http://www.msfn.org/board/topic/140263-how-to-get-the-cause-of-high-cpu-usage-by-dpc-interrupt/
Antwort4
Zwei großartige Tools sindLatenzMonUndDPC-Latenzprüfer.