La mémoire virtuelle sous Windows

pgriffet

La mémoire virtelle de Windows est un sujet relativement sombre. On croit souvent le maîtriser, mais celle-ci se révèle plus complexe que ce que l'on pourrait penser …

- Titre : La mémoire virtuelle sous Windows

- Auteur : pgriffet

- Parution : 28 janvier 2004

- Mise à jour : 20 avril 2020

- Licence : Ce document est la propriété de pgriffet. Pour toute modification, utilisation ou diffusion, veuillez le contacter par MP.

Sommaire

- I. Mémoire virtuelle sous XP : mythes et réalité

- II. Qu'est-ce que XP écrit dans la RAM ?

- III. Pourquoi y a-t-il si peu de RAM libre ?

- IV. Faut-il laisser le pagefile sur le disque C: ?

- V. Peut-on désactiver la MV si on a beaucoup de RAM ?

- VI. Quelle taille pour le pagefile ?

- VII. Qu'en est-il de la « bascule rapide utilisateur » ?

- VIII. Problèmes avec la MV

- IX. Conclusion

I - Mémoire virtuelle sous XP : mythes et réalité

Cet article va tenter de répondre à de nombreuses questions posées ici et ailleurs, la documentation en français au sujet de la gestion mémoire de XP est assez rare, pour le moment du moins.

J'abrège mémoire virtuelle en MV, par facilité.

Pendant un an, certaines personnes ont testé XP dans des conditions très différentes et il y a des publications sur le fonctionnement de la MV, permettant de bien paramétrer la taille du fichier d'échange.
Les gens qui ont publié ici http://www.aumha.org/a/xpvm.htm sont des MVP (Most Valuable Professional - MVP developpez.com : DrQ, LeDuke et neo.51), un titre décerné par MS à des bénévoles qui ont montré leur bonne connaissance des produits MS et qui aident dans les newsgroups. Ils sont souvent anglophones, mais il y en a quelques-uns qui sont francophones, je pense à JC Bellamy dont le site est parfois mentionné sur ce forum. Je précise donc que les gens qui ont publié ne font pas partie de MS, mais qu'ils ont des liens privilégiés avec certaines personnes de MS sans pour ça avoir accès à des informations « sensibles ». Je veux dire qu'ils ont parfois des renseignements « de source anonyme », mais qui sont valables, il y a une espèce d'arrangement entre MS et eux pour ne pas divulguer certaines informations ou certaines sources. Néanmoins, Jim Eshelman (le webmestre) écrit ceci à propos de la MV (je traduis) :

« Nous avons des contacts avec des programmeurs de MS ayant travaillé sur XP et jusqu'à présent, ou bien ils ne comprennent pas nos questions, ou bien ils ne connaissent pas les réponses ou bien, pour des raisons inexplicables, ils refusent de répondre à ces questions, même sous couvert d'anonymat. C'est frustrant et mystérieux, même des MVP comme nous n'ont pas accès à tout. Donc l'investigation s'est déroulée par essai/erreur et par l'expérimentation quotidienne. »

Le terme « swap file » n'est plus utilisé (pour la série NT/2K/XP), on parle plutôt de « pagefile » (fichier de pagination), le fichier lui-même s'appelant pagefile.sys (attribut « caché »).

Ce qui a poussé l'auteur de l'article à publier, c'est que le paramétrage par défaut de la MV que MS propose ne tient pas compte de la manière spécifique dont XP gère la mémoire.
Ce qui est un comble évidemment, mais qui n'est pas étonnant en soi, MS nous a habitués à ne pas paramétrer par défaut correctement toute une série de valeurs, que ce soit pour la mémoire, la taille des paquets IP (IPMTU) utilisés pour les connexions à Internet, etc.

Petit rappel de ce qu'est la MV. Un processeur 32 bits peut accéder jusqu'à 4 GB de mémoire, une partie de RAM et une autre d'espace disque, celle-ci est évidemment moins rapide. La MV est une espèce de prolongement de la RAM, pour schématiser.
Pour qu'un programme puisse être exécuté, il DOIT se trouver en RAM. Donc, lorsqu'un programme a été placé dans le fichier de pagination et qu'il doit être exécuté, le gestionnaire de mémoire fait de la place dans la RAM en déplaçant sur disque (dans la MV) un autre programme qui n'est pas actif à ce moment-là. Ce procédé est assez lent et provoque des ralentissements, c'est pour ça qu'on conseille souvent une quantité de RAM assez élevée pour éviter l'écriture sur disque de ces programmes.

