Les profondeurs de la mémoire Windows (partie 2) — La vie d'une page physique : cinq listes et la vérité sur le fichier d'échange

· Mis à jour le: · · Windows, Gestion de la mémoire, Fichier d'échange, Working Set, Standby, RAMMap, Supervision des performances

Historique des révisions (première version, publiée le 20 Aug 2026)
Première publication
Citer cet article(DOI (archive enregistrée): 10.5281/zenodo.22176106)

Les DOI ci-dessous renvoient à des versions déjà archivées et peuvent différer du texte actuel. Pour citer le texte actuel, utilisez l’URL de cette page.

Go Komura (2026). Les profondeurs de la mémoire Windows (partie 2) — La vie d'une page physique : cinq listes et la vérité sur le fichier d'échange. KomuraSoft LLC. https://comcomponent.com/fr/blog/windows-memory-internals-page-lifecycle-pagefile/

DOI (archive enregistrée)
10.5281/zenodo.22176106
DOI (dernière version enregistrée)
10.5281/zenodo.22279027

« Le Working Set a baissé. Alors, cette page n’est-elle plus en RAM ? » La partie 2 suit cette question du côté de la page physique.

Dans l’article précédent, « Les profondeurs de la mémoire Windows (partie 1) — L’instant où une adresse virtuelle devient de la RAM physique », nous avons suivi jusqu’à l’obtention d’une page physique au premier accès à une page validée (Commit). Même après qu’une page quitte le Working Set, elle ne disparaît pas forcément tout de suite, ni ne passe forcément tout de suite au fichier d’échange.

Une page non modifiée peut passer en Standby en laissant son contenu en place. Une page modifiée attend d’abord la réécriture sur Modified. À la réutilisation, elle peut passer par Free ou Zeroed, et si le même contenu est à nouveau nécessaire, elle peut revenir de Standby par un défaut logiciel (soft fault).

Cet article prend la base PFN comme axe et relie les états Active, Modified, Standby, Free et Zeroed d’une seule page physique. Pour la lecture des chiffres eux-mêmes, il suppose l’article d’introduction « Que représente réellement la « mémoire utilisée » sous Windows ».

« Les profondeurs de la mémoire Windows » — les 3 parties

Cette série avance dans l’ordre obtenir une page physique → suivre le flux de résidence et de récupération → comprendre le partage et la privatisation.

Partie Thème Ce que cette partie suit
Partie 1 Adresses virtuelles et défauts de page Quand une région allouée avec VirtualAlloc obtient de la RAM physique
Partie 2 (cet article) La vie d’une page physique Les transitions d’état d’une page qui quitte le Working Set, et le rôle du fichier d’échange
Partie 3 Objets section et copie à l’écriture Comment les DLL, les mappages de fichiers et la mémoire partagée partagent des pages physiques

La partie 2 ne répond qu’à une question.

Une page physique qui quitte le Working Set disparaît-elle, va-t-elle sur disque, ou reste-t-elle en RAM ?

Avant de commencer Détails
Public visé Développeurs et opérateurs qui veulent comprendre, depuis le mécanisme, le rapport entre Available et Standby, le comportement après un trim du Working Set, les réglages du fichier d’échange et la compression mémoire
Environnement Windows 10/11 ou un Windows Server actuel
Prérequis Bases du Working Set, du Commit et des défauts logiciels/matériels
Difficulté Intermédiaire. Utilise des termes internes comme PFN et liste de pages

L’explication se concentre sur ce que l’on peut observer avec RAMMap et PerfMon, sans débogueur noyau.

Dans le diagramme, un trait continu marque une relation qui vaut toujours et un trait pointillé une relation conditionnelle (les conditions figurent dans l’explication de chaque relation sur la page de détail). La liste complète des relations (18 au total, avec preuve et niveau de certitude) et les définitions des concepts principaux sont rassemblées sur la page de détail de la carte des connaissances (en japonais). Données : JSON-LD / Turtle

1. D’abord la conclusion

Où va une page physique se résume aux trois points suivants.

  1. Retirer une page du Working Set et perdre son contenu sont des choses différentes. Une page propre reste en Standby, et si le même contenu est nécessaire elle peut revenir sans lire le disque. Une page modifiée n’est réutilisée qu’après que son contenu peut être conservé quelque part, comme le fichier d’échange ou le fichier correspondant.
  2. Standby est un cache et, en même temps, Available. Elle conserve ses contenus précédents, mais elle peut être réutilisée si un autre usage en a besoin. Available inclut Standby, Free et Zeroed.1
  3. Le fichier d’échange soutient non seulement l’écriture mais aussi le Commit et les dumps. L’écriture n’est pas un travail par lots qui ne commence qu’une fois la RAM totalement épuisée ; elle avance en arrière-plan selon la liste Modified et la pression mémoire. Le désactiver ne corrige pas une fuite, et cela peut réduire la Commit Limit, les options de réutilisation de la RAM, et la capacité à capturer un dump.234

