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
· Go Komura · Windows, Gestion de la mémoire, Fichier d'échange, Working Set, Standby, RAMMap, Supervision des performances
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’au moment où le gestionnaire de défaut de page attribue une page physique, à la première touche d’une page déjà validée (Commit). Alors, où va cette page physique une fois retirée du Working Set ?
On voit souvent l’explication réduite à « elle est évacuée vers le fichier d’échange », mais en réalité plusieurs états existent avant et après. Une page non modifiée peut passer en Standby en conservant son contenu. Une page modifiée attend d’abord une 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 suit comment une seule page physique se déplace entre Active, Modified, Standby, Free et Zeroed. La lecture des chiffres eux-mêmes suppose l’article d’introduction « Que représente réellement la « mémoire utilisée » sous Windows ── Bien lire Working Set, Private Bytes, Commit et le fichier d’échange ».
« Les profondeurs de la mémoire Windows » — les 3 parties
- Partie 1 : adresses virtuelles et défauts de page
Nous suivons le moment où une page virtuelle validée obtient de la RAM physique. - Partie 2 (cet article) : la vie d’une page physique
Nous suivons 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
Nous suivons le mécanisme par lequel les DLL, les mappings de fichiers et la mémoire partagée partagent des pages physiques.
La question à laquelle répond la partie 2 n’est qu’une.
Une page physique qui quitte le Working Set disparaît-elle, va-t-elle sur disque, ou reste-t-elle en RAM ?
Le public visé est celui des développeurs et des exploitants qui veulent comprendre, depuis le mécanisme, pourquoi Available est élevé alors que Standby l’est aussi, le comportement après un trim du Working Set, la configuration du fichier d’échange et la compression mémoire. Les prérequis sont Windows 10/11 ou une version actuelle de Windows Server, et le bagage requis est les bases du Working Set, du Commit et des défauts logiciels/matériels. La difficulté est intermédiaire ; nous employons des termes internes comme PFN et listes de pages, mais nous nous concentrons sur ce que l’on peut observer avec RAMMap et PerfMon sans débogueur noyau.
1. La conclusion d’abord
Pour commencer, voici les points faciles à mal lire.
- Une page qui quitte le Working Set ne disparaît pas forcément tout de suite.
Une page propre reste en Standby et peut revenir sans lire le disque si le même contenu est nécessaire. - Une page modifiée ne peut pas être réutilisée tout de suite.
Un contenu privé devient réutilisable après pouvoir être réécrit vers le fichier d’échange ; un fichier mappé, après pouvoir l’être vers le fichier correspondant ; et ainsi de suite. - Available inclut Standby.
Standby est un cache qui conserve encore son contenu et, en même temps, un candidat à la réutilisation que l’on peut prendre immédiatement si besoin.1 - L’écriture vers le fichier d’échange n’est pas un lot qui ne démarre qu’une fois la RAM totalement épuisée.
Elle avance en arrière-plan selon la liste Modified et la pression mémoire.23 - Le fichier d’échange n’est pas seulement de la « RAM lente ».
Il élargit la Commit Limit, devient le magasin de soutien des pages privées modifiées, et soutient les vidages sur incident.4 - Désactiver le fichier d’échange ne corrige pas une fuite mémoire.
La Commit Limit baisse, et l’on peut perdre des options pour utiliser efficacement la RAM ainsi que la capacité à capturer des vidages.
En une phrase : avant d’abandonner une page, Windows vérifie la possibilité qu’elle soit à nouveau nécessaire et s’il existe un endroit d’où restaurer le contenu d’origine.
2. La base PFN — le grand livre côté RAM physique
La PTE vue en partie 1 représentait la traduction d’une page virtuelle vers une page physique. Le grand livre qui regarde cela depuis le côté page physique et suit « à quoi sert cette page de RAM 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
- La PTE correspondante
- Si elle est modifiée
- À quelle liste de pages elle appartient
- Des informations liées au nœud NUMA et à la priorité
Dans WinDbg, !pfn affiche les informations d’un PFN précis, et !memusage affiche l’usage de la mémoire physique et les totaux de chaque liste de pages.56 Pour observer le même monde sans débogueur noyau, Sysinternals RAMMap est disponible. Use Counts montre l’usage et la liste de pages, Priority Summary montre Standby par priorité, et Physical Pages montre l’usage par page.7
3. Relier les cinq états sur un seul schéma
Cet article traite le flux d’une page physique comme les cinq états suivants, simplifiés. À strictement parler, le Windows actuel a des états et des listes non dessinés ici — Standby par priorité, Transition, Bad, et d’autres — et Active désigne moins une seule « liste Active » que l’état d’être référencé depuis un Working Set ou similaire via une PTE valide. Même ainsi, ce schéma est plus que utile pour lire le comportement mémoire d’une application.
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 sale. Le même contenu peut revenir ; un autre usage réutilise la page directement ou passe par Free/Zeroed pour une allocation qui exige des zéros.
Code source Mermaid de la figure 1
```text flowchart LR zeroed["Zeroed\nMise à zéro"] -->|Premier Touch| active["Active / Valid\nRéférencée dans le Working Set"] active -->|Trim clean| standby["Standby\nCandidate à réemploi avec contenu"] active -->|Trim dirty| modified["Modified\nEn attente d'écriture"] modified -->|Écriture terminée| standby standby -->|Retour par soft fault| active standby -->|Jeter l'ancienne identité| free["Free\nPas encore à zéro"] standby -->|Réemploi direct ailleurs| active free -->|Pour une allocation à zéros| zeroed ```Le point le plus important de ce schéma est que quitter le Working Set et perdre le contenu ne sont pas la même chose. De plus, lorsqu’une page Standby est prise pour un autre usage, elle ne passe pas forcément par Free/Zeroed dans l’ordre. Si elle doit être remise au mode utilisateur comme nouvelle page privée demand-zero, l’ancien contenu doit être effacé ; si la page entière sera écrasée, comme 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 une PTE valide. Le processeur l’atteint par la traduction d’adresse habituelle, 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, l’usage récent de la page, et des facteurs similaires, et recadre les 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érençable via une PTE valide. Distinguez les quatre événements suivants.
- Retirer du Working Set
- Libérer le Commit
- Libérer une plage d’adresses virtuelles
- Perdre les données d’origine
Exécuter EmptyWorkingSet ou le « Trim Working Set » d’un outil ne remplace pas VirtualFree ni 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 réduit le Working Set » ne signifie pas « j’ai corrigé la fuite ».
5. Une page propre va en Standby
Même après le retrait d’une page 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. Exemples représentatifs :
- 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
Une page Standby conserve sa correspondance avec le contenu précédent. Lorsque le même processus ou un autre a besoin de ce contenu, si la page n’a pas encore été réutilisée, un défaut logiciel qui reconnecte la 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 sera écrasée par un contenu de fichier ou similaire, 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 réutilisable immédiatement sans écriture sur disque, et c’est la somme de Standby, Free et Zeroed.1
flowchart LR
accTitle: Les trois listes de pages qui composent Available
accDescr: La mémoire physique disponible est la somme de Standby, Free et Zeroed ; les pages Active référencées dans un Working Set n'y sont pas incluses
standby["Standby(candidat à réutiliser qui garde son contenu)"] --> avail["Available(mémoire physique disponible)"]
free["Free(inutilisée, non mise à zéro)"] --> avail
zeroed["Zeroed(inutilisée et mise à zéro)"] --> avail
active["Active(référencée dans le Working Set)"] -.->|Non incluse| avail
Figure 2 : Available est la somme de Standby, Free et Zeroed. Standby, qui conserve encore son contenu, compte aussi comme « disponible ».
Il n’y a donc pas de contradiction quand le Gestionnaire des tâches affiche « 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 pour les réutiliser vite comme cache si besoin, et les prend si un autre usage en a besoin.
Ne concluez pas « Free est bas, donc nous manquons tout de suite de mémoire » ; regardez ensemble Available, Commit, les défauts matériels et le délai de traitement.
6. Une page sale attend sur Modified
Quand une application écrit dans une page, ce contenu ne correspond plus au magasin de soutien d’origine. Écraser cette page sale pour un autre usage ferait perdre les données. Une page modifiée retirée du Working Set attend donc une réécriture sur Modified.
La destination de réécriture dépend du type de page.
| Type de page | Destination typique de réécriture |
|---|---|
| Page privée validée | Fichier d’échange |
| Fichier mappé inscriptible | Le fichier de données correspondant |
| Données sales du cache de fichiers | Le fichier de données correspondant |
| Page EXE/DLL propre | Aucune réécriture. Peut être relue depuis l’image d’origine |
La documentation Microsoft sur le fichier d’échange explique aussi que les .dll, .exe et fichiers ordinaires déjà présents 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 deviennent candidates au fichier d’échange.2
6.1. Le Modified Page Writer
Le Modified Page Writer est un worker système qui parcourt les pages sales soutenues par le fichier d’échange que le gestionnaire de mémoire suit, et les écrit vers le fichier d’échange.3 Côté fichier mappé, des chemins comme le Mapped Page Writer coopèrent avec le système de fichiers et le gestionnaire de cache pour réécrire vers le fichier correspondant.
L’important ici est que l’écriture n’est pas un schéma « ne rien faire jusqu’à ce que la RAM soit à 0 octet ». Windows prépare en arrière-plan des pages réutilisables plus tard, selon la liste Modified, Available, l’état du fichier d’échange et des facteurs similaires. Quand la réécriture est terminée et qu’il n’y a plus d’autres références valides, la page avance en Standby avec son contenu intact.
flowchart TB
accTitle: Chemins de réécriture d'une page modifiée
accDescr: Une page modifiée qui quitte le Working Set attend sur la liste Modified ; pour une page privée, si un fichier d'échange est configuré, le Modified Page Writer l'écrit vers le fichier d'échange, et une page de fichier mappé est réécrite vers le fichier de données correspondant par le Mapped Page Writer ou similaire, puis avance en Standby avec son contenu intact
dirty["Page modifiée sortie du Working Set"] --> modified["Attente de réécriture sur la liste Modified"]
modified -->|"Page privée(fichier d'échange configuré)"| mpw["Le Modified Page Writer écrit vers le fichier d'échange"]
modified -->|Page de fichier mappé| mapped["Le Mapped Page Writer ou similaire réécrit vers le fichier correspondant"]
mpw --> standby["Après réécriture, vers Standby avec le contenu intact"]
mapped --> standby
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 au fichier d’échange 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 et les E/S propres au fichier d’échange
Les compteurs suivants se confondent facilement ; confirmez ce qu’ils signifient.
Memory\\Page Writes/sec: le nombre d’E/S d’écriture de pagination émises pour libérer de la mémoire physiqueMemory\\Pages Output/sec: le nombre de pages écrites sur disque par ces écrituresMemory\\Page Reads/sec: le nombre d’E/S de lecture disque émises pour résoudre des défauts matérielsMemory\\Pages Input/sec: le nombre de pages entrées en RAM depuis ces lectures
Notez que Page Writes/sec et Pages Output/sec ne sont pas des compteurs qui identifient le fichier d’échange seul. Ils peuvent aussi monter sur le chemin qui réécrit des pages sales soutenues par un fichier, comme les fichiers mappés. Inversement, 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.2 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 et confirmez le fichier cible en faisant correspondre FileObject et FileName.9
Un point de plus : écrire d’abord vers le fichier d’échange ne signifie pas relire tout de suite depuis le disque. Si la page n’est pas accédée, la page réécrite peut être retirée de la RAM et la 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 le contenu précédent.
- Si le même contenu est nécessaire, elle peut revenir via un défaut logiciel
- Si un autre usage en a besoin, l’ancienne identité peut être abandonnée et elle peut être réutilisée
- Il existe des listes Standby par priorité
7.2. Free
La correspondance valide avec le contenu précédent a été perdue, et la page est allouable. Toutefois, l’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 demand-zero de la partie 1 était un cas représentatif d’obtention d’une page Zeroed disponible et de liaison à une PTE. La préparation de Free vers Zeroed se fait selon la demande et l’état du système.
Ainsi, même si « Free » et « Zeroed » semblent toutes deux inutilisées, elles diffèrent par leur préparation liée à la sécurité.
8. Le magasin de compression mémoire — créer une destination de plus dans la RAM
À partir de Windows 10, en cas de 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. Cet ensemble de pages compressées est le magasin de compression.
Dans l’implémentation précoce de Windows 10, le magasin de compression était comptabilisé dans le Working Set du processus System, mais sur le Windows actuel il apparaît dans les listes de processus du débogueur comme un processus dédié Memory Compression. Pour enquêter sur le volume de compression actuel, ne suivez donc 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
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 processeur
- 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 selon le type de page, la pression et l’historique d’accès
« En cours d’utilisation (compressé) » du Gestionnaire des tâches ne signifie pas que la compression a entièrement vidé 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 processeur 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.
flowchart LR
accTitle: Trois rôles du fichier d'échange
accDescr: Le 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 vidage sur incident système
pagefile["Fichier d'échange"] --> limit["Élargir la Commit Limit(marge côté plafond)"]
pagefile --> backing["Magasin de soutien des pages privées modifiées"]
pagefile --> dump["Réceptacle d'un vidage sur incident 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 vidages.
9.1. Élargir la Commit Limit
La Commit Limit du système est déterminée à peu près par la RAM plus le total de tous les fichiers d’échange. Sans fichier d’échange, la Commit Limit descend à un niveau un peu plus petit que la RAM installée. Quand Commit Total atteint le plafond, un nouveau Commit échoue et peut mener à une terminaison anormale d’application ou à des ennuis système.4
C’est une autre affaire que « combien de Go sont actuellement écrits dans pagefile.sys ». Le fichier d’échange est aussi une marge côté plafond qui soutient la promesse de 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 souvent utilisés.4 Désactiver le fichier d’échange réduit l’option de retirer de telles pages de la RAM. On ne peut pas simplement dire « c’est rapide parce qu’il n’y a pas de pagination sortante ».
9.3. Soutenir les vidages sur incident système
Pour produire Memory.dmp lors d’un incident système, il faut un fichier d’échange ou un fichier de vidage dédié capable de soutenir la méthode de vidage choisie.2 Un vidage mémoire complet, un vidage mémoire noyau et un vidage mémoire automatique diffèrent par la quantité requise.
Dans un environnement où l’on enquête sur les incidents, supprimer le fichier d’échange seulement pour gagner de l’espace peut signifier que les preuves manquent au moment où on en a le plus besoin. Pour les méthodes de collecte, voir aussi « Introduction à la collecte des dumps de crash Windows - WER/ProcDump/WinDbg ».
10. La bonne taille n’est pas uniforme
Il ne faut pas décider la taille du fichier d’échange à partir d’une formule fixe comme « 1,5 fois la RAM » seulement. 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.2
- Le System Commit Charge de pointe
- Le vidage sur incident système dont vous avez besoin
En pratique, raisonnez dans l’ordre suivant.
10.1. Partir du géré par le système comme base
La valeur par défaut de Windows est géré par le système. Il grandit et rétrécit selon la RAM installée, la demande de Commit, les exigences de vidage, et ainsi de suite. 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 longtemps les compteurs suivants dans PerfMon.
Memory\\Committed BytesMemory\\Commit LimitMemory\\% Committed Bytes In UseMemory\\Modified Page List BytesPaging File(*)\\% UsageMemory\\Available MBytesMemory\\Page Reads/secMemory\\Page Writes/sec
Incluez les pointes réelles dans 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 performance de stockage. Rester collé au plafond, en revanche, 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é.2
10.3. Décider d’abord l’exigence de vidage
Décidez si vous avez besoin d’un vidage mémoire complet, si un vidage mémoire noyau suffit, ou si vous utiliserez un fichier de vidage dédié. Si vous passez à une taille fixe, elle doit satisfaire non seulement le Commit de pointe mais aussi l’exigence de vidage.
11. Voyez par vous-même
11.1. Regarder les listes de pages dans RAMMap
Démarrez RAMMap en 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 présentes en RAM.
En essai, lisez une fois un fichier local assez grand, terminez la lecture, puis Refresh. Les pages de ce fichier peuvent rester dans File Summary ou du côté Standby. Relire le même fichier peut restaurer des pages non encore réutilisées sans E/S disque, ou avec peu d’E/S. Les résultats varient selon la pression mémoire, l’antivirus et la taille du fichier, donc regardez la direction de la transition d’état plutôt qu’un seul jeu de chiffres.
Notez que le menu Empty de RAMMap change artificiellement l’état du système. Ne videz pas Standby comme amélioration de performance en production ; utilisez-le seulement sur 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 contre le binaire que vous avez sous la main et confirmez la version et l’usage affichés.
.\\testlimit64.exe -?
Ce qui suit vise Testlimit v5.24. Dans la syntaxe officielle v5.24, -m [MB] alloue la quantité de mémoire indiqué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 MiB, -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
.\\testlimit64.exe -d 64 -e 1 -c 8
Pendant l’exécution, enregistrez en même temps ce qui suit.
- « Validé X/Y » du Gestionnaire des tâches
- Active, Modified et Standby de RAMMap
Memory\\Committed BytesMemory\\Commit LimitMemory\\Available MBytesMemory\\Modified Page List Bytes
Si vous reproduisez réellement l’épuisement du Commit, ne le faites pas sur le PC hôte ; augmentez le nombre 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 de façon anormale et perdre des journaux. Le but n’est pas de déstabiliser le système d’exploitation ; c’est d’observer qu’en approchant 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 selon que la ligne de base de Commit privé au processus et la répartition 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. À un nouvel accès, la page revient par un défaut de page.
12.3. « L’usage du fichier d’échange est 0, donc il est inutile »
Le fichier d’échange soutient non seulement le volume d’écriture actuel mais aussi la Commit Limit et les vidages sur incident. Décider de le supprimer à partir de l’usage quotidien seul fait perdre la marge de pointe et les preuves au moment de l’échec.
12.4. « D’abord la compression mémoire, 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 processeur, 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 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 sale 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.3
- Available est la somme de Standby, Free et Zeroed ; un Standby élevé à 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 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 vidages sur incident système.42
- La taille appropriée est déterminée par le Commit de pointe et les exigences de vidage ; elle ne peut pas se décider par un multiplicateur uniforme.2
- 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 les mappings 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
- Les profondeurs de la mémoire Windows (partie 1) — L’instant où une adresse virtuelle devient de la RAM physique
- Que représente réellement la « mémoire utilisée » sous Windows ── Bien lire Working Set, Private Bytes, Commit et le fichier d’échange
- Les profondeurs de l’E/S Windows (épisode 4) — Le gestionnaire de cache : quand votre WriteFile atteint-il vraiment le disque ?
- Introduction à la collecte des dumps de crash Windows - WER/ProcDump/WinDbg
- Process Explorer / Handle / VMMap en pratique — Diagnostiquer les blocages, fuites et « fichiers en cours d’utilisation » à partir de l’état du système à cet instant précis
Domaines de conseil associés
KomuraSoft LLC mène des enquêtes sur la pression mémoire des applications Windows, l’épuisement du Commit, la pagination, la croissance du Working Set et la conception de la collecte de vidages sur incident.
- Développement d’applications Windows
- Investigation de bugs et analyse des causes
- Migration d’actifs hérités
- Nous contacter
Références
-
Microsoft Learn, MEMORYSTATUSEX structure. Sur le fait que
ullAvailPhysest la mémoire physique réutilisable immédiatement sans écriture sur disque, et qu’elle est la somme des listes Standby, Free et Zeroed. ↩ ↩2 ↩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 exigences de vidage et n’est pas généralisable ; 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
-
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 sales soutenues par le fichier d’échange et les écrit. ↩ ↩2 ↩3
-
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 vidages sur incident système. ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, !pfn (WinDbg). Sur le fait de pouvoir afficher l’état, les références, l’adresse PTE et plus d’une entrée PFN spécifiée. ↩
-
Microsoft Learn, !memusage (WinDbg). Sur le fait de pouvoir totaliser l’usage de la mémoire physique et des états de page comme Zeroed, Free, Standby, Modified et Active. ↩
-
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 de la mémoire physique et les listes de pages. ↩ ↩2
-
Microsoft Learn, Working Set. Sur le fait que le gestionnaire de mémoire recadre le Working Set pour créer de la mémoire disponible, et que l’on peut résoudre par un défaut logiciel des pages qui restent en Transition ou dans le Working Set d’un autre processus. ↩ ↩2
-
Microsoft Learn, FileIo_Name class. Sur le fait que les événements File I/O ETW ont FileObject et FileName, de sorte que FileObject peut être mis en correspondance avec les événements Disk I/O pour identifier les E/S vers le fichier cible. ↩
-
Windows Insider Blog, Announcing Windows 10 Insider Preview Build 10525. Sur l’implémentation précoce du magasin de compression de Windows 10 qui plaçait l’ensemble de pages compressées en RAM dans le Working Set du processus System et réduisait les écritures sur disque. ↩ ↩2
-
Microsoft Learn, Find Process ID (PID) in Windows. Sur des exemples de listes de processus des Debugging Tools for Windows actuelles qui montrent un processus
Memory Compressionavec un PID distinct sous System. ↩ -
Microsoft Learn, Testlimit - Sysinternals. Sur la syntaxe officielle de Testlimit v5.24 dans laquelle
-malloue de la mémoire,-dalloue et Touch,-eest l’intervalle d’allocation et-cest le nombre d’allocations,-cétant spécifié en dernier. ↩
Articles associés
Articles récents partageant les mêmes étiquettes, pour approfondir des sujets proches.
Que représente réellement la « mémoire utilisée » sous Windows ── Bien lire Working Set, Private Bytes, Commit et le fichier d'échange
La « mémoire » du Gestionnaire des tâches, Working Set, Private Bytes et Commit ne représentent pas la même valeur. Cet article explique ...
Les profondeurs de la mémoire Windows (partie 1) — L'instant où une adresse virtuelle devient de la RAM physique : un défaut de page de bout en bout
Cet article relie VirtualAlloc, les VAD, les tables de pages, le TLB, les défauts demand-zero et les défauts durs pour expliquer l'instan...
Les profondeurs de la mémoire Windows (partie 3) — Objets section et copie sur écriture : ce que sont vraiment les DLL et le mappage de fichiers
Cet article relie objets section, mappages image et données, cache partagé et copie sur écriture pour expliquer comment DLL et mémoire pa...
Les profondeurs de la virtualisation Windows (partie 3) — Des machines virtuelles qui démarrent en quelques secondes : pourquoi WSL2, Windows Sandbox et les conteneurs sont si légers
Pourquoi WSL2 et Windows Sandbox démarrent-ils en quelques secondes et paraissent-ils si légers ? Cet article explique les mécanismes, de...
Les profondeurs de la virtualisation Windows (partie 2) — Une mémoire invisible même au noyau : comment fonctionnent VBS, HVCI et Credential Guard
Lors d'une installation propre sur un matériel compatible, VBS est activée par défaut et utilise l'hyperviseur et SLAT pour créer une iso...
Sujets associés
Ces pages replacent le sujet dans un contexte plus large de services et de décisions.
Thèmes techniques Windows
Portail des sujets sur le développement Windows, l'analyse des incidents et la valorisation des actifs existants.
Services liés à ce sujet
Cet article est directement lié aux services suivants.
Développement d'applications Windows
Applications métier, intégration d'équipements et outils de communication, des besoins au développement.
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 vidages sur incident. 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 vidage.
- 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.