II - Qu'est-ce que XP écrit dans la RAM ?

- La zone non paginable, c'est-à-dire des programmes qui sont nécessaires au bon fonctionnement de XP. Il y a donc une zone de la mémoire qui ne sera jamais paginée. Lorsqu'on a un message d'erreur indiquant « défaillance de page dans une zone non master », ça indique très souvent un problème hardware (barrettes mémoire défectueuses ou disque dur endommagé). Mais certains logiciels comme Norton peuvent aussi utiliser cette zone, donc, si la défaillance apparaît juste après une installation de logiciel, on peut le désinstaller et voir si l'erreur se reproduit.
Pour tester votre RAM avec des logiciels spécialisés.

- Le reste de la RAM est appelé « Page Pool », qu'on pourrait traduire par « réservoir de pages mémoire ». XP y stocke les programmes que nous utilisons, des bouts de fichiers qui ont été modifiés ainsi qu'une taille fixe pour le cache disque, c'est-à-dire les fichiers récemment lus ou écrits, mais qui ne sont plus utilisés. S'il reste de la RAM disponible, XP va agrandir le cache disque.

III - Pourquoi y a-t-il si peu de RAM libre ?

On va tordre le cou ici à des mythes concernant les programmes qui libèrent la RAM sous XP. En effet, XP va utiliser toute la mémoire RAM possible selon l'adage « de la mémoire RAM libre est de la mémoire gaspillée ».
En pratique, imaginez que vous ouvrez un gros fichier avec Word. XP va charger Word en mémoire, puis, votre fichier. Vous quittez Word, XP va laisser en mémoire le programme Word et votre fichier, dans la zone du cache disque. Il ne les éjectera que si un autre programme doit être exécuté et qu'il n'y a plus de RAM disponible, le cache disque va alors diminuer de taille. Le terme « mémoire RAM libre » est donc impropre, il est plus correct de dire « mémoire pour laquelle XP n'a pas encore trouvé d'usage ». Voilà pourquoi les programmes censés libérer de la RAM sont des leurres, au pire, ils font grossir le pagefile inutilement et les performances sont réduites, exactement l'inverse de l'effet attendu.

IV - Faut-il laisser le pagefile sur le disque C: ?

Si on a plus d'un disque physique, on peut mettre le pagefile sur un autre disque que le C. Mais il est conseillé de garder un morceau (environ 2 MB de taille initiale avec un maximum de 50 MB) sur le C, de manière à pouvoir être utilisé en urgence. On peut en effet avoir plusieurs « pagefile » disséminés sur différents disques. L'intérêt est d'utiliser le disque le plus rapide (temps d'accès le plus court, vitesse de rotation…) pour y placer le pagefile pour gagner un peu en performance.
Si vous utilisez la possibilité du mini dump, il faut alors laisser le pagefile sur le C avec une taille minimum de 200 MB (pour un dump du kernel) ou de la taille de la RAM (pour un dump de toute la mémoire).

V - Peut-on désactiver la MV si on a beaucoup de RAM ?