En une phrase : avant de jeter une page, Windows vérifie la possibilité qu’elle soit à nouveau nécessaire et s’il existe un endroit d’où le contenu d’origine peut être restauré.

Ce que vous voulez savoir Sections à lire
Où va une page après avoir quitté le Working Set Sections 2 à 6
La différence entre Standby, Free, Zeroed et la compression Sections 7 à 8
Décider si un fichier d’échange est nécessaire et de quelle taille Sections 9 à 10
Le confirmer avec RAMMap ou Testlimit Sections 11 à 12

2. La base PFN — le grand livre du côté de la RAM physique

Le PTE vu dans la partie 1 représentait la traduction d’une page virtuelle vers une page physique. En regardant cela du côté de la page physique, le grand livre qui suit « à quoi cette page de RAM est-elle utilisée en ce moment » est la base PFN. PFN signifie Page Frame Number : la RAM physique numérotée par unités de page.

Une entrée PFN suit conceptuellement les informations suivantes.

  • L’état actuel de la page physique
  • Le compteur de références et le compteur de partage
  • Le PTE correspondant
  • Si elle est modifiée
  • À quelle liste de pages elle appartient
  • Les informations liées au nœud NUMA et à la priorité

Choisissez la vue d’outil selon la granularité que vous voulez voir. Dans WinDbg et RAMMap, vous pouvez confirmer ce qui suit.567

Ce que vous voulez confirmer Vue ou commande
Informations sur un PFN précis !pfn dans WinDbg
Usage de la mémoire physique et totaux par liste de pages !memusage dans WinDbg
Usage et liste de pages Use Counts dans RAMMap
Standby par priorité Priority Summary dans RAMMap
Usage par page Physical Pages dans RAMMap

Avec RAMMap, vous pouvez observer cela sans utiliser de débogueur noyau.

3. Relier les cinq états sur un seul schéma

Ici, le flux d’une page physique est simplifié à cinq états. Lisez-les d’abord selon « peut-on l’utiliser maintenant », « conserve-t-elle encore un contenu » et « a-t-elle besoin d’une préparation avant réutilisation ».

État Comment cette partie le traite
Active / Valid Référencé via un PTE valide depuis un Working Set ou équivalent
Modified Modifié et en attente de réécriture
Standby Un candidat à la réutilisation qui conserve ses contenus précédents
Free Allouable, mais un ancien motif de bits peut rester
Zeroed Mis à zéro et prêt à être remis comme nouvelle page en mode utilisateur

Ce n’est pas un schéma qui énumère tous les états. Windows actuel a aussi Standby par priorité, Transition, Bad, et d’autres. De plus, Active est moins une « liste Active » unique que l’état d’être référencé via un PTE valide. En gardant cette distinction, utilisez-le comme un schéma pour suivre le comportement mémoire d’une application.

Schéma simplifié d'une page physique Windows qui circule entre Active, Modified, Standby, Free et Zeroed

Figure 1 : Une page référencée dans le Working Set passe en Standby si elle est propre et en Modified si elle est dirty. Si le même contenu est nécessaire, elle revient ; pour un autre usage, elle est soit réutilisée directement, soit passe par Free/Zeroed en préparation d’une allocation qui exige des zéros.

Source Mermaid de la figure 1
flowchart LR
    zeroed["Zeroed\nDéjà mis à zéro"] -->|Premier Touch| active["Active / Valid\nRéférencé dans le Working Set"]
    active -->|Trim d'une page propre| standby["Standby\nCandidat à la réutilisation qui conserve son contenu"]
    active -->|Trim d'une page dirty| modified["Modified\nEn attente de réécriture"]
    modified -->|Réécriture terminée| standby
    standby -->|Retour via un défaut logiciel| active
    standby -->|Abandonner l'ancienne identité| free["Free\nNon mis à zéro"]
    standby -->|Réutiliser directement pour un autre usage| active
    free -->|Pour les allocations qui ont besoin de zéros| zeroed

Deux points valent d’être retenus du schéma.

Quitter le Working Set ne signifie pas forcément perdre le contenu. Si le même contenu est à nouveau nécessaire, on peut revenir à la page qui reste.

