Il est 04:26

La Mémoire Virtuelle

La mémoire virtuelle de Windows : mythes et réalité
Vous pouvez retrouver l'auteur, pgriffet, sur les forums de PCAstuces

J'ai fait un sujet récemment sur la mémoire virtuelle pour Win 9x/ME, j'avais promis de compléter pour XP dès que je trouvais les renseignements. Je précise directement que contrairement à mon sujet sur 9x, je n'ai presque pas d'expérience sous XP, j'ai pu utiliser quelques fois un PC avec XP mais sans avoir la possibilité de tester le fonctionnement de la mémoire. Ce qui suit est basé sur un texte trouvé sur un site (en anglais) très bien documenté sur Windows, c'est d'ailleurs suite à un article de ce site sur 9x que j'avais eu l'idée de faire le sujet d'il y a quelques mois. J'ai gardé la substance en changeant la forme.

Je n'ai pas pour habitude de répondre à des questions sur des sujets que je ne connais pas ou que je n'ai pas testés. Encore moins de poster des sujets. Ce post est donc une exception à la règle, disons qu'il y a tout de même beaucoup de choses en commun entre 9x et XP, ce qui me permet d'en parler. Je réponds ainsi à 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), 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 webmaster) é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 faite par essai/erreur et par l'expérimentation quotidienne.

Voici un autre lien de ce site où j'avais posé des questions à propos de la MV sous XP : http://www.aumha.org/forum/viewtopic.php?t=409

Le terme "swap file" n'est plus utilisé (pour la série NT/2K/XP), on parle plutôt de "page file" (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. [confus]
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 connections à Internet, etc.

Petit rappel de ce qu'est la MV. Un processeur 32 bits peut accéder jusqu'à 4 Go 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.

Qu'est-ce 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-paginable", ç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.

- 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.

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 page file inutilement et les performances sont réduites, exactement l'inverse de l'effet attendu.

Faut-il laisser le page file sur le disque C: ?

Si on a plus d'un disque physique, on peut mettre le page file 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 "page file" disséminés sur différents disques.
Si vous utilisez la possibilité du minidump, il faut alors laisser le page file 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).

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 page file".

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 page file, c'est dans la RAM qu'elles seront allouées, ce qui va rapidement conduire à un engorgement inutile de la RAM.

Quelle taille pour le page file ?

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 PCAstuces 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 3 mots.
Pour la taille fixe du page file, 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 page file 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 page file change de taille. Cette valeur donnera les avantages prétendus d'un page file 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 page file ne sera pas réellement actif. Il n'y a pas d'inconvénient dans le fait d'avoir cette place disponible dans le page file.

Les valeurs par défaut que XP alloue au page file ne tiennent pas compte d'un paramètre important : peu importe la charge de travail, le besoin en adresses virtuelles (RAM + page file) 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 page file sera plus grande (et non plus petite) que sur une machine avec beaucoup de RAM. Malheureusement, XP va assigner un énorme page file avec un PC qui a beaucoup de RAM et un petit page file avec peu de RAM.

La taille du page file 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 + page file. 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 ± 500 MB (RAM + page file).

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

Si on a 128 MB de RAM : on met 400 MB de page file
Si on a 256 MB de RAM : on met 250 MB de page file
Si on a plus de 256 MB de RAM : on met 100 MB de page file

Dans tous les cas de figure, donc même avec un 1 GB de RAM, on aura un page file 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 qu'on a spécifié 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 page file. 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 "page file 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 page file 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 page file 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 page file, 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 page file.

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 3 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 page file 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 page file (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 page file 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 page file 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 page file, taille ET usage et confondent taille avec usage. Fin de la parenthèse 9x.

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 page file 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 page file. 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 3 utilisateurs, ça fait 256 MB x 3, soit 768 MB de page file.

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 page file 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 page file, c'est uniquement de la réservation d'espace disque que réclame XP.
- le page file 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. Cela se fait ici : Panneau de configuration -> Système -> onglet Avancé -> Paramètres de performances -> onglet Avancé, Modifier la Mémoire virtuelle.
On peut alors détruire le fichier pagefile.sys (qui a les attributs "caché") sur chacun des disques, si on a plusieurs page file. Puis, on peut réactiver la MV et redémarrer afin que XP recrée ce fichier.
- le page file 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 : ça peut être causé par Norton Live update 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 page file 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 page file.

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 2 articles qu'on trouve les conseils erronés sur les valeurs du page file mais il y a d'autres choses valables.
{Configuring Page Files for Optimization and Recovery} pour NT/2K

Un outil pour tracer l'usage du page file (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.

Je répète que je n'ai pas pu tester ce qui est indiqué mais j'ai entière confiance en les gens qui ont publié. Vous pouvez évidemment commenter et poser des questions, je ne suis pas sûr de pouvoir y répondre mais je ferai ce que je peux pour obtenir une réponse concrète.
N'oubliez pas que personne ne peut vous donner les valeurs optimales du page file, 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 CPU. 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 !

-------------------------
Pierre