Littéralement parlant, la MV est toujours opérationnelle et ne peut être désactivée. Donc, quand on dit qu'on veut désactiver la MV, ça signifie « indiquer à XP de ne pas utiliser d'espace disque pour le pagefile ».
Ce faisant, on gaspille beaucoup de RAM. En effet, la manière dont XP gère la mémoire de ce point de vue est différente de 9x/ME. La raison est que certains programmes allouent de grosses quantités de mémoire quand on les exécute, même si ces programmes ne vont pas utiliser cette mémoire (cette quantité peut parfois grimper jusqu'à plusieurs centaines de MB). Ces adresses mémoire doivent être allouées quelque part et sans pagefile, c'est dans la RAM qu'elles seront allouées, ce qui va rapidement conduire à un engorgement inutile de la RAM.

VI - Quelle taille pour le pagefile ?

Voici où aller pour changer la taille :
Panneau de configuration -> Système -> onglet Avancé -> Paramètres de performances -> onglet Avancé, Modifier la Mémoire virtuelle.

Si on utilise la « bascule rapide utilisateur », il y a d'autres paramètres expliqués plus loin.

Quelques mythes au sujet de la taille de ce fichier :

- il doit avoir une taille mini égale à la taille maxi pour ne pas se fragmenter ;

- il doit être 2,5 fois plus gros que la taille de la RAM (ou un autre multiple).

Ces deux affirmations sont fausses dans un système d'exploitation moderne, avec un seul utilisateur. On les retrouve malheureusement un peu partout, et même sur des sites très sérieux et réputés pour la qualité de l'information, c'est d'autant plus dommage et MS ne contribue pas à briser ce mythe, voir les liens plus bas.

J'en profite pour dire que ces mythes sont tenaces sur Internet aussi puisque je viens de lire encore aujourd'hui que quelqu'un conseille 2,5 fois la quantité de la RAM en valeur maxi. Il se pourrait que, par hasard, cette règle convienne à une personne. Mais comme je l'explique ci-dessous, il n'y a pas de règles standard pour la taille de la MV, il faut arrêter d'imaginer qu'on peut en une phrase donner un bon conseil à quelqu'un à ce sujet. La MV est quelque chose de très complexe qu'on ne résume pas en trois mots.
Pour la taille fixe du pagefile, il est temps de tordre le cou à cette autre rumeur qui veut que les performances se dégradent à cause d'une fragmentation de ce fichier. C'est une bêtise qu'on voit encore trop souvent, car c'est une méconnaissance totale du fonctionnement de la MV que d'imaginer qu'il se fragmente parce qu'il a l'air d'avoir grossi en taille.

XP va agrandir le pagefile si la valeur minimale est trop basse et le faire diminuer s'il est plus grand que nécessaire. C'est donc payant de mettre une valeur minimale suffisamment grande pour éviter que le pagefile change de taille. Cette valeur donnera les avantages prétendus d'un pagefile de taille fixe. Cette taille minimale suffisamment grande servira par exemple si on ouvre exceptionnellement un très gros fichier, mais aussi pour assigner les pages de MV réservées par des programmes, mais jamais utilisées. Jusqu'au moment où elles vont être utilisées -si elles le sont-, le pagefile ne sera pas réellement actif. Il n'y a pas d'inconvénient dans le fait d'avoir cette place disponible dans le pagefile.

Les valeurs par défaut que XP alloue au pagefile ne tiennent pas compte d'un paramètre important : peu importe la charge de travail, le besoin en adresses virtuelles (RAM + pagefile) ne dépend pas uniquement de la quantité de la RAM.
Ce qui signifie que pour un PC avec peu de RAM, la taille du pagefile sera plus grande (et non plus petite) que sur une machine avec beaucoup de RAM. Malheureusement, XP va assigner un énorme pagefile avec un PC qui a beaucoup de RAM et un petit pagefile avec peu de RAM.

La taille du pagefile dépend fort de la charge de travail.
Si on utilise uniquement un traitement de texte et un gestionnaire de mail, on peut se contenter d'une petite quantité de RAM + pagefile. C'est ce que j'appelle une charge de travail « normale ».
Si on manipule de gros fichiers graphiques ou si on fait du montage vidéo, on aura besoin de beaucoup d'adresses virtuelles.

Pour une charge de travail « normale », on conseille ¦#177; 500 MB (RAM + pagefile).

Ce qui donne les chiffres suivants pour la valeur minimale du pagefile :

- si on a 128 MB de RAM : on met 400 MB de pagefile ;

- si on a 256 MB de RAM : on met 250 MB de pagefile ;

- si on a plus de 256 MB de RAM : on met 100 MB de pagefile.

Dans tous les cas de figure, donc même avec un 1 GB de RAM, on aura un pagefile de minimum 100 MB.

Comme taille maximale, on conseille 700 ou 800 MB ou même plus, si on a assez de place disque. Vous pouvez doubler cette valeur si vous êtes dans la catégorie montage vidéo et fichiers graphiques. Ce n'est que de l'espace disque qui pourrait être alloué, il faut évidemment tenir compte de ce qu'il vous reste de libre, mais les HD d'aujourd'hui sont énormes.

Si on constate via Explorer que la taille réelle du fichier pagefile.sys est supérieure à celle que l'on a spécifiée comme taille minimale, c'est que cette valeur minimale est trop basse.
On peut tester s'il est nécessaire de rajouter de la RAM en mettant une taille initiale assez basse, disons 50 MB. Puis, on utilise ses applications courantes et on vérifie la taille du pagefile. S'il est toujours à 50 MB, il n'est pas nécessaire de rajouter de la RAM.
Ces paramètres ont changé en comparaison avec les versions précédentes de NT, les valeurs indiquées dans le gestionnaire de tâches, onglet performance « pagefile utilisé » incluent les pages réservées, mais qui ne sont pas (encore ?) utilisées. Cette valeur donne une bonne idée de la taille maximale du pagefile, mais pas de la taille minimale.
En clair, ça veut dire qu'on pourrait avoir dans le gestionnaire de tâches une valeur de 170 MB de pagefile utilisé, mais le fichier pagefile.sys aurait une taille de 40 ou 50 MB seulement, la différence entre 50 et 170 étant les fameuses pages réservées. Ne vous étonnez donc pas de voir une telle différence qui n'existe pas avec les anciennes versions de Windows.
Il existe un utilitaire pour tracer l'usage réel du pagefile, les liens sont en bas de page. La valeur maximum renseignée après plusieurs jours d'observation pourra servir de base comme valeur minimale du pagefile.

J'ai trouvé sur un forum francophone une autre manière de voir la consommation de RAM. Ouvrir le gestionnaire de tâches (par CTRL+ALT+SUPPR) -> onglet Performances. Il y a une partie « charge dédiée » avec trois valeurs : Total (=maxi actuel), Limite (=maxi possible), Pic (=maxi jusque maintenant).

Ensuite, démarrer un maximum d'applications, de manière à saturer la RAM, tout en essayant de rester dans une situation plausible, je veux dire que vous pouvez lancer les applications que vous utilisez habituellement, mais pour une fois, lancez-les toutes en même temps. Cela va provoquer une demande énorme de RAM et la valeur « Pic » devrait vous donner une bonne idée de la valeur Maxi à spécifier pour la MV.
Attention, je n'ai pas testé cette situation, je ne sais pas si elle est valide. Je l'ai indiquée afin que vous la testiez, merci d'indiquer vos commentaires avec les valeurs « Pic », mais aussi votre quantité de RAM et les valeurs de MV mini et maxi du pagefile au moment du test, j'indique plus bas comment accéder aux paramètres de la MV. De toute façon, une valeur maxi très élevée ne fait jamais de mal, ça permet de pallier une situation extrême.

Si vous êtes débutant, je vous conseille de passer au paragraphe suivant, car celui-ci est un peu technique.

En fait, ces mythes viennent d'une mauvaise connaissance du fonctionnement de la MV. J'ouvre une parenthèse Win9x, car c'est depuis ce moment-là que le mythe du swap de taille fixe est né.
Déjà sous Win9x, beaucoup de gens s'imaginaient que leur pagefile (fichier swap) était très utilisé par Windows, car ils voyaient sa taille changer sans arrêt, il grandissait quand on démarrait des applications et diminuait quand on les arrêtait. C'est un raisonnement logique que je comprends parfaitement, mais la réalité est tout autre. La seule chose qui prouve qu'un pagefile est utilisé, c'est son usage et non sa taille.
Pour faire simple, un usage = 0 pendant plusieurs jours signifie que vous avez assez de RAM, en rajouter n'apporterait rien.
Il est courant sous 9x d'avoir un swap de 100 MB mais son usage est à zéro. C'est avec l'utilitaire sysmon que vous pourrez le constater. Ce qui veut dire que si vous voyez votre fichier swap qui passe de 40 MB à 100 MB, mais toujours avec un usage à zéro, Windows n'a rien écrit dedans, il s'est contenté d'allouer de la place, comme une réservation. J'ai déjà vu mon swap passer de 0 MB à 85 MB en une fraction de seconde, comment imaginer que Windows ait écrit 85 MB en si peu de temps ? L'usage était toujours à 0 et Windows a juste réservé de la place en mettant la FAT à jour. L'argument « performances » mis en avant par les partisans du pagefile de taille fixe s'écroule du coup. Ceux qui continuent à prétendre que c'est mieux n'ont pas pris la peine de tester pendant une période assez longue les valeurs du pagefile, taille ET usage et confondent taille avec usage. Fin de la parenthèse 9x.

VII - Qu'en est-il de la « bascule rapide utilisateur » ?

Cette fonctionnalité permet à plusieurs utilisateurs de travailler sur le même PC, comme si c'était des PC différents. Mais pour ça, il faut sauver sur disque les données en RAM de l'utilisateur non actif, le pagefile doit alors être plus gros que ce qui est préconisé ci-dessus. Il est difficile de donner une valeur adéquate, c'est seulement en expérimentant qu'on trouvera la bonne taille du pagefile. On peut commencer en mettant comme taille minimale l'équivalent de la moitié de la RAM pour chaque utilisateur. Ce qui signifie que si on a 512 MB de RAM et qu'on a trois utilisateurs, ça fait 256 MB x 3, soit 768 MB de pagefile.

VIII - Problèmes avec la MV

XP signale parfois des messages du genre « mémoire insuffisante » ou « mémoire virtuelle insuffisante », voici certaines causes possibles :

- la taille maximale pour le pagefile est trop basse ou l'espace disque encore disponible est trop faible. Voir ci-dessus l'explication concernant la manière dont XP gère le pagefile, c'est uniquement de la réservation d'espace disque que réclame XP ;

- le pagefile est corrompu, peut-être lors d'un mauvais shutdown. Pour régler ce problème, il faut désactiver la MV (en cliquant dans la case prévue) et redémarrer XP.
On peut alors détruire le fichier pagefile.sys (qui a les attributs « caché ») sur chacun des disques, si on a plusieurs pagefile.sys. Puis, on peut réactiver la MV et redémarrer afin que XP recrée ce fichier ;

- le pagefile a été mis sur un disque différent que le C, mais sans laisser un minimum sur le C (voir ci-dessus) ;

- il y a un problème avec des logiciels extérieurs à XP : Norton Live update peut en être la cause, mais aussi par une ancienne version de l'« Application Accelerator » d'Intel (avant 2.1), il faut le désinstaller et charger la mise à jour à partir du site d'Intel ;

- il peut y avoir un problème de pilote pour les disques durs IDE, il faut supprimer le contrôleur disque dans le gestionnaire de périphériques et redémarrer afin que le Plug and Play le redétecte ;

- avec un système de fichiers en NTFS, les permissions pour le répertoire racine du disque où a été créé le pagefile doivent être « Full control » pour SYSTEM. Si ce n'est pas le cas, il se peut qu'au démarrage, on ait un message disant qu'il n'est pas possible de créer un pagefile.

Voici quelques liens vers la base de connaissances de MS (en anglais) :
{How to Set Performance Options}
{How to Configure Paging Files for Optimization & Recovery in Win XP}
pour XP, c'est dans ces deux articles qu'on trouve les conseils erronés sur les valeurs du pagefile, mais il y a d'autres choses valables.

{Configuring pagefiles for Optimization and Recovery} pour NT/2K

Un outil pour tracer l'usage du pagefile (pour 2K et XP)
http://billsway.com/notes_public/WinXP_Tweaks ça s'appelle 'WinXP-2K_Pagefile'
http://www.dougknox.com/xp/utils/xp_pagefilemon.htm C'est une version compilée en VBasic.

IX - Conclusion

N'oubliez pas que personne ne peut vous donner les valeurs optimales du pagefile, vous êtes les seuls à savoir ce que vous faites sur votre PC et les valeurs indiquées ci-dessus le sont à titre indicatif. Vous pouvez par exemple utiliser votre PC de manière « bureautique » pendant un certain temps et puis, vous mettre à faire du montage vidéo, de la manipulation de grosses images, etc., c'est-à-dire des applications très gourmandes en ressources mémoire et processeur. Ce qui va vous amener à modifier les valeurs qui ne sont plus valables puisque vous avez changé l'usage de votre PC.
Ce sujet n'a pour ambition que de vous guider et d'éclaircir un peu le brouillard autour de la gestion mémoire.
Merci de m'avoir lu jusqu'au bout !