La réutilisation pour un autre usage ne passe pas forcément par Free/Zeroed dans l’ordre. Si la page va être remise au mode utilisateur comme une nouvelle page privée demandée à zéro, l’ancien contenu doit être effacé. Si, en revanche, la page entière va être écrasée, comme lorsqu’elle est la destination d’une lecture de fichier, l’identité Standby peut être abandonnée et la page réutilisée directement.

4. Active / Valid — une page physique que l’on peut référencer maintenant

Une page Active/Valid est référencée depuis le Working Set d’un processus ou depuis l’espace système via un PTE valide. Le CPU peut l’atteindre avec la traduction d’adresse ordinaire, donc l’accès lui-même n’a pas besoin d’un défaut de page.

Il n’y a toutefois aucune garantie que la page reste Active. Pour maintenir de la mémoire disponible, le gestionnaire de mémoire regarde la taille du Working Set, la récence d’utilisation de la page et des facteurs similaires, et trimme des pages candidates. La documentation Microsoft sur le Working Set explique aussi que le gestionnaire de mémoire retire des pages du Working Set afin de créer de la mémoire disponible.8

4.1. Un trim n’est pas une libération

Ce que le trim du Working Set change surtout, c’est l’état résident d’être immédiatement référencable via un PTE valide. Distinguez les quatre événements suivants comme des événements distincts.

  • Le retrait du Working Set
  • La libération du Commit
  • La libération d’une plage d’adresses virtuelles
  • La perte des données d’origine

Exécuter EmptyWorkingSet ou le « Trim Working Set » d’un outil n’est pas un substitut à VirtualFree ou à une libération de tas. Si vous retouchez la même page, elle revient via un défaut logiciel depuis Standby ou un défaut matériel depuis un magasin de soutien. Donc « j’ai rendu le Working Set plus petit » ne signifie pas « j’ai corrigé la fuite ».

5. Une page propre va en Standby

Même après qu’une page est retirée du Working Set, si son contenu correspond encore au fichier d’origine ou qu’elle a déjà un magasin de soutien sûr, elle peut être placée en Standby. Des exemples représentatifs incluent les suivants.

  • Du code EXE/DLL non modifié
  • Un fichier mappé en mémoire non modifié
  • Une page privée déjà réécrite
  • Des données restantes dans le cache de fichiers

Retourner au même contenu, ou céder la place à un autre usage

Une page Standby conserve sa correspondance avec les contenus précédents. Lorsque le même processus ou un autre processus a besoin de ces contenus, pourvu que la page n’ait pas encore été réutilisée, un défaut logiciel qui reconnecte le PTE suffit à la restaurer.

En revanche, si une autre allocation a besoin d’une page physique, l’ancienne identité Standby peut être abandonnée et la page réutilisée. Si la destination de réutilisation est une page privée en mode utilisateur qui exige une initialisation à zéro, une page Zeroed est préparée ; si la page entière va être écrasée avec le contenu d’un fichier ou équivalent, elle peut être réassignée directement sans mise à zéro.

Cette double face est exactement pourquoi Standby est à la fois un cache et Available.

5.1. Pourquoi Available inclut Standby

MEMORYSTATUSEX.ullAvailPhys représente la mémoire physique qui peut être réutilisée immédiatement sans écrire sur disque, et c’est la somme de Standby, Free et Zeroed.1

Les trois listes de pages qui composent AvailableLa mémoire physique disponible est la somme de Standby, Free et Zeroed, et n'inclut pas les pages Active référencées depuis un Working SetNon inclusStandby (candidat à la réutilisation qui conserve son contenu)Available (mémoire physique disponible)Free (inutilisé, non mis à zéro)Zeroed (inutilisé et mis à zéro)Active (référencé dans le Working Set)

Figure 2 : Available est la somme de Standby, Free et Zeroed. Standby, qui conserve encore son contenu, compte aussi comme « disponible ».

Ce n’est donc pas une contradiction lorsque le Gestionnaire des tâches montre « Free est bas, pourtant Cached/Standby est élevé et Available est suffisant ».

Windows ne laisse pas la RAM libre oisive ; il laisse les fichiers et le code récemment utilisés en Standby. Il sert les mêmes contenus comme un cache, et réutilise les pages si un autre usage en a besoin.

Ne concluez pas « Free est bas, donc nous manquons immédiatement de mémoire » ; regardez ensemble Available, Commit, les défauts matériels et le retard de traitement.

6. Une page dirty attend sur Modified

