La respuesta rápida: Dar de rutina con menos trabajo que hacer. Que yo creo que significa utilizar menos espacio de direcciones virtuales a la vez, o agregar más memoria RAM.
Detalles: en Primer lugar, la rutina que estamos viendo, MiWalkPageTablesRecursively
, poco tiene que ver con el archivo de página directamente, sino más bien con la página de las tablas. La página de las tablas son estructuras en memoria (y están presentes en todos los sistemas Windows, independientemente de archivo de paginación de configuración). Cada proceso tiene un conjunto de tablas de la página, y hay un conjunto para el sistema operativo del espacio de direcciones ("el espacio del kernel").
La página de las tablas se componen de entradas de tabla de página; hay un PTE de página para cada página - 4K - en el proceso definido del espacio de direcciones virtuales. Por "definido", quiero decir que se incluye el proceso asignado y privados comprometidos espacio de direcciones, y el TEMOR regiones, si los hubiere; no incluye la reserva o el libre espacio de direcciones - regiones que se iba a producir una infracción de acceso si se trató de leer o escribir en ellos.
(Por cierto: No sólo usted todavía tiene tablas de la página, incluso si usted no tiene un archivo de paginación. Usted también todavía tiene paginación, y los fallos de página desde el disco, incluso si usted no tiene un archivo de paginación.)
El problema aquí es probable que no es inherente a MiWalkPageTablesRecursively
. Después de todo esta función (o un equivalente con otro nombre) ha sido parte de Windows desde NT 3.1. Es en el hecho de que es tener que hacer un montón de trabajo. Esto probablemente significa que es invocada a menudo.
Una pista de por qué este es el caso que se ve en las rutinas anteriores en la pila. (Es decir, más cerca de la parte superior de la WPA de la visualización). Parece que el autor de la llamada de MiWalkPageTablesRecursively
en este escenario es
MiWalkPageTables
, que a su vez es llamado por
MiAgeWorkingSet
, que a su vez es llamado por
MiTrimOrAgeWorkingSet
, que a su vez es llamado por
MiProcessWorkingSets
, que a su vez es llamado por ... que tan lejos como tenemos que ir.
Cada proceso en un sistema Windows dispone de una estructura llamada un "conjunto de trabajo de la lista". Esta es una lista de todos los números de las páginas físicas que han sido fallados en la memoria RAM como el resultado de un proceso de fallos de página. El hilo (el "Saldo de Administrador de Conjunto de la" rosca) se despierta una vez cada segundo para hacer la limpieza y mantenimiento en cada proceso de trabajo conjunto. Por lo MiProcessWorkingSets
itera a través de los procesos, trato con cada uno de los procesos de trabajo en turno.
Para cada proceso en el sistema, MiProcessWorkingSets
llamadas MiTrimOrAgeWorkingSet
. Esta rutina de nombre se refiere a "recortar" un conjunto de trabajo (lo que significa que la identificación de largo desuso páginas y desalojarlos de el proceso para hacer espacio en la memoria RAM para otras cosas), o "envejecimiento" el conjunto de trabajo, lo que significa que el incremento de la "edad" del contador en cada conjunto de trabajo de entrada de la lista que no ha sido consultado desde la última vez que se ha analizado, o poner a cero el contador si lo ha sido. (El nombre se refiere al "envejecimiento" de la tarea que se realiza en la contabilidad, por lo general cada mes o cada día). La "edad" contador es utilizada por el "recorte" de la función de identidad de la mayoría en desuso páginas.
El hecho de que MiTrimOrAgeWorkingSet
termina en MiWalkPageTablesRecursively
, podemos inferir que se están explorando el espacio de direcciones virtuales como se define por las tablas de la página para encontrar las páginas que están en el conjunto de trabajo. Ahora considere esto: El tiempo que necesite MiTrimOrAgeWorkingSet
a controlar cada proceso será aproximadamente proporcional al tamaño de la proceso del espacio de direcciones virtuales. Y el tiempo total necesario para cada paso a través de la MiProcessWorkingSets
será aproximadamente proporcional al número de procesos.
Esta cosa es tratar con un gran número de páginas en un proceso conjunto de trabajo, o de lo contrario es tener que lidiar con una gran cantidad de procesos.
Y... ¿por qué sería tan ocupado? No se "recorte" de los conjuntos de trabajo, hasta que haya sido envejecido, y la cantidad por la que se "recorta" los conjuntos de trabajo depende de la memoria RAM de la presión, es decir, cómo de corto está en la memoria RAM.
Es el sistema a corto en RAM? Por favor enviar fotos de Rendimiento del Administrador de Tareas de la pestaña de la página de Memoria, además de la página de Detalles ordenados por el conjunto de Trabajo de la columna; además de que el Monitor de Recursos de Memoria de la ficha, ordenados por el Duro Fallos de la columna; y RAMmap del Uso de la Cuenta de la página.
También, por favor, puesto que más de la WPA de seguimiento tiene, mostrando más "profundidad" de las llamadas. O el post .archivo etl en un servicio de uso compartido en algún lugar y un enlace a ella aquí. (Zip primera comprimen muy bien.)
Por qué rutina de los nombres no coinciden entre WPA y Process Explorer
Como para los nombres de rutina, hay dos razones de la discrepancia. La primera es que parece que no tiene símbolos configurado correctamente para el Proceso Explorer. La configuración para Windows Analizador de Rendimiento no es suficiente.
Un signo seguro de que usted no tiene este derecho es que todos o casi todos los hilos en el "Sistema" de la demostración del proceso con el nombre de un módulo (something.sys o something.exe, generalmente ntoskrnl.exe), seguido por un desplazamiento, tales como +0x245
- como en su tapa de pantalla.
Para solucionar este problema, consulte esta página de el Rendimiento de Windows Análisis de la Guía de Campo. Usted necesita para establecer el Proceso de Explorer a la ruta de búsqueda de símbolos - se puede utilizar el mismo símbolo de la ruta de acceso del archivo que se haya establecido para WPA - y usted necesita a punto de ProcExp en una DLL que viene con las Herramientas de Depuración de Windows. Así que usted tendrá que tener las Herramientas de Depuración instalados - no se de que estás usando el depurador directamente, pero el Proceso de Explorer necesita que el archivo DLL.
La segunda razón de la discrepancia es que, incluso después de tener el símbolo de archivos configurados correctamente para el Proceso de Explorador, los nombres de rutina muestra no suelen coincidir con los nombres de su interior, una rutina de nivel identificado por el Analizador de Rendimiento. Usted debe encontrar un partido, a pesar de que, en nombre de la rutina cerca del principio de la pila (que aparece en la parte superior de la rutina llamada árbol, como se muestra en WPA).
Por ejemplo - en el caso de que la primera rutina de interés es KeBalanceSetManager
. (Los dos antes de que son los mismos para cada subproceso en el proceso del sistema, pero KeBalanceSetManager
es la rutina que el "nivel superior" de rutina para este hilo.) Una vez que haya símbolos configurado correctamente, el Proceso de Explorador debe mostrar un hilo con que como la "Dirección de Inicio", como se muestra aquí:
![here]()
Process Explorer no puede mostrar MiWalkPageTablesRecursively
debido a que es de alrededor de seis llamadas en la pila de lo que se registra como el hilo de la Dirección de Inicio, y ni siquiera es la corriente más profundo de rutina (es decir, no en la parte superior de la pila). Dicha información (incluso si están fácilmente disponibles, que no lo es) iba a cambiar demasiado rápidamente para ser útil en un Proceso de presentación del Explorador, así que no intente.
Nota: Incluso con símbolos correctos, no es raro encontrar algunos de los subprocesos en el proceso del sistema, mostrando la "Dirección de Inicio" de, por ejemplo, GemCCID.sys+0xd138
, como verás en mi ejemplo. El módulo en cuestión (GemCCID.sys) evidentemente no es uno para el que Microsoft proporciona los archivos de símbolos, por lo que el Proceso de Explorer sólo tiene que decir "el hilo de la dirección de inicio es en 0xd138 bytes desde el inicio del código en este archivo, y eso es todo lo que sé acerca de él."
Espero que esto ayude! Por favor, hágamelo saber si usted tiene más preguntas.