Il presente articolo è stato tradotto automaticamente.
Analisi dello stack
Che cosa sono I PTEs sistema?
Contenuto
Che cosa sistema API vengono utilizzati per eseguire il mapping questi indirizzi?
Interrompi 3F PTEs traccia non sono sempre necessari.
Stack del kernel
PTEs di sistema, come tutti PTEs rappresentano gli indirizzi nello spazio degli indirizzi sistema. Ciò che rende queste PTEs diversi è che si tratta di una risorsa di sistema. Sono disponibili solo pertanto molti al sistema. Questi PTEs sistema sono slot dinamico nella mappa dello spazio indirizzo sistema, che significa che un intervallo di indirizzi vengono riservato nello spazio degli indirizzi sistema e vengono utilizzate per associare pagine di richiesta e assegnare un indirizzo in un buffer, oppure vengono utilizzati per gli stack di thread del sistema. L'intervallo di indirizzi si trova tra pool non di paging e pool di paging. Di seguito è riportato da mi386.h.
E1000000 | Start of paged system area |
| Kernel mode access only. |
| |
| |
+------------------------------------+
| |
| System PTE area - for mapping |
| kernel thread stacks and MDLs |
| that require system VAs. |<----- Range reserved for dynamic mapping.
| Kernel mode access only. |
| |
+------------------------------------+
| |
| NonPaged System area |
| Kernel mode access only. |
| |
+------------------------------------+
FFBE0000 | Crash Dump Driver area |
| Kernel mode access only. |
+------------------------------------+
Pertanto poiché la dimensione è tra i pool di paging e, le rettifiche questi pool di memoria necessario un effetto alle dimensioni della finestra di mapping. Ha effetto, inoltre, poiché questo fa parte dello spazio degli indirizzi, fattori che influenzano le dimensioni del pool di memoria (ovvero / 3 GB) sulle dimensioni della finestra di mapping.
Che cosa sistema API vengono utilizzati per eseguire il mapping questi indirizzi?
Alcune API che eseguono il mapping questi indirizzi sono MiMapLockedPagesInUserSpace, MiUnmapLockedPagesInUserSpace, MmMapLockedPages e MmUnmapLockedPages. Queste API mappare un buffer nell'intervallo dinamica degli indirizzi. Si eseguirà il mapping l'intero buffer, in modo che la dimensione di buffer determina quante pagine contigue abituati.
Come si può vedere, è UN'API unmap per ogni mapping API. Questo è importante tenere presente. Buffer devono essere non mappati; in caso contrario, chiudere la finestra di mapping. In altre parole: nessun sistema più PTEs. Le pagine più ottenere mappato il sistema di più che PTEs ottenere utilizzato. Come menzionato prima, stack sistema utilizzare questo intervallo. Video non nonché per mappare i buffer video. Pertanto sono deve essere sufficiente rimasti per eseguire il mapping di buffer. Quando il sistema PTEs ottenere basso, si verificherà problemi di prestazioni. Inoltre, può verificarsi un 3F interruzione ma questi dovrebbe essere rari, come codice di Windows NT è più a tolleranza numero insufficiente di risorse.
Interrompi 3F PTEs traccia non sono sempre necessari.
Mancanza di sistema PTEs è generalmente troubleshot utilizzando TrackPtes per trovare il consumer di un numero elevato del PTEs. Tuttavia, a volte non utile poiché TrackPtes non è implementata dal codice sysptes.c stesso. Pertanto, è possibile impegnare PTEs senza viene tenuta traccia. TrackPtes solo viene implementata da parte di chiamanti in posizione di MiReserveSystemPtes.
Stack del kernel
Un consumer comuni di sysptes che non tiene traccia TrackPtes è stack del kernel. Fortunatamente, il gestore di memoria offre ci globals diverse, che forniscono una conoscenza approfondita sysptes utilizzato per eseguire il mapping degli stack del kernel.
Nell'esempio riportato di seguito, il gestore di memoria è solo creato sysptes 23,000. Un numero piuttosto ridotto, ma non è insolito con / 3 GB. Di questi sysptes 17,860 vengono utilizzate per mappare stack del kernel. Analisi dei processi e thread non ha individuato un problema apparente, architettura dell'applicazione del cliente richiesto molti thread GDI. Dopo l'analisi di utilizzo della memoria del computer, è stato possibile ottimizzare il gestore di memoria per aumentare il sistema totale PTEs e rendere disponibile spazio sufficiente per operazioni di esecuzione.
1: kd> !sysptes
System PTE Information
Total System Ptes 23006
1: kd> dc nt!MmKernelStackPages l 1
80483680 000045c4 .E..
1: kd> ?45c4
Evaluate expression: 17860 = 000045c4
1: kd> dc MmLargeStacks l 1
8048368c 0000037b
1: kd> dc MmSmallStacks l 1
8048367c 00000385
1: kd> ?37b*f
Evaluate expression: 13365 = 00003435
1: kd> ?385*3
Evaluate expression: 2703 = 00000a8f
1: kd> ?3435+a8f+37b+385
Evaluate expression: 17860 = 000045c4
Golding Roberto è stato con Microsoft dal 1997. Ha è di un ruolo di senior Escalation Engineer nel team di servizi di escalation globale in cui ha supporta più grandi clienti Microsoft con i problemi più importanti.
Butler David ha lavorato per Microsoft da 2000. Egli è un Escalation Engineer nel team di servizi di escalation globale in cui ha supporta più grandi clienti Microsoft con i problemi più importanti.