Lorsqu’une application écrit sur une page, ce contenu ne correspond plus au magasin de soutien d’origine. Écraser cette page dirty pour un autre usage telle quelle perdrait les données. Donc une page modifiée retirée du Working Set attend la réécriture sur Modified.

La destination de réécriture dépend du type de page.

Type de page Destination de réécriture typique
Page privée validée (committed) Fichier d’échange
Fichier mappé inscriptible Le fichier de données correspondant
Données dirty dans le cache de fichiers Le fichier de données correspondant
Page EXE/DLL propre Aucune réécriture nécessaire. Peut être relue depuis l’image d’origine

La documentation Microsoft du fichier d’échange explique aussi que les .dll, .exe et fichiers ordinaires qui existent déjà sur disque n’ont pas besoin d’être réécrits dans le fichier d’échange, et que les données modifiées sans copie disque d’origine sont ce qui devient candidat au fichier d’échange.3

6.1. Le Modified Page Writer

Le Modified Page Writer est un worker système qui parcourt les pages dirty adossées au fichier d’échange que le gestionnaire de mémoire suit et les écrit vers le fichier d’échange.4 Du côté des fichiers mappés, il existe des chemins tels que le Mapped Page Writer, qui coopèrent avec le système de fichiers et le gestionnaire de cache pour réécrire vers le fichier correspondant.

L’écriture n’est pas un schéma « ne rien faire jusqu’à ce que la RAM soit à 0 octets ». Selon la liste Modified, Available, l’état du fichier d’échange et des facteurs similaires, elle prépare en arrière-plan des pages qui pourront être réutilisées à l’avenir.

Une fois la réécriture terminée et s’il n’y a plus d’autres références valides, la page peut avancer vers Standby avec son contenu intact.

Chemins de réécriture d'une page modifiéeUne page modifiée qui quitte le Working Set attend sur la liste Modified, une page privée est écrite vers le fichier d'échange par le Modified Page Writer si un fichier d'échange est configuré, une page de fichier mappé est réécrite vers le fichier de données correspondant par le Mapped Page Writer ou équivalent, et après achèvement la page avance vers Standby avec son contenu intactPage privée (quand un fichier d'échange est configuré)Page de fichier mappéPage modifiée qui a quitté le Working SetAttendre la réécriture sur la liste ModifiedLe Modified Page Writer l'écrit vers le fichier d'échangeLe Mapped Page Writer ou équivalent la réécrit vers le fichier correspondantAprès réécriture, vers Standby avec le contenu intact

Figure 3 : La destination de réécriture est déterminée par le type de page, et les deux chemins avancent en arrière-plan. Sur un système dont le fichier d’échange est désactivé, le côté page privée n’a pas de destination de réécriture, donc les pages privées modifiées restent en RAM.

6.2. Séparer la sortie de pages des E/S propres au fichier d’échange

Lisez les compteurs en séparant le nombre d’E/S du nombre de pages.

Compteur Ce qu’il compte
Memory\\Page Writes/sec Le nombre d’E/S d’écriture de pagination émises pour libérer de la mémoire physique
Memory\\Pages Output/sec Le nombre de pages écrites sur disque par ces écritures
Memory\\Page Reads/sec Le nombre d’E/S de lecture disque émises pour résoudre des défauts matériels
Memory\\Pages Input/sec Le nombre de pages qui sont entrées en RAM depuis ces lectures

L’autre distinction, c’est que les E/S de pagination et les E/S propres au fichier d’échange ne sont pas la même chose.

Page Writes/sec et Pages Output/sec peuvent aussi monter sur le chemin qui réécrit des pages dirty de fichiers mappés et équivalents. Le côté entrée ne distingue pas non plus le fichier d’échange, les DLL, les EXE et les fichiers mappés en mémoire.3

Pour identifier les E/S propres à pagefile.sys, n’estimez pas à partir de ces quatre compteurs seuls ; enregistrez File I/O et Disk I/O avec ETW/WPA. Faites correspondre FileObject à FileName et confirmez le fichier cible.9

Un point de plus : écrire d’avance vers le fichier d’échange ne signifie pas relire depuis le disque tout de suite. Si la page n’est pas accédée, la page réécrite peut être retirée de la RAM et sa mémoire physique donnée à des pages plus utilisées.

7. La différence entre Standby, Free et Zeroed

7.1. Standby

Un état qui conserve encore la correspondance avec les contenus précédents.

  • Si le même contenu est nécessaire, il peut revenir via un défaut logiciel
  • Si un autre usage en a besoin, l’ancienne identité peut être abandonnée et la page réutilisée
  • Il existe des listes Standby par priorité

