Uso di Windows Performance Toolkit (WPT) con WDF
A partire da Windows 10, puoi usare Windows Performance Toolkit (WPT) per visualizzare i dati sulle prestazioni per un determinato driver In modalità kernel (KMDF) o Driver Framework (UMDF) 2 in modalità utente.
Come possono essere utili le estensioni WDF (Windows Driver Framework) per WPT?
È possibile usare WPT per ottenere informazioni dettagliate sulle prestazioni o risolvere i problemi di prestazioni. Ad esempio:
- Esaminare la frequenza di completamento delle richieste di I/O WDF del driver, l'utilizzo della CPU e il tempo impiegato nei callback di alimentazione e PnP.
- Confrontare un driver UMDF 2 con un driver KMDF simile e determinare se UMDF soddisfa i requisiti di prestazioni.
- Identificare gli errori di prestazioni nel percorso di I/O di WDF.
- Determinare l'istanza di un callback specificato richiede molto tempo. Esaminare quindi l'utilizzo della CPU campionato per comprendere il motivo.
- Controllare se il dispositivo sta effettuando transizioni di alimentazione in e fuori dello stato di alimentazione D0 troppo frequentemente.
Introduzione
WPT fa parte di Windows Assessment and Deployment Kit (ADK). È possibile installare ADK da Scaricare e installare Windows ADK.
WPT è costituito da due strumenti separati: Windows Performance Recorder e Windows analizzatore prestazioni (WPA). In questo argomento si usa WPR per registrare una traccia e quindi WPA per visualizzare la traccia in un formato GUI configurabile.
Per informazioni su come usare Windows Performance Toolkit per misurare le prestazioni di un driver WDF, guardare il video seguente o leggere i passaggi seguenti. Il video e i passaggi illustrano la stessa procedura.
Registrazione e visualizzazione di un registro eventi per un driver WDF
Installare il driver, se non è già installato.
In un prompt dei comandi con privilegi elevati immettere il comando seguente.
<WdfPerfEnhancedVerifier.cmd ServiceName><UMDF o KMDF>
Nota WdfPerfEnhancedVerifier.cmd deve essere copiato dal percorso in cui hai installato WPT. Se WPT è stato installato in un computer di sviluppo, sarà necessario copiare lo script dalla directory di installazione WPT al computer di destinazione.
Questo script imposta le voci del Registro di sistema per il driver specificato in modo che il framework registri gli eventi necessari per abilitare l'analisi delle prestazioni quando il provider ETW è abilitato nel passaggio 4.
Riavviare il computer.
In un prompt dei comandi con privilegi elevati immettere il comando seguente.
Wpr.exe -Start WdfTraceLoggingProvider -filemode
Questo comando abilita il provider ETW per WDF. Il computer avvia la registrazione di una traccia.
Nota Come nel passaggio 2, Wpr.exe deve essere copiato dal percorso in cui è stato installato WPT. Se WPT è stato installato in un computer di sviluppo, copiare questi file dalla directory di installazione WPT al computer di destinazione.
In Windows 10 per le edizioni desktop (Home, Pro, Enterprise ed Education), puoi anche avviare la traccia con Wprui.exe, che fornisce un'interfaccia utente grafica per la registrazione delle tracce. In altre opzioni espandere Analisi risorse e selezionare Attività driver WDF.
Esercizio dello scenario di interesse.
Arrestare la sessione di traccia ETW: Wpr.exe -Stop MyPerfTrace.etl
Aprire il log di traccia eventi nel visualizzatore di Windows analizzatore prestazioni:
Wpa.exe MyPerfTrace.etl
Per acquisire un'altra traccia per lo stesso driver, usare Wpr.exe per avviare e arrestare una nuova traccia. Per acquisire una traccia per un driver diverso, eseguire prima di tutto WdfPerfEnhancedVerifier.cmd per il nuovo driver.
Analisi della traccia
Per iniziare ad analizzare le prestazioni del driver, individuare Graph Explorer a sinistra, aprire la categoria Calcolo e quindi trascinare il grafico UMDF o KMDF nell'area di lavoro principale, nella scheda Analisi . Questo screenshot mostra il riquadro Graph Explorer :
È disponibile una tabella dedicata per UMDF e un'altra per i driver KMDF.
Grafico richieste I/O di UMDF e tabella di riepilogo
WPT può visualizzare la velocità effettiva di completamento delle richieste di I/O WDF in due modi:
- Numero di richieste di I/O completate al secondo
- Durata di ogni richiesta di I/O (formattata come diagramma di Gantt)
Lo screenshot seguente mostra grafici e tabelle di riepilogo di esempio per le prestazioni delle richieste di I/O CPU e UMDF. Nel grafico Frequenza di completamento richieste I/O di UMDF il numero di richieste al secondo viene visualizzato sull'asse y.
Nella tabella di riepilogo la maggior parte delle colonne è autoesplicativa, ma ci sono due cose da notare. La colonna WdfDevice contiene l'handle WDFDEVICE associato alla richiesta di I/O. ActivityID contiene un identificatore univoco per la richiesta di I/O. Il framework crea questo identificatore quando invia una richiesta di I/O al driver. Se un identificatore di attività è già associato all'IRP corrispondente, il framework usa tale identificatore. Per altre informazioni, vedere Uso degli identificatori di attività.
L'ora di ingresso è il timestamp di traccia quando il framework ha recapitato la richiesta al driver e l'ora di uscita è il timestamp quando il driver ha chiamato WdfRequestComplete o un metodo correlato per completare la richiesta.
Grafico richieste I/O KMDF e tabella di riepilogo
Ecco uno screenshot simile che mostra le informazioni sulle richieste di I/O per un driver KMDF.
Grafico di callback power PnP e tabella di riepilogo
WPT può anche visualizzare il tempo di elaborazione di ogni callback di alimentazione e PnP. Lo screenshot seguente mostra la durata del callback EvtDeviceD0Entry, EvtDeviceD0Exit e EvtDevicePrepareHardware per un driver KMDF di esempio e un driver UMDF di esempio.
La colonna WdfDevice contiene l'handle WDFDEVICE associato al callback. ActivityID contiene un identificatore univoco per l'istanza di callback.
Quali chiamate vengono instrumentate?
In questa sezione vengono descritti gli eventi usati per compilare i grafici e le tabelle illustrati in precedenza.
Dopo aver eseguito WdfPerfEnhancedVerifier.cmd per un driver specifico, il framework registra gli eventi nel log di traccia ETL quando il sistema chiama alcuni dei callback del driver specificato e anche quando il driver specificato chiama alcuni metodi del framework.
Per determinare l'avvio delle richieste di I/O, il framework registra gli eventi quando chiama i callback seguenti:
Il framework registra anche gli eventi di avvio della richiesta di I/O quando il driver chiama i metodi seguenti:
Per determinare quando le richieste di I/O sono completate, il framework tiene traccia delle chiamate del driver:
Infine, per determinare la durata del callback per i callback PnP/Power, il framework registra quando chiama le routine di callback fornite dal driver seguenti e al termine:
Risorse e risoluzione dei problemi
Assicurarsi di riavviare dopo l'esecuzione dello script di WdfPerfEnhancedVerifier.cmd.
Per determinare se il driver è configurato per registrare un registro eventi, usare ! Comando del debugger del kernel WdfKd.wdfdriverinfo . Se il driver è configurato per la traccia delle prestazioni, verrà visualizzato un output simile al seguente:
!WdfKd.WdfDriverInfo Echo.sys … … ---------------------------------- WDF Verifier settings for echo.sys is ON Enhanced verifier: performance analysis hooking ON ----------------------------------
Solo a scopo di sviluppo e test, l'applicazione dei criteri di firma del codice driver può essere temporaneamente disabilitata. Per altre informazioni, vedere Installazione di un pacchetto driver non firmato durante lo sviluppo e il test.