Pourquoi ma table de pages prend-elle autant de mémoire?

10

Mon PC Windows 7 64 bits est très lent. J'ai remarqué dans le Gestionnaire des tâches que mon utilisation de la mémoire est proche de 100% - mais l'utilisation signalée pour chaque processus ne correspond pas au total de 6 Go (Firefox affiche environ 500 Mo, le reste beaucoup moins). J'ai téléchargé RAMMap et j'ai constaté que la table des pages occupait une quantité considérable de mémoire (2,5 Go).

Capture d'écran de RAMMap

J'ai fait une recherche sur Google et je suis arrivé nulle part - apparemment, le tableau des pages peut être fragmenté. Évidemment, je vais redémarrer la machine et voir si cela aide. Mais y a-t-il une meilleure façon de le réparer?

EDIT: redémarré et le tableau des pages est tombé à 30 Mo.

EDIT 2: Après quelques jours de disponibilité, l'utilisation de la table des pages progresse à nouveau. J'ai suivi les instructions de @ magicandre1981 dans cette réponse pour trouver la source de l'utilisation de la table de pages. Malheureusement, j'ai dessiné un blanc - le tableau des pages est utilisé par "Inconnu"!

Capture d'écran WPA

Quelqu'un a des idées brillantes?

berger
la source
Vous devez déterminer ce qui utilise votre fichier d'échange pour comprendre la raison pour laquelle votre utilisation du fichier d'échange (c'est-à-dire votre mémoire virtuelle) est élevée.
Ramhound
1
Non, je pense que c'est de la mémoire physique utilisée, pas virtuelle. Je pensais que la table des pages était une sorte de référence pour le gestionnaire de mémoire?
benshepherd
2
Comme je l'ai dit dans la question, aucun processus n'utilise de mémoire. J'avais l'impression que le tableau des pages était différent du fichier d'échange .
benshepherd
1
Le tableau des pages EST une chose très différente du fichier d'échange. Voir ma réponse ci-dessous. De plus, bien que le fichier d'échange puisse être fragmenté, les tableaux de pages ... eh bien, ils sont toujours fragmentés (comme dispersés dans la RAM) et cela n'a aucune importance.
Jamie Hanrahan

Réponses:

5

Je dois commenter les commentaires de la question, en particulier la confusion entre "table de page" et "fichier de page". Ce n'est pas une réponse mais cela ne rentrera pas dans l'espace autorisé pour les commentaires.

Le "tableau des pages" est en effet très différent du fichier d'échange. L'utilisation de n Mo de RAM pour les tables de pages ne signifie pas que vous utilisez n Mo d'espace de fichier d'échange. Et bien que certaines entrées de table de pages (PTE, qui sont les tables de pages) se réfèrent au contenu du fichier d'échange, toutes ne le font pas.

Les tables de pages sont des structures en mémoire qui sont utilisées par la MMU du CPU pour effectuer la traduction d'adresses à partir d'adresses virtuelles (encore une fois, pas le fichier d'échange) vers des adresses physiques, et par le système d'exploitation pour garder une trace de l'espace d'adressage virtuel et aider à résoudre les erreurs de page. Les tables de pages se composent d'entrées de table de pages (PTE). Chaque PTE occupe 8 octets et définit 4K octets d'espace d'adressage virtuel - c'est-à-dire une page virtuelle. Il y a, en gros, un PTE pour chaque page non libre d'espace d'adressage virtuel.

Soit dit en passant, bien que le fichier d'échange puisse subir une fragmentation à la fois externe et interne (le premier n'est généralement pas un gros problème; le second peut être amélioré en le rendant environ quatre fois plus gros qu'il doit l'être), les tableaux de pages ne le peuvent pas. Ils sont déjà en quelque sorte toujours fragmentés, et cela n'a aucune importance.

Chaque PTE a un bit "valide". Pour les pages "valides", alias "résidentes", le PTE contient le numéro de page physique qui correspond au numéro de page virtuel associé au PTE; il est utilisé directement par la MMU.

Pour les pages "invalides", la MMU soulève un défaut de page et le PTE a alors de nombreux formats et interprétations possibles.

Remarque: tout ce qui précède s'applique à tout système d'exploitation qui permet la pagination sur x86 / x64. Les éléments suivants sont largement spécifiques à Windows, mais de nombreux concepts s'appliquent à d'autres systèmes d'exploitation, avec des différences dans les détails de mise en œuvre.

Pour une page dans le cache de pages, le PTE contient toujours le numéro de page physique. Pour les pages qui ont été perdues de RAM et écrites dans le fichier d'échange, le PTE contient le numéro de fichier d'échange et le décalage dans le fichier d'échange où le contenu de la page a été écrit. D'autres contenus PTE possibles sont des références à des descripteurs d'adresses virtuelles , des références à des "prototypes PTE", des références à exiger zéro page, etc., dans lesquelles je ne vais pas entrer. Il suffit de dire que seuls certains des PTE se réfèrent à des emplacements dans les fichiers d'échange.

Je mentionne tout cela principalement pour montrer que le fichier d'échange et les tableaux de pages, bien que liés, ne sont certainement pas la même chose.

Les tableaux de pages sont organisés en arborescence. Il existe une telle arborescence, ou collection de tables de pages, différente pour chaque processus - c'est ce qui permet à chaque processus de définir sa propre instance d'espace d'adressage virtuel. La table des pages à la racine de l'arborescence doit toujours être en RAM. Les autres sont paginables; elles sont même inexistantes où elles correspondraient à de grandes régions (minimum de 2 Mo) d'espace d'adressage virtuel non défini ou libre.

Les entrées de table de pages dans les tables aux "feuilles" de l'arborescence correspondent à des pages d'espace d'adressage virtuel. Les PTE dans les tables de niveau supérieur - celles les plus proches de la racine (et la racine elle-même) - indiquent où se trouvent les tables de niveau inférieur suivantes (si elles existent).

Le nombre affiché par RAMmap est la mémoire physique (RAM) occupée par toutes les tables de pages résidentes (en RAM) pour tous les processus plus le système d'exploitation.

Ce qui est important ici, c'est que le système de l'OQ avait 2,5 Go de RAM liés à des tables de pages. Cela signifie qu'au moins 2,5 Go de tables de pages sont définis. Étant donné que les tableaux de pages sont eux-mêmes paginables, la taille virtuelle pourrait être beaucoup plus grande que la taille physique, ce que tout RAMmap peut nous montrer. Mais supposons que ce soit "seulement" 2,5 Go. À huit octets par PTE, cela représente environ 320 millions de PTE. Étant donné que chaque PTE définit une page - 4K octets - d'espace d'adressage virtuel, cela signifie que plus de 1,2 téraoctets d'espace d'adressage virtuel sont définis par des tables de pages en mémoire .

Ce n'est pas impossible mais c'est beaucoup.

Pour référence, sur mon système d'atmosphère, j'ai environ 125 Mo de RAM dans les tables de pages. Cela n'indiquerait qu'environ 65 Go d'espace d'adressage virtuel. Mon utilisation virtuelle réelle est beaucoup plus élevée (125 To uniquement pour les processus) mais c'est parce que la plupart des tables de pages ne sont pas en RAM. Les "grandes pages", une autre chose que je ne devrais pas aborder ici, peuvent également aider à expliquer les différents rapports entre la taille des tables de pages et la taille de l'espace d'adressage virtuel utilisé.

Donc: pour trouver le coupable, j'irais d'abord chercher dans l'Analyseur de performances sous la catégorie Processus pour les processus avec une valeur de compteur "Virtual Bytes" élevée.

Jamie Hanrahan
la source
4

Lenovo "RapidBoot Shield" était le coupable pour moi.

Après une semaine sans redémarrage, mon "Page Table" utilisait 4 Go +. Il s'est avéré que chaque processus terminé se bloquait en utilisant 20K RAM (4K privé, 16K Page Table) comme indiqué dans l'onglet "Processus" de RamMap, et il y en avait ~ 200 000!

Le redémarrage a réduit la liste, mais il a recommencé à s'allonger. Il était reproductible en ouvrant le bloc-notes, en le tuant et en observant qu'il reste dans la liste des processus RamMap.

Sur la base de suggestions sur ce fil technique, j'ai désinstallé "RapidBoot Sheild", redémarré la machine et les processus ne sont plus restés en place lorsqu'ils ont été tués. Problème résolu!

moineau
la source
1

J'ai demandé à mon service informatique à ce sujet, et ils étaient pareillement embobinés. J'ai fini par utiliser DriverEasy pour mettre à jour mes pilotes. Ceux qui semblaient faire la différence, étrangement, étaient les pilotes du moniteur. Auparavant, j'avais eu les pilotes Windows standard "Generic PnP Monitor". Mais quand j'ai mis à jour ceux-ci à la marque et au modèle corrects de mes moniteurs, le problème semblait disparaître.

berger
la source
1

Ouvrez l'onglet "Processus" dans RamMap et triez par nom. Recherchez un nombre étrangement élevé du même processus. Sur ma machine, "SynTPEnh.exe" était le coupable (une partie du pilote du pavé tactile). Après une semaine de disponibilité, il a accumulé des dizaines de milliers d'entrées dans le tableau des pages, chacune d'une taille de 32 Ko.

La taille de ma table de pages était de 1 Go, après un redémarrage, ce n'est que de 50 Mo.

entrez la description de l'image ici

Martin Hansen
la source