7.2. Free

La correspondance valide avec les contenus précédents a été perdue, et la page est allouable. Toutefois, un ancien motif de bits peut encore rester dans la page. La remettre telle quelle au mode utilisateur risque de fuiter des informations du processus précédent.

7.3. Zeroed

Le contenu est zéro, et la page peut être remise en toute sécurité comme nouvelle page en mode utilisateur. Le défaut demandant zéro de la partie 1 était un cas représentatif d’obtention d’une page Zeroed disponible et de sa liaison à un PTE. La préparation de Free vers Zeroed se fait selon la demande et l’état du système.

Donc, même si « Free » et « Zeroed » ont tous deux l’air inutilisés, ils diffèrent par leur préparation liée à la sécurité.

8. Le magasin de compression mémoire — créer une destination de plus à l’intérieur de la RAM

À partir de Windows 10, lorsqu’il y a une pression mémoire, le gestionnaire de mémoire peut dans certains cas comprimer en RAM des pages peu utilisées au lieu de les écrire tout de suite sur disque. Cette collection de pages compressées est le magasin de compression.

8.1. Où voir la quantité compressée

Dans l’implémentation initiale de Windows 10, le magasin de compression était comptabilisé dans le Working Set du processus System, mais sur Windows actuel il apparaît dans la liste des processus des outils de débogage comme un processus dédié Memory Compression. Donc, lorsque vous enquêtez sur la quantité actuellement compressée, ne suivez pas seulement le Working Set du processus System. Le but lui-même, garder plus d’applications en mémoire physique et réduire les E/S disque, n’a pas changé.1011

8.2. La compression a aussi un coût, et l’ordre n’est pas fixe

Gardez toutefois les points suivants à l’esprit.

  • Les pages compressées utilisent encore de la RAM
  • La compression et la décompression ont un coût CPU
  • La compression n’efface pas la promesse de Commit
  • Il n’y a pas d’ordre fixe « toujours comprimer, puis le fichier d’échange »
  • La politique change avec le type de page, la pression et l’historique d’accès

Le « En cours d’utilisation (compressé) » du Gestionnaire des tâches ne signifie pas que la compression a complètement libéré de la mémoire physique. Le magasin de compression n’est pas une fonction qui rend le fichier d’échange inutile ; il ajoute une option qui utilise le CPU pour réduire les E/S entre la RAM et le stockage.

9. Le vrai rôle du fichier d’échange

Le fichier d’échange a au moins trois rôles.

Trois rôles du fichier d'échangeLe fichier d'échange élargit la Commit Limit, devient le magasin de soutien des pages privées modifiées peu consultées, et devient le réceptacle d'un dump de crash systèmeFichier d'échangeÉlargit la Commit Limit (marge du côté plafond)Magasin de soutien des pages privées modifiéesRéceptacle d'un dump de crash système

Figure 4 : Le rôle du fichier d’échange n’est pas seulement « de la RAM lente ». Même lorsque l’usage est 0, il soutient encore le plafond et les dumps.

9.1. Élargir la Commit Limit

La Commit Limit du système est déterminée grosso modo par la RAM plus le total de tous les fichiers d’échange. Sans fichier d’échange, la Commit Limit tombe à un niveau un peu inférieur à la RAM installée. Lorsque Commit Total atteint le plafond, un nouveau Commit échoue, ce qui peut mener à une terminaison anormale d’applications ou à des ennuis système.2

C’est une autre affaire que « combien de Go sont actuellement écrits dans pagefile.sys ». Le fichier d’échange est aussi une marge du côté plafond qui soutient la promesse appelée Commit.

9.2. Soutenir les pages privées modifiées

Si des pages privées modifiées peu consultées sont soutenues par le fichier d’échange, ces pages physiques peuvent être retirées de la RAM et données au code et aux données fréquemment utilisés.2 Désactiver le fichier d’échange réduit les options pour retirer de telles pages de la RAM. On ne peut pas simplement dire « c’est rapide parce que la pagination ne se produit pas ».

9.3. Soutenir les dumps de crash système

Pour produire Memory.dmp lors d’un crash système, il faut un fichier d’échange ou un fichier de dump dédié capable de soutenir la méthode de dump que vous avez choisie.3 Le dump mémoire complet, le dump mémoire noyau et le dump mémoire automatique diffèrent par la quantité requise.

Dans un environnement où vous enquêtez sur les crashs, supprimer le fichier d’échange seulement pour gagner de la place peut signifier qu’aucune preuve ne reste au moment où vous en avez le plus besoin. Pour les méthodes de collecte, voir aussi « Introduction à la collecte des dumps de crash Windows ».

