Hier ist die Geschichte, wie ich die Ursache meiner hohen DPC-Latenz gefunden habe.
Mein System hat während der Tonwiedergabe Klicks und Knicke erlebt. Ich wusste, dass dies bedeutete, dass etwas im Kernelmodus die CPU belastet. Mein erster Gedanke war, im Process Explorer herumzublättern und zu sehen, ob etwas nicht in Ordnung war. Das einzige, was meine Aufmerksamkeit auf sich zog, war eine übermäßig lange Zeit, die für die Durchführung von Aufforderungen zum verzögerten Verfahren (DPCs) aufgewendet wurde:
Ich wusste, dass DPCs Code sind, der in einem Treiber ausgeführt wird. Die Herausforderung bestand darin, den Fahrer herauszufinden . Ich wandte mich dem DPC Latency Checker zu, der mir zeigte, wie schlecht die Latenz war:
Der DPC Latency Checker empfiehlt, Geräte im Geräte-Manager durchzugehen und nicht unbedingt benötigte Hardware (z. B. Netzwerkkarte, Soundkarte) einzeln zu deaktivieren, um den fehlerhaften Treiber zu isolieren. (Wenn Sie ein Gerät deaktivieren und die DPC-Latenz plötzlich sinkt, haben Sie Ihren Täter gefunden!)
Leider nach alles, was ich zu deaktivieren könnte (während noch in der Lage zu verwenden den Computer - nicht deaktivieren Festplatte, Grafikkarte, Maus oder USB - Hub mit der Maus eingesteckt ist), war die Latenzzeit immer noch hoch. Als nächstes wandte ich mich dem Windows Performance Toolkit (Teil des Windows SDK ) und einem hervorragenden Blogbeitrag von Peter Weiland zu "Measuring DPC Time" an . Nach der Installation des Windows Performance Toolkit:
Ich öffnete eine Eingabeaufforderung mit erhöhten Rechten und lief:
>xperf -on Latency
Hinweis : Bei der
Latency
Gruppe handelt es sich um eine vordefinierte Gruppe von Ereignissen, die vom Kernel-Gruppenanbieter verfolgt werden kann:>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 ...
In diesem Fall
Latency
entspricht das den Kernel Flags:
- PROC_THREAD Prozess und Thread erstellen / löschen
- LOADER Kernel und Benutzermodus Image Load / Unload-Ereignisse
- PROFILE CPU Beispielprofil
- CSWITCH Context Switch
- DPC DPC-Ereignisse
- INTERRUPT Interrupt-Ereignisse
- DISK_IO Disk E / A
- HARD_FAULTS Harte Seitenfehler
Nachdem ich das eine Minute laufen ließ, stoppte ich die Ablaufverfolgung und ließ sie in einer Datei speichern:
C:\Users\Ian\Desktop\xperf -d thingy1.etl
Und dann habe ich mir die Ergebnisse des Trace mit dem Befehl angesehen:
C:\Users\Ian\Desktop\xperf thingy1.etl
Dadurch wird das grafische Windows Performance Analyzer geladen . Wenn Sie mit der rechten Maustaste auf die DPC-CPU-Verwendungskurve klicken, habe ich die Übersichtstabelle ausgewählt . Dies zeigt eine Aufteilung der Zeit in DPCs nach Treiber:
tsvp.sys
Sofort kann ich sehen, dass ein Treiber ( ) durchschnittlich 2,8 ms pro DPC-Ausführung benötigt, was eine Größenordnung langsamer ist als jeder andere Treiber:
Googeln tsvp.sys
gab mir die Antwort: CommView, das ich kürzlich installiert hatte.
Die Frage ist nun, wie Sie diesen Treiber deaktivieren können. Mit AutoRuns kann ich sehen, dass es als Treiberdienst installiert ist:
Mit dem Geräte-Manager kann ich den Dienst deaktivieren, der diesen Treiber hostet. Zuerst müssen Sie ausgeblendete Geräte anzeigen und dann den Non-Plug and Play Drivers
Knoten erweitern:
Schließlich konnte ich den Treiberdienst beenden und seinen Startmodus geändert haben System
(dh der Treiber ist ein wesentlicher Bestandteil von Windows, und Windows kann ohne ihn nicht booten), bis Demand
(das heißt, ich kann den Treiber starten, wenn ich möchte):
Durch das Stoppen des Treiberservice wurde meine DPC-Latenz sofort behoben:
Ich kann CommView möglicherweise nicht vollständig deinstallieren, aber jetzt habe ich den Fall der hohen DPC-Latenzzeit gelöst.
Update : Ab Windows 8 werden im Geräte-Manager keine Nicht-Plug & Play-Treiber mehr angezeigt :
Hinweis Ab Windows 8 und Windows Server 2012 erstellt der Plug-and-Play-Manager keine Gerätedaten mehr für Nicht-PnP-Geräte (Legacy-Geräte). Daher gibt es keine solchen Geräte, die im Geräte-Manager angezeigt werden können. Um ausgeblendete Geräte in die Geräte-Manager-Anzeige aufzunehmen, klicken Sie auf Anzeigen und wählen Sie Ausgeblendete Geräte anzeigen aus.
Microsoft hat die Funktion weggenommen und durch nichts ersetzt. Gut gemacht.
In der typischen Nerd-Wut einige nicht hilfreiche Antworten :
- Der Geräte-Manager hat nie andere PNP-Treiber angezeigt
- Warum brauchst du das?
Glücklicherweise hat NirSoft einen Ersatz geschaffen. Mit ServiWin können Sie alle Dienste anzeigen, stoppen und starten (auch die von Microsoft befugten Administratoren sollten sehen dürfen):