Mi PC con Windows 7 de 64 bits es muy lenta. Noté en el Administrador de tareas que mi uso de memoria está cerca del 100%, sin embargo, el uso informado para cada proceso no se suma al total de 6 GB (Firefox muestra aproximadamente 500 MB, el resto mucho menos). Descargué RAMMap y descubrí que la tabla de páginas está ocupando una cantidad considerable de memoria (2.5GB).
Busqué en Google esto y no llegué a ninguna parte, aparentemente la tabla de páginas puede fragmentarse. Obviamente reiniciaré la máquina y veré si eso ayuda. ¿Pero hay una mejor manera de solucionarlo?
EDITAR: reiniciado, y la tabla de páginas se ha reducido a 30 MB.
EDIT 2: después de unos días de tiempo de actividad, el uso de la tabla de páginas está aumentando nuevamente. Seguí las instrucciones de @ magicandre1981 en esta respuesta para encontrar la fuente del uso de la tabla de páginas. Desafortunadamente, dibujé un espacio en blanco: la tabla de páginas es utilizada por "Desconocido".
¿Alguien tiene alguna idea brillante?
Respuestas:
Necesito comentar los comentarios a la pregunta, particularmente la confusión entre "tabla de páginas" y "archivo de páginas". Esta no es una respuesta, pero no cabe en el espacio permitido para comentarios.
La "tabla de páginas" es, de hecho, algo muy diferente del archivo de páginas. Tener n MB de RAM utilizados para las tablas de páginas no significa que esté utilizando n MB de espacio de archivos de páginas. Y aunque algunas entradas de la tabla de páginas (PTE, que son en qué consisten las tablas de páginas) se refieren al contenido del archivo de páginas, no todas lo hacen.
Las tablas de páginas son estructuras en memoria que utiliza la MMU de la CPU para realizar la traducción de direcciones de direcciones virtuales (nuevamente, no el archivo de páginas) a direcciones físicas, y por el sistema operativo para realizar un seguimiento del espacio de direcciones virtuales y ayudar a resolver fallas de página. Las tablas de páginas consisten en entradas de tablas de páginas (PTE). Cada PTE ocupa 8 bytes y define 4K bytes de espacio de direcciones virtuales, es decir, una página virtual. Hay, aproximadamente, un PTE por cada página no libre de espacio de direcciones virtuales.
Por cierto, aunque el archivo de paginación puede experimentar fragmentación tanto externa como interna (el primero no suele ser un gran problema; el segundo puede mejorarse haciéndolo aproximadamente cuatro veces más grande de lo necesario), las tablas de páginas no pueden. Ya están fragmentados, y no importa en lo más mínimo.
Cada PTE tiene un bit "válido". Para las páginas "válidas", también conocidas como "residentes", el PTE contiene el número de página física que corresponde al número de página virtual asociado con el PTE; esto es utilizado directamente por la MMU.
Para las páginas "no válidas", la MMU genera un error de página y el PTE tiene muchos formatos e interpretaciones posibles.
Nota: Todo lo anterior se aplica a cualquier sistema operativo que permita la paginación en x86 / x64. Lo siguiente es en gran parte específico de Windows, pero muchos de los conceptos se aplican a otros sistemas operativos, con diferencias en los detalles de implementación.
Para una página en el caché de la página, el PTE todavía contiene el número de página física. Para las páginas que se han perdido de la RAM y se han escrito en el archivo de página, el PTE contiene el número de archivo de página y el desplazamiento dentro del archivo de página donde se escribió el contenido de la página. Otros posibles contenidos de PTE son referencias a descriptores de direcciones virtuales , referencias a "PTE prototipo", referencias a demanda de cero páginas, etc., en las que no voy a entrar. Baste decir que solo algunos de los PTE se refieren a ubicaciones en archivos de paginación.
Menciono todo esto principalmente para mostrar que el archivo de página y las tablas de páginas, aunque están relacionadas, definitivamente no son lo mismo.
Las tablas de páginas están organizadas en una estructura de árbol. Hay un árbol diferente, o una colección de tablas de páginas, para cada proceso; esto es lo que permite que cada proceso defina su propia instancia de espacio de direcciones virtuales. La tabla de páginas en la raíz del árbol debe estar en la RAM en todo momento. Los otros son paginables; incluso son inexistentes donde corresponderían a grandes regiones (mínimo de 2 MB) de espacio de direcciones virtual indefinido o libre.
Las entradas de la tabla de páginas en las tablas en las "hojas" del árbol corresponden a páginas de espacio de direcciones virtuales. Los PTE en las tablas de nivel superior, los más cercanos a la raíz (y la raíz misma), indican dónde están las siguientes tablas de nivel inferior (si es que existen).
El número que muestra RAMmap es la memoria física (RAM) ocupada por todas las tablas de páginas residentes (en RAM) para todos los procesos más el sistema operativo.
Lo importante aquí es que el sistema en el OQ tenía 2.5 GB de RAM atados con tablas de páginas. Eso significa que, como mínimo, hay 2.5 GB de tablas de páginas definidas. Dado que las tablas de páginas son paginables, el tamaño virtual podría ser mucho mayor que el tamaño físico, que es todo lo que RAMmap nos puede mostrar. Pero suponga que es "solo" 2.5 GB. Con ocho bytes por PTE, eso es aproximadamente 320 millones de PTE. Dado que cada PTE define una página, 4K bytes, de espacio de direcciones virtuales, eso significa que más de 1.2 terabytes de espacio de direcciones virtuales están definidas por tablas de páginas en memoria .
Eso no es imposible, pero es bastante.
Como referencia, en mi cajero automático del sistema, tengo alrededor de 125 MB de RAM en las tablas de páginas. Esto indicaría solo unos 65 GB de espacio de direcciones virtuales. Mi uso virtual real es mucho mayor (125 TB solo para procesos) pero eso se debe a que la mayoría de las tablas de páginas no están en RAM. Las "páginas grandes", otra cosa que no debería mencionar aquí, también pueden ayudar a tener en cuenta las diferentes relaciones entre el tamaño de las tablas de páginas y el tamaño del espacio de direcciones virtuales en uso.
Entonces: PARA encontrar al culpable, primero buscaría en el Monitor de rendimiento en la categoría Proceso para procesos con un alto valor de contador "Bytes virtuales".
fuente
Lenovo "RapidBoot Shield" fue el culpable para mí.
Después de una semana sin reiniciar mi "Page Table" estaba usando 4GB +. Resultó que todos los procesos terminados se quedaron usando 20K RAM (4K privado, 16K Page Table) como se muestra en la pestaña "Procesos" de RamMap, ¡y había ~ 200,000 de ellos!
El reinicio redujo la lista pero comenzó a crecer nuevamente. Fue reproducible abriendo el bloc de notas, eliminándolo y observando que permanece en la lista de procesos de RamMap.
Basado en las sugerencias de este hilo de Technet , desinstalé "RapidBoot Sheild", reinicié la máquina y luego los procesos ya no se quedaron cuando los mataron. ¡Problema resuelto!
fuente
En mi caso, estos fueron los controladores de filtro Aksdf.sys y Hardlock.sys de los controladores de Aladdin Knowledge Systems Aladdin . He logrado encontrar esa respuesta usando RAMMap también. Mostraba la memoria, consumida por el proceso terminado. Los procesos se eliminaron de la lista de procesos de Windows pero persistieron en el mapa de memoria. Los controladores parecen evitar la terminación completa de los procesos.
fuente
Le pregunté a mi departamento de TI sobre esto, y fueron igualmente engañados. Terminé usando DriverEasy para actualizar mis controladores. Los que parecían marcar la diferencia, curiosamente, fueron los controladores del monitor. Anteriormente tenía los controladores estándar de Windows "Generic PnP Monitor". Pero cuando actualicé esos a la marca y modelo correctos de mis monitores, el problema pareció desaparecer.
fuente