10. La bonne taille n’est pas uniforme

Il ne faut pas décider la taille du fichier d’échange d’après une formule fixe telle que « 1,5 fois la RAM » seule. Microsoft explique que la taille appropriée diffère par système sur les deux points suivants et ne peut pas être généralisée.3

  1. Le System Commit Charge de pointe
  2. Le dump de crash système dont vous avez besoin

En pratique, réfléchissez dans l’ordre suivant.

10.1. Partir du géré par le système comme base

Le défaut Windows est géré par le système. Il grandit et rétrécit selon la RAM installée, la demande de Commit, les besoins de dump de crash, etc. Sauf contrainte spéciale ou résultat de mesure, commencer ici est le choix sûr.

10.2. Mesurer le Commit de pointe sous une charge représentative

Collectez les compteurs suivants dans PerfMon sur une longue période.

  • Memory\\Committed Bytes
  • Memory\\Commit Limit
  • Memory\\% Committed Bytes In Use
  • Memory\\Modified Page List Bytes
  • Paging File(*)\\% Usage
  • Memory\\Available MBytes
  • Memory\\Page Reads/sec
  • Memory\\Page Writes/sec

Incluez les pointes réelles de la période de collecte : traitements de fin de mois, sauvegardes, compilations, plusieurs utilisateurs à la fois, etc.

Un pourcentage d’usage du fichier d’échange élevé à lui seul ne prouve pas un problème de performances de stockage. Coller au plafond, toutefois, est un avertissement de capacité insuffisante. Regardez ensemble si le Commit approche le plafond, si une grande quantité de Modified attend, et si le disque est saturé.3

10.3. Décider d’abord l’exigence de dump

Décidez si vous avez besoin d’un dump mémoire complet, si un dump mémoire noyau suffit, ou si vous utiliserez un fichier de dump dédié. Si vous passez à une taille fixe, elle doit satisfaire non seulement le Commit de pointe mais aussi l’exigence de dump.

11. Voyez-le par vous-même

11.1. Regarder les listes de pages dans RAMMap

Démarrez RAMMap en tant qu’administrateur et ouvrez d’abord Use Counts.7 Les éléments à regarder sont les suivants.

  • Active
  • Standby
  • Modified
  • Modified no write
  • Free
  • Zeroed

Priority Summary permet de confirmer que Standby est découpé par priorité. Processes montre le Working Set de chaque processus ; File Summary et File Details permettent de suivre les données de fichiers qui sont en RAM.

Lire le même fichier deux fois et regarder les pages qui restent

  1. Lisez une fois un fichier local assez grand.
  2. Terminez la lecture et actualisez RAMMap. Les pages de ce fichier peuvent rester dans File Summary ou du côté Standby.
  3. Relisez le même fichier. Les pages qui n’ont pas encore été réutilisées peuvent revenir sans E/S disque, ou avec peu d’E/S.

Les résultats varient avec la pression mémoire, l’antivirus et la taille du fichier. Regardez la direction de la transition d’état plutôt qu’un seul jeu de chiffres.

N’utilisez pas Empty comme opération d’amélioration des performances sur des machines de production

Notez que le menu Empty de RAMMap change l’état du système artificiellement. Ne videz pas Standby comme opération d’amélioration des performances sur une machine de production ; utilisez-le seulement dans un environnement de test isolé.

11.2. Séparer Commit et Touch avec Testlimit

Testlimit est un outil Sysinternals qui simule des pénuries de ressources de mémoire, de handles, de processus, de threads, etc. Exécutez d’abord ce qui suit avec le binaire que vous avez sous la main et confirmez la version et l’usage qui s’affichent.

.\\testlimit64.exe -?

Confirmez la version et la syntaxe avant d’essayer

Ce qui suit vise Testlimit v5.24. Dans la syntaxe officielle v5.24, -m [MB] alloue la quantité de mémoire spécifiée, -d [MB] alloue et Touch, -e [seconds] est l’intervalle d’allocation, et -c [count] est le nombre d’allocations. Spécifiez -c en dernier. Si ce que vous voyez localement diffère, préférez cet usage.12

Ensuite, essayez petit sur une machine virtuelle jetable.

# -m 64: allouer 64 Mio, -e 1: intervalle d'1 seconde, -c 8: s'arrêter après 8 fois
.\\testlimit64.exe -m 64 -e 1 -c 8

# Le même nombre et le même intervalle, avec -d pour que chaque région soit Touchée
.\\testlimit64.exe -d 64 -e 1 -c 8

