Verwenden des Windows Performance Toolkit (WPT) mit WDF
Ab Windows 10 können Sie das Windows Performance Toolkit (WPT) verwenden, um Leistungsdaten für einen bestimmten Kernelmodus-Treiberframework (KERNEL-Mode Driver Framework, KMDF) oder einen UMDF-Treibertreiber (User Mode Driver Framework) anzuzeigen.
Wie können die WDF-Erweiterungen (Windows Driver Frameworks) für WPT hilfen?
Sie können WPT verwenden, um Leistungseinblicke zu erhalten oder Leistungsprobleme zu beheben. Zum Beispiel:
- Untersuchen Sie die WDF-E/A-Anforderungsabschlussrate, die CPU-Auslastung und die in PnP- und Stromrückrufen aufgewendete Zeit.
- Vergleichen Sie einen UMDF 2-Treiber mit einem ähnlichen KMDF-Treiber, und ermitteln Sie, ob UMDF Ihre Leistungsanforderungen erfüllt.
- Identifizieren sie Leistungsstörungen im WDF-E/A-Pfad.
- Ermitteln Sie, welche Instanz eines bestimmten Rückrufs eine lange Zeit in Anspruch nimmt. Untersuchen Sie dann die stichprobenierte CPU-Auslastung, um zu verstehen, warum.
- Überprüfen Sie, ob das Gerät stromübergänge in und aus dem D0-Stromzustand zu häufig macht.
Erste Schritte
Das WPT ist Teil des Windows Assessment and Deployment Kit (ADK). Sie können das ADK über "Herunterladen" installieren und windows ADK installieren.
Die WPT besteht aus zwei separaten Tools: Windows Performance Recorder und Windows Leistungsanalyse (WPA). In diesem Thema verwenden wir WPR, um eine Ablaufverfolgung aufzuzeichnen, und dann WPA, um die Ablaufverfolgung in einem konfigurierbaren GUI-Format anzuzeigen.
Wenn Sie erfahren möchten, wie Sie das Windows Performance Toolkit verwenden, um die Leistung eines WDF-Treibers zu messen, schauen Sie sich entweder das folgende Video an, oder lesen Sie die Schritte unter dem Video. Das Video und die Schritte decken dasselbe Verfahren ab.
Aufzeichnen und Anzeigen eines Ereignisprotokolls für einen WDF-Treiber
Installieren Sie Ihren Treiber, falls er noch nicht installiert ist.
Geben Sie an einer Eingabeaufforderung mit erhöhten Rechten den folgenden Befehl ein.
<WdfPerfEnhancedVerifier.cmd ServiceName><UMDF oder KMDF>
Beachten Sie WdfPerfEnhancedVerifier.cmd von dem Speicherort kopiert werden sollte, an dem Sie WPT installiert haben. Wenn Sie WPT auf einem Entwicklungscomputer installiert haben, müssen Sie das Skript aus dem WPT-Installationsverzeichnis auf den Zielcomputer kopieren.
Dieses Skript legt Registrierungseinträge für den angegebenen Treiber fest, sodass das Framework die ereignisse protokolliert, die zum Aktivieren der Leistungsanalyse erforderlich sind, wenn der ETW-Anbieter in Schritt 4 aktiviert ist.
Starten Sie den Computer neu.
Geben Sie an einer Eingabeaufforderung mit erhöhten Rechten den folgenden Befehl ein.
Wpr.exe -Start WdfTraceLoggingProvider -filemode
Mit diesem Befehl wird der ETW-Anbieter für WDF aktiviert. Der Computer startet die Aufzeichnung einer Ablaufverfolgung.
Hinweis Wie in Schritt 2 sollte Wpr.exe von dem Speicherort kopiert werden, an dem Sie WPT installiert haben. Wenn Sie WPT auf einem Entwicklungscomputer installiert haben, kopieren Sie diese Dateien aus dem WPT-Installationsverzeichnis auf den Zielcomputer.
Unter Windows 10 für Desktopeditionen (Home, Pro, Enterprise und Education) können Sie die Ablaufverfolgung auch mit Wprui.exe starten, die eine GUI zum Aufzeichnen von Ablaufverfolgungen bereitstellt. Erweitern Sie unter "Weitere Optionen" die Ressourcenanalyse, und wählen Sie "WDF-Treiberaktivität" aus.
Üben Sie Ihr Interessenszenario aus.
Beenden der ETW-Ablaufverfolgungssitzung: Wpr.exe -Stop MyPerfTrace.etl
Öffnen Sie das Ereignisablaufverfolgungsprotokoll im Windows Leistungsanalyse Viewer:
Wpa.exe MyPerfTrace.etl
Um eine weitere Ablaufverfolgung für denselben Treiber zu erfassen, verwenden Sie Wpr.exe, um eine neue Ablaufverfolgung zu starten und zu beenden. Um eine Ablaufverfolgung für einen anderen Treiber zu erfassen, führen Sie zuerst WdfPerfEnhancedVerifier.cmd für den neuen Treiber erneut aus.
Analysieren der Ablaufverfolgung
Um mit der Analyse der Leistung des Treibers zu beginnen, suchen Sie den Graph-Explorer auf der linken Seite, öffnen Sie die Berechnungskategorie , und ziehen Sie dann das UMDF- oder KMDF-Diagramm in den Hauptarbeitsbereich unter der Registerkarte "Analyse ". Dieser Screenshot zeigt den Graph-Explorer-Bereich :
Es gibt eine dedizierte Tabelle für UMDF und eine weitere für KMDF-Treiber.
UMDF-E/A-Anforderungsdiagramm und Zusammenfassungstabelle
WPT kann den WDF-E/A-Anforderungsabschlussdurchsatz auf zwei Arten anzeigen:
- Anzahl der E/A-Anforderungen, die pro Sekunde abgeschlossen werden
- Zeitdauer jeder E/A-Anforderung (als Gantt-Diagramm formatiert)
Der folgende Screenshot zeigt Beispielzusammenfassungsdiagramme und Tabellen für cpu- und UMDF-E/A-Anforderungsleistung. Im Diagramm "UMDF-E/A-Anforderungsabschlussrate" wird die Anzahl der Anforderungen pro Sekunde auf der Y-Achse angezeigt.
In der Zusammenfassungstabelle sind die meisten Spalten selbsterklärend, aber es gibt ein paar Dinge zu beachten. Die Spalte "WdfDevice" enthält das WDFDEVICE-Handle, das der E/A-Anforderung zugeordnet ist. Die ActivityID enthält einen eindeutigen Bezeichner für die E/A-Anforderung. Das Framework erstellt diesen Bezeichner, wenn er eine E/A-Anforderung an den Treiber übermittelt. Wenn bereits ein Aktivitätsbezeichner dem entsprechenden IRP zugeordnet ist, verwendet das Framework diesen Bezeichner. Weitere Informationen finden Sie unter Verwenden von Aktivitäts-IDs.
Die Eingabezeit ist der Zeitstempel der Ablaufverfolgung, wenn das Framework die Anforderung an den Treiber übermittelt hat, und die Ausgangszeit ist der Zeitstempel, wenn der Treiber WdfRequestComplete oder eine zugehörige Methode zum Abschließen der Anforderung aufgerufen hat.
KMDF-E/A-Anforderungsdiagramm und Zusammenfassungstabelle
Hier ist ein ähnlicher Screenshot mit E/A-Anforderungsinformationen für einen KMDF-Treiber.
PnP Power-Rückrufdiagramm und Zusammenfassungstabelle
WPT kann auch die Verarbeitungszeit der einzelnen PnP- und Stromrückrufe anzeigen. Der folgende Screenshot zeigt evtDeviceD0Entry, EvtDeviceD0Exit und EvtDevicePrepareHardware callback duration for a sample KMDF driver and a sample UMDF driver.
Die Spalte "WdfDevice" enthält das dem Rückruf zugeordnete WDFDEVICE-Handle. Die ActivityID enthält einen eindeutigen Bezeichner für die Rückrufinstanz.
Welche Anrufe sind instrumentiert?
In diesem Abschnitt wird beschrieben, welche Ereignisse zum Erstellen von Diagrammen und Tabellen verwendet werden, die oben gezeigt werden.
Nachdem Sie WdfPerfEnhancedVerifier.cmd für einen bestimmten Treiber ausgeführt haben, zeichnet das Framework Ereignisse im ETL-Ablaufverfolgungsprotokoll auf, wenn das System einige der Rückrufe des angegebenen Treibers aufruft, und auch wenn der angegebene Treiber einige Frameworkmethoden aufruft.
Um zu bestimmen, wann E/A-Anforderungen gestartet werden, zeichnet das Framework Ereignisse auf, wenn er die folgenden Rückrufe aufruft:
Das Framework zeichnet auch Startereignisse für E/A-Anforderungen auf, wenn der Treiber die folgenden Methoden aufruft:
Um zu bestimmen, wann E/A-Anforderungen abgeschlossen sind, verfolgt das Framework nach, wann der Treiber aufruft:
Um schließlich die Rückrufdauer für PnP/Power-Rückrufe zu ermitteln, zeichnet das Framework auf, wenn er die folgenden vom Treiber bereitgestellten Rückrufroutinen aufruft und wann sie abgeschlossen sind:
Ressourcen und Problembehandlung
Starten Sie unbedingt neu, nachdem Sie das skript WdfPerfEnhancedVerifier.cmd ausgeführt haben.
Um festzustellen, ob Ihr Treiber zum Aufzeichnen eines Ereignisprotokolls konfiguriert ist, verwenden Sie die ! WdfKd.wdfdriverinfo-Kerneldebuggerbefehl . Wenn der Treiber für die Leistungsablaufverfolgung konfiguriert ist, wird die Ausgabe wie folgt angezeigt:
!WdfKd.WdfDriverInfo Echo.sys … … ---------------------------------- WDF Verifier settings for echo.sys is ON Enhanced verifier: performance analysis hooking ON ----------------------------------
Nur zu Entwicklungs- und Testzwecken kann die Durchsetzung der Treibercodesignaturrichtlinie vorübergehend deaktiviert werden. Weitere Informationen finden Sie unter Installieren eines nicht signierten Treiberpakets während der Entwicklung und beim Testen.