Esercizio 3 - Tenere traccia del footprint dei driver e allocazioni dinamiche durante l'avvio
Il pool è la risorsa di memoria per i componenti in modalità kernel usati dal sistema operativo e dai driver di dispositivo per archiviare le relative strutture di dati. Il pool ha quattro aree di allocazione di base:
Pool non di paging: Le allocazioni hanno la garanzia di risiedere nella memoria fisica.
Pool di paging: Allocazioni di cui è possibile eseguire il paging nella memoria nel file di pagina.
Pool non pageable NX: Allocazioni non di paging, che non sono eseguibili.
Pool di sessioni: Allocazioni effettuate per sessione. Sono disponibili per la pagina.
L'utilizzo del pool è un collaboratore significativo all'utilizzo complessivo della memoria in un computer, ovvero il consumer di memoria più grande immediatamente dopo l'avvio. Qualsiasi riduzione dell'utilizzo del pool riduce l'utilizzo complessivo della memoria del sistema nel sistema operativo, con memoria non di paging che rappresenta la categoria con priorità più alta per ridurre le prestazioni (per).
In questo esercizio verranno esaminate le allocazioni dei driver Microsoft nella posta in arrivo e il relativo footprint (al momento dell'inizializzazione) durante l'avvio.
Passaggio 1: Raccogliere una traccia di memoria del pool in una transizione di avvio
In questo passaggio si raccoglierà una traccia di avvio usando Windows Performance Recorder (WPR) che contiene i dati del pool e del set residente.
Aprire WPR dal menu Start
Selezionare i provider di eventi corretti:
Utilizzo del pool
Set residente
Valutazione di primo livello
Selezionare Boot come scenario di prestazioni.
Selezionare File come modalità di registrazione.
Impostare 1 come Numero di iterazioni.
Fare clic su Start e quindi selezionare un percorso per salvare il file ETL.
Il sistema viene riavviato automaticamente, raccoglie una traccia e si arresta dopo che il desktop diventa visibile.
Passaggio 2: Esaminare i dati del pool con WPA
I dati del pool vengono esposti tramite la tabella di riepilogo di Pool Graph in WPA. Nella tabella seguente sono riportate le colonne chiave di interesse.
È possibile aggiungere o rimuovere colonne facendo clic con il pulsante destro del mouse sulle intestazioni di colonna.
Terminologia | Descrizione |
---|---|
Pool Tag | Tag associato a un'allocazione del pool. |
Modulo tag pool | Modulo (driver) associato a un tag del pool. |
Stack | Mostra il percorso del codice in un thread che conduce a un'allocazione di memoria. |
Paging | Indica se le allocazioni sono state inserite in un pool di paging o in un pool non di paging. |
Tipo di impatto | Indica se un'allocazione contribuisce all'utilizzo della memoria a stato stabile o è un'allocazione temporanea. |
Aprire la traccia acquisita nel passaggio 1 con WPA.
Aprire il menu Traccia e selezionare Configura percorso simboli.
- Specificare il percorso della cache dei simboli. Per altre informazioni sui simboli, vedere la pagina Supporto simboli su MSDN.
Aprire il menu Traccia e selezionare Carica simboli.
Trovare il grafico Pool nella categoria Memoria di Graph Explorer
Trascinare e rilasciare il grafico Pool nella scheda Analisi .
Organizzare la tabella per visualizzare le colonne seguenti:
Modulo tag pool
Paging
Tipo di impatto
Tra elementi sovrapposti
Tag del pool
Numero
Impatto su dimensioni e dimensioni
**Nota sui tag del pool: **
Se si è uno sviluppatore di driver, assicurarsi che i tag del pool usati dal driver siano chiari e facilmente identificabili per facilitare l'analisi. Ad esempio, se il nome della società è Fabrikam, è possibile aggiungere un prefisso "Fbk" a tutti i tag del pool: FbkPool1, FbkPool2, FbkBuffer e così via.
Disabilitare tutte le serie nel grafico (fare clic con il pulsante destro del mouse su ->Disable ->In Entire Graph ->All Series)
Ordinare in base alle dimensioni, facendo clic sull'intestazione di colonna Impatto dimensioni .
I driver con l'utilizzo della memoria a stato stabile più elevato vengono visualizzati nella parte superiore.
Passaggio 3: Intercettare i dati di allocazione del pool
Ingrandire i primi 30 secondi della sequenza temporale.
Selezionare un driver (ad esempio, ACPI.sys, ma qualsiasi operazione).
Esaminare la memoria NonPaged ed espandere la riga.
La memoria nonPaged deve essere l'obiettivo delle indagini perché non può essere spostata nel file di paging quando si verifica un utilizzo elevato della memoria nel sistema.
Abilitare la legenda per le categorie impatto e temporanee.
Ordinare in base all'impatto sulle dimensioni facendo clic sull'intestazione di colonna.
L'impatto diretto della memoria contribuisce al footprint di memoria complessivo del driver in qualsiasi momento. Nell'esempio precedente è possibile indicare che ACPI.sys usa sempre una memoria non di paging e che questo utilizzo dello stato costante aumenta due volte (prima quando il driver viene caricato, quindi una seconda volta in circa 3 secondi).
Espandere lo stack e spostarsi all'interno. Nella parte superiore dovrebbero essere visualizzate chiamate di funzione che portano alle allocazioni di pool di stati stabili più grandi.
Nell'esempio seguente è possibile notare che ACPI.sys effettua un totale di 255 allocazioni di pool, totali di 1,2 MB nella funzione ACPIInitStartACPI . Questo è il punto in cui lo sviluppatore del driver deve concentrarsi per migliorare l'utilizzo della memoria dello stato stabile del driver, in quanto questa funzione rappresenta la maggior parte delle allocazioni dei driver.
Ordinare in base alle dimensioni facendo clic sull'intestazione di colonna.
Eseguire la stessa operazione per la categoria Temporanea . Espandere lo stack e spostarsi all'interno. Nella parte superiore dovrebbero essere visualizzate le chiamate di funzione che portano alle allocazioni di pool temporanei più grandi.
Nell'esempio seguente è possibile osservare il picco iniziale dell'utilizzo temporaneo della memoria causato principalmente dall'acpi che esegue i CONTROLLER di dominio dei dispositivi (ACPI.sys! ACPIBuildDeviceDpc). Il picco che ha introdotto il codice in questa funzione chiama il totale di 455 KB.
Passaggio 4: Misurare il footprint del codice del driver
Trovare il grafico Del set residente nella categoria Memoria di Graph Explorer.
Trascinare e rilasciare il grafico Resident Set nella scheda Analisi.
Assicurarsi di annullare lozoom del grafico (CTRL+MAIUSC+"-").
Selezionare il set di impostazioni Grafico pagina supportata da file .
Tramite la colonna albero del percorso passare al driver selezionato nel passaggio 3 (ad esempio, ACPI.sys in C:/Windows/drivers).
Espandere la categoria Driver e concentrarsi sulle pagine Attive .
Il valore nella colonna Dimensioni rappresenta l'impatto del codice driver sul footprint di memoria. Nell'esempio seguente è 0,48 MB.