Pendant l’exécution, enregistrez en même temps ce qui suit.

  • Le « Validé X/Y » du Gestionnaire des tâches
  • Active, Modified et Standby de RAMMap
  • Memory\\Committed Bytes
  • Memory\\Commit Limit
  • Memory\\Available MBytes
  • Memory\\Modified Page List Bytes

Ne reproduisez l’épuisement que sur une machine virtuelle avec un instantané

Si vous reproduisez réellement l’épuisement du Commit, ne le faites pas sur le PC hôte ; augmentez le compte pas à pas sur une machine virtuelle avec un instantané. Une exécution qui alloue automatiquement jusqu’au plafond peut figer l’écran, terminer des processus anormalement et perdre des journaux. Le but n’est pas de déstabiliser l’OS ; c’est d’observer que à l’approche de la Commit Limit, un nouveau Commit échoue.

12. Quatre lectures erronées à éviter en pratique

12.1. « Standby est élevé, donc c’est une fuite mémoire »

Standby est un cache réutilisable et est inclus dans Available. Jugez une fuite d’après si la ligne de base de Commit privée au processus et la ventilation des allocations continuent de croître même après la fin de la charge.

12.2. « Couper le Working Set corrigera la fuite »

Un trim ne change que la résidence ; il ne libère ni le Commit ni une allocation virtuelle. Au réaccès, la page revient par un défaut.

12.3. « L’usage du fichier d’échange est 0, donc il est inutile »

Le fichier d’échange soutient non seulement la quantité actuellement écrite mais aussi la Commit Limit et les dumps de crash. Décider de le supprimer d’après le seul usage quotidien perd la marge de pointe et les preuves au moment de la panne.

12.4. « La compression mémoire d’abord, puis toujours le fichier d’échange »

La compression n’est pas un pipeline série fixe. Windows choisit dynamiquement selon le type de page, l’efficacité de compression, la charge CPU, la pression mémoire, et l’existence d’un magasin de soutien.

13. Synthèse

  • La base PFN est le grand livre qui suit la propriété, les références, la modification et l’état de liste de pages d’une page physique.
  • Une page propre qui quitte le Working Set reste en Standby et peut revenir via un défaut logiciel si le même contenu est nécessaire.8
  • Une page dirty attend sur Modified et est réécrite vers le fichier d’échange si elle est privée, ou vers le fichier correspondant si elle est mappée, etc.4
  • Available est la somme de Standby, Free et Zeroed ; un Standby important à lui seul n’est pas une pénurie de mémoire.1
  • La compression mémoire comprime des pages en RAM pour réduire les E/S, mais elle n’efface pas les rôles du Commit et du fichier d’échange.10
  • Le fichier d’échange soutient la Commit Limit, les pages privées modifiées et les dumps de crash système.23
  • La taille appropriée est déterminée par le Commit de pointe et les besoins de dump ; elle ne peut pas se décider par un multiplicateur uniforme.3
  • Le trim du Working Set et le vidage de Standby ne sont pas des corrections de fuite mémoire.

La suite est la partie 3, « Objets section et copie à l’écriture : ce que sont vraiment les DLL et le mappage de fichiers ».

Nous suivons pourquoi les pages de fichiers et les DLL qui restent en Standby sont visibles depuis plusieurs processus comme la même page physique.

Articles connexes

Domaines de conseil associés

KomuraSoft LLC prend en charge l’enquête de la pression mémoire des applications Windows, de l’épuisement du Commit, de la pagination, de la croissance du Working Set, et de la conception de collecte des dumps de crash.

