Seguimiento de pila
¿Cuáles son estas PTE del sistema?
Bob Golding and David Butler
Contenido
¿Qué son de las API del sistema utilizados para asignar estas direcciones?
Detener 3F PTE del control no se necesita siempre
Pilas de kernel
PTE del sistema, al igual que todos los PTE, representa direcciones en el espacio de direcciones del sistema. Lo estos PTE diferentes es que son un recurso del sistema. Sólo hay tantas por sistema. Estos PTE de sistema es "ranuras dinámicos" en el mapa de espacio de dirección del sistema, lo que significa que un intervalo de direcciones están reservado en el espacio de direcciones del sistema y se utilizan para asignar las páginas de demanda y asignar una dirección a un búfer o se utilizan para las pilas de subprocesos del sistema. El intervalo de direcciones reside entre bloque no paginado y del bloque paginado. A continuación se desde 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. |
+------------------------------------+
Por lo que dado que su tamaño es entre el grupo de bloques paginado y no paginado, ajustes en estos bloques de memoria necesario un efecto en el tamaño de la ventana de asignación. Además, dado que esto es parte del espacio de direcciones, factores que afectan al tamaño de los bloques de memoria (es decir, / 3 GB) afectan al tamaño de la ventana Asignación.
¿Qué son de las API del sistema utilizados para asignar estas direcciones?
Algunas API que se asignan estas direcciones es MiMapLockedPagesInUserSpace, MiUnmapLockedPagesInUserSpace, MmMapLockedPages y MmUnmapLockedPages. Estas API asignan un búfer en el intervalo de direcciones dinámicas. Asignará el búfer completo, por lo que el tamaño del búfer determina cuántas páginas contiguas obtener utiliza.
Como puede ver, hay un unmap API para cada mapa API. Esto es importante tener en cuenta. Los búferes deben ser sin asignar; de lo contrario, la ventana de asignación se cerrará. En otras palabras: no PTE del sistema más. Las páginas más que asignan el sistema más que obtener utiliza PTE. Como he mencionado antes, las pilas de sistema de utilizar este rango. Vídeo no así para asignar los búferes de vídeo. Por lo que hay debe ser suficiente restos asignar los búferes. Cuando obtiene bajo PTE del sistema, se producen los problemas de rendimiento. Además, puede producirse un 3F detener, pero estos debe excepcionales, como código de NT es más tolerantes a las condiciones bajo recursos.
Detener 3F PTE del control no se necesita siempre
Una falta de entradas PTE del sistema con frecuencia es troubleshot mediante TrackPtes para buscar el consumidor de un número elevado de las PTE. Sin embargo, en ocasiones, esto no es útil dado TrackPtes no se implementa el propio código sysptes.c. Por lo que es posible reservar PTE sin que se realiza un seguimiento. TrackPtes sólo se implementa mediante algunos de los llamadores de MiReserveSystemPtes.
Pilas de kernel
Un consumidor comunes de sysptes que no está registrado por TrackPtes es pilas del núcleo. Afortunadamente, el administrador de memoria ofrece nos varios globals, que proporcionan una perspectiva de la sysptes se utiliza para asignar las pilas de kernel.
En el ejemplo siguiente, el administrador de memoria sólo ha creado sysptes 23,000. Es un número relativamente pequeño, pero no es raro con / 3 GB. De estos sysptes 17,860 se se utilizan para asignar las pilas de kernel. Análisis de los procesos y subprocesos no encontró una pérdida aparente; arquitectura de aplicación del cliente requiere muchos subprocesos GDI. Después de analizar el uso de memoria del equipo, pudimos ajustar el administrador de memoria aumentar la PTE del sistema total y dejar suficiente espacio para los aspectos que debe ejecutar.
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
Bob Golding ha trabajado con Microsoft desde 1997. Él es ingeniero de asignación de responsabilidades jefe en el equipo escalado global Services donde él es compatible con los clientes más grandes de Microsoft con los problemas más importantes.
David Butler ha trabajado con Microsoft desde 2000. Es un ingeniero de asignación de responsabilidades del equipo de servicios de asignación de responsabilidades global donde admite los clientes más grandes de Microsoft con los problemas más importantes.