Références

  1. Microsoft Learn, MEMORYSTATUSEX structure. Sur le fait que ullAvailPhys est la mémoire physique qui peut être réutilisée immédiatement sans écrire sur disque, et qu’elle est la somme des listes Standby, Free et Zeroed. ↩ ↩2 ↩3

  2. Microsoft Learn, Introduction to page files. Sur le fait que le fichier d’échange retire de la RAM les pages modifiées peu consultées, élargit la Commit Limit, et soutient les dumps de crash système. ↩ ↩2 ↩3 ↩4

  3. Microsoft Learn, How to determine the appropriate page file size for 64-bit versions of Windows. Sur le fait que la taille appropriée dépend du Commit de pointe et des besoins de dump de crash et n’est pas généralisable, et sur la liste Modified, l’usage du fichier d’échange, les compteurs associés et le fichier d’échange géré par le système. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8

  4. Microsoft Learn, Data corruption on IO write. Sur le fait que le Modified Page Writer est un worker système du gestionnaire de mémoire qui parcourt les pages dirty adossées au fichier d’échange et les écrit. ↩ ↩2 ↩3

  5. Microsoft Learn, !pfn (WinDbg). Sur le fait de pouvoir afficher l’état, les références, l’adresse de PTE, etc. d’une entrée PFN spécifiée. ↩

  6. Microsoft Learn, !memusage (WinDbg). Sur le fait de pouvoir totaliser l’usage de la mémoire physique et les états de page tels que Zeroed, Free, Standby, Modified et Active. ↩

  7. Microsoft Learn, RAMMap - Sysinternals. Sur le fait que Use Counts, Processes, Priority Summary, Physical Pages, File Summary et File Details de RAMMap affichent l’usage et les listes de pages de la mémoire physique. ↩ ↩2

  8. Microsoft Learn, Working Set. Sur le fait que le gestionnaire de mémoire trimme le Working Set pour créer de la mémoire disponible, et sur le fait de pouvoir résoudre par un défaut logiciel des pages qui restent en Transition ou dans le Working Set d’un autre processus. ↩ ↩2

  9. Microsoft Learn, FileIo_Name class. Sur le fait que les événements ETW File I/O ont FileObject et FileName, de sorte que FileObject peut être apparié avec les événements Disk I/O pour identifier les E/S vers le fichier cible. ↩

  10. Windows Insider Blog, Announcing Windows 10 Insider Preview Build 10525. Sur l’implémentation initiale du magasin de compression de Windows 10 qui place la collection en RAM des pages compressées dans le Working Set du processus System et réduit les écritures sur disque. ↩ ↩2

  11. Microsoft Learn, Find Process ID (PID) in Windows. Sur l’exemple de liste de processus des Debugging Tools for Windows actuelles montrant un processus Memory Compression avec un PID distinct sous System. ↩

  12. Microsoft Learn, Testlimit - Sysinternals. Sur la syntaxe officielle Testlimit v5.24 dans laquelle -m alloue de la mémoire, -d alloue et Touch, -e est l’intervalle d’allocation, et -c est le nombre d’allocations, -c étant spécifié en dernier. ↩

Articles récents partageant les mêmes étiquettes, pour approfondir des sujets proches.

Ces pages replacent le sujet dans un contexte plus large de services et de décisions.

Cet article est directement lié aux services suivants.

Questions fréquentes

Questions souvent posées lors d’une consultation sur le sujet de cet article.

Une page est-elle écrite dans le fichier d'échange dès qu'elle quitte le Working Set ?
Non. Une page non modifiée passe en Standby avec son contenu intact et devient un cache réutilisable tout de suite. Une page modifiée passe en Modified et, après écriture vers le fichier d'échange ou le fichier correspondant selon le besoin, avance vers un état réutilisable comme Standby.
La mémoire Disponible du Gestionnaire des tâches inclut-elle Standby ?
Oui. La mémoire physique disponible que Windows rapporte est la somme de Standby, Free et Zeroed. Standby conserve encore d'anciens contenus, mais comme elle peut être réutilisée immédiatement pour un autre usage si besoin, elle compte comme mémoire disponible.
L'écriture vers le fichier d'échange ne commence-t-elle qu'une fois la RAM totalement épuisée ?
Non. Windows réécrit en arrière-plan les pages modifiées peu consultées, selon la liste Modified et l'état de la mémoire disponible. Ce n'est pas un mécanisme simple qui attend l'épuisement absolu pour tout évacuer d'un coup.
Désactiver le fichier d'échange rend-il Windows plus rapide ?
On ne peut pas l'affirmer en règle générale. Le désactiver abaisse la Commit Limit, rend plus difficile de retirer de la RAM les pages modifiées peu consultées, et affecte aussi les dumps de crash. En temps normal, on le laisse géré par le système et l'on décide en mesurant le Commit de pointe et les besoins de dump.
Avec la compression mémoire, le fichier d'échange devient-il inutile ?
Il ne le devient pas. Un magasin de compression comprime des pages en RAM pour réduire les E/S, mais les pages compressées utilisent encore de la mémoire physique et ne remplacent pas la garantie de Commit. Le choix entre compression et pagination est une politique dynamique du gestionnaire de mémoire.

Profil de l’auteur

Page de présentation de l’auteur de l’article.

Go Komura

Représentant de KomuraSoft LLC

Spécialisé dans le développement de logiciels Windows, le conseil technique et l’analyse de pannes, notamment pour les systèmes existants et les incidents difficiles à reproduire.

Retour au blog