Gestion mémoire et swap sous
Win9x/ME (Réagir sur le
sujet)
Comme beaucoup de gens ont encore Win9x/ME, la gestion
mémoire reste d'actualité, pour un certain temps encore. Les informations
que je vous donne proviennent de ma propre expérience mais aussi de sites
et de forums français et anglophones, je donne chaque fois la source afin
que vous puissiez compléter vos connaissances.
Pour que ce sujet
soit accessible à tous, je vais essayer d'être le moins technique possible
mais à certains moments, je n'aurai pas d'autre choix que de l'être.
Lorsque je parlerai de mémoire virtuelle, j'abrégerai en MV. J'emploie
aussi le terme de swapfile ou fichier d'échange pour désigner le fichier
que Windows utilise pour la MV.
La première chose à faire est de se
poser un certain nombre de questions. En effet, je n'ai pas de solution
miracle qui fonctionnerait pour tout le monde. C'est normal puisque chacun
a un usage bien spécifique de son PC et qu'il n'y a pas deux situations
identiques. De plus, si vous utilisez aujourd'hui votre PC d'une certaine
manière (je veux dire les logiciels que vous utilisez), cela peut changer
avec le temps. Vous pourriez découvrir un logiciel qui vous plaît mais qui
a pour particularité d'être gourmand en mémoire et/ou en ressources
mémoire. J'explique plus loin la confusion entretenue par MS entre mémoire
RAM et ressources mémoire. Ce nouveau logiciel va donc avoir un impact
sur le fonctionnement de Windows et il faudra sans doute revoir certains
paramètres. Quelle conclusion tirer de ce que je viens de dire ? C'est que
personne ne peut donner de solution idéale, moi pas plus qu'un autre. Je
peux juste vous donner des pistes et ce qu'il faut surveiller pour
comprendre (un peu) le fonctionnement de la mémoire. Les questions à se
poser sont les suivantes :
- Quelle est la quantité de mémoire RAM
dans mon PC ? - Quel est l'usage habituel que je fais de mon PC (quels
logiciels j'utilise régulièrement) ? - Est-ce que j'ai des messages
d'erreur de ce genre "ressources insuffisantes", "mémoire trop basse"
?
D'autres questions que je lis souvent :
- Dois-je rajouter
de la RAM pour que mon PC soit plus rapide ? - Mon fichier d'échange
est sans doute fragmenté, est-ce que ça diminue les performances ? -
C'est quoi la mémoire virtuelle, ça sert à quoi ?
Il faut également
casser quelques mythes entretenus et que je lis quasi chaque semaine ici,
sur d'autres forums et même MS se plante royalement avec les valeurs par
défaut pour la MV sous XP. A ce sujet, je vais poster un de ces jours un
article de la même veine que celui-ci mais uniquement pour
XP.
FAUX
Win9x/ME ne peuvent gérer plus de 128 MB
de RAM
C'est très bien expliqué par JC Bellamy, il n'y a rien à
rajouter.
http://www.bellamyjc.net/fr/windows9x.html#maxRAM
Le
fichier swap doit être de taille fixe et égal à deux fois et demie (ou un
autre multiple) la quantité de RAM
C'était valable pour les PC
avec 8 à 16 MB de RAM mais aujourd'hui, c'est une ineptie puisque le
principe même de la MV est de pallier à un manque de RAM. Avec ce
principe, quelqu'un ayant 1 GB de RAM devrait créer un swapfile de 2 GB,
c'est totalement absurde.
VRAI
Il y a une limite à
la quantité de RAM que Win9x/ME peuvent gérer
Disons qu'en
théorie, la limite est plutôt celle de la carte-mère. Si vous avez 3 slots
qui acceptent chacun 256 MB maximum, cela donne un maximum de 768
MB.
En pratique, Win9x n'a pas été conçu pour gérer de grosses
quantités de RAM (plus de 512 MB). Cela veut dire qu'on peut utiliser
jusqu'à 1 GB de RAM mais il faut prendre certaines précautions pour éviter
des messages du genre "mémoire insuffisante". C'est un des paradoxes de
Windows, au plus on rajoute de la RAM, au plus on a des messages indiquant
qu'il manque de mémoire. Voir ci-dessous les valeurs à adapter pour régler
ces problèmes. Les versions récentes de Windows (2K/XP) gèrent beaucoup
mieux la mémoire et on n'a plus de message "ressources insuffisantes" mais
par contre, on a plus de problème avec la MV et ceci parce que les valeurs
par défaut prévues par MS sont totalement inadéquates. C'est normal
puisqu'ils ne tiennent compte que de la quantité de RAM du PC mais
absolument pas de l'usage.
Ressources système et mémoire RAM, ce
n'est pas la même chose
J'ai posté à ce sujet ici : http://213.246.36.243/archives/72249-1.htm
En
deux mots, disons que les ressources (telles que MS les voit) sont des
zones de la RAM de taille fixe, absolument pas dépendantes de la
quantité totale de RAM. Donc, un message signalant des ressources système
trop faibles indique seulement que ces zones de taille fixe sont presque
pleines. Rajouter une barrette de RAM n'améliorerait pas du tout ce
symptôme. Il faut essayer de mettre le doigt sur le programme consommateur
de ressources et l'arrêter mais certains ne libèrent pas les ressources
qu'ils ont allouées quand on les arrête. Ces consommateurs sont
malheureusement parfois l'antivirus mais aussi des logiciels comme KaZaA.
Redémarrer Windows arrange temporairement le problème la plupart du temps.
Solution définitive : passer à XP/2K ou Linux. En effet, les OS plus
récents (XP/2K) ne connaissent pas ce problème de ressources, MS a corrigé
le tir en rendant ces paramètres dynamiques et non
figés.
----------
C'est quoi la MV, ça sert à quoi
?
LA MV existe depuis très longtemps, bien avant que Windows ne
soit créé. A l'époque où la RAM coûtait horriblement cher, on a trouvé un
moyen simple et meilleur marché de pallier à une petite quantité de RAM,
le disque dur. La MV est donc une espèce de prolongement de la RAM,
beaucoup moins rapide évidemment. Sans MV, vous ne pourriez pas lancer des
programmes qui occuperaient plus de place que la RAM disponible. Imaginons
un PC avec 64 MB de RAM. Une fois que Windows a démarré, même sans aucune
autre application, il y a déjà 30 à 40 MB d'occupé. Si vous lancez Word,
ce programme se place en mémoire et il ne reste plus rien de vos 64 MB.
Windows transfère alors une partie du contenu de la RAM vers le disque,
dans un fichier qui est la fameuse MV. Au fur et à mesure que vous
lancerez d'autres applications tout en n'arrêtant pas les 1ères, Windows
va faire des transferts permanents entre la RAM et la MV car un programme
DOIT être en RAM pour être exécuté, c'est impératif et ce transfert est
pénalisant pour les performances. Si vous avez beaucoup plus de RAM
(disons 128 ou 256 MB), Windows ne doit plus transférer les programmes
vers la MV mais il réserve tout de même de la place disque pour le fichier
d'échange, ce qui induit en erreur pas mal de gens, je vais y
revenir.
Sans rentrer dans les détails techniques sur le
fonctionnement de la MV sous Windows (je ne les connais d'ailleurs pas en
profondeur), on pourrait schématiser en faisant une analogie avec une
réservation de tables au restaurant. Imaginons que vous téléphonez au
restaurant et vous demandez à réserver 3 tables mais en réalité, vous n'y
allez pas car vous n'avez pas faim. C'est ce que font les programmes, ils
allouent de la place pour leur usage et Windows réserve des emplacements
dans la MV plutôt que dans la RAM, de manière à anticiper les besoins.
Quand le programme s'arrête, la réservation devient inutile et le fichier
d'échange diminue en taille, après un certain nombre de minutes. Il y a
donc un jeu permanent d'agrandissement et de réduction du swap, lorsqu'on
a choisi l'option "laisser Windows gérer la MV" qui est par défaut. Malgré
les apparences, un fichier d'échange faisant 100 MB n'est pas une preuve
qu'il est utilisé, on va le voir maintenant.
Comment savoir si
le fichier d'échange est utilisé ?
Certains programmes le
permettent (Norton, TaskInfo, CacheMan, etc.) Mais MS fournit un outil
très intéressant pour surveiller ce qui se passe en mémoire, c'est le
moniteur système (Sysmon). Pour le lancer : démarrer -> Exécuter ->
Sysmon puis enter. S'il n'est pas présent, il se trouve sur le CD-ROM
Windows et via "Ajout/Suppression de programmes", onglet "installation de
Windows", composant "outils système", boutons "détails" et enfin "moniteur
système", on peut l'installer.
Une fois lancé, choisir "Ajouter un
élément" dans le menu "Edition", puis, choisir "Gestionnaire de mémoire"
dans la colonne "Catégorie" et à droite, choisir "Fichier d'échange
utilisé" et Taille du Fichier d'échange" ainsi que "mémoire physique non
utilisée". Puis, aller dans le menu affichage et choisir "Graphiques
numériques", c'est plus parlant. Vous pouvez aussi y choisir "toujours
visible" et "masquer la barre de titres". Vous réduisez la fenêtre de
manière à ce que seuls les chiffres apparaissent et ça devient une espèce
de petit tableau de bord qui vous donne la température de votre mémoire.
Ces paramètres sont conservés dans la BdR ce qui fait que quand vous
relancerez Sysmon plus tard, il se souviendra des éléments que vous aviez
choisis. Vous pouvez mettre alors un raccourci dans le 'Menu démarrage' et
votre tableau de bord vous accompagnera en permanence. C'est ce que je
fais et sans ça, c'est comme si je roulais en voiture sans voir la
vitesse, la température d'eau, le compte-tours. Il vous reste
maintenant à observer les valeurs pendant quelques jours, en particulier
l'usage. Il est possible avec Sysmon d'écrire dans un fichier journal, ce
sera plus facile pour trouver les valeurs extrêmes. Via le menu "Options"
-> "Graphique..." on peut demander un intervalle de mise à jour chaque
demi-seconde, seconde, 3-5-10-30 secondes, 1 minute, 10 minutes, une
heure.
Voici un exemple de Sysmon sous WinME en comparaison avec
CacheMan, un utilitaire de gestion de mémoire. Personnellement, je
n'utilise pas ce genre de logiciels mais ils peuvent être utiles pour ne
pas avoir à changer manuellement les paramètres. Vous constaterez que
Sysmon et CacheMan n'ont pas les mêmes valeurs de Fichier d'échange
utilisé, c'est celle de Sysmon dont il faut tenir compte.

Merci à Alain (Gabuzo38) qui m'a autorisé à publier
"l'intimité" de son PC.
J'en profite pour dire que des logiciels
censés "libérer et/ou défragmenter" la RAM sont un leurre puisque pour
leur propre usage, ils prennent de la place en mémoire. Je sais que
certains d'entre vous les utilisent, j'attends toujours qu'on me démontre
leur efficacité.
Pourquoi choisir taille et usage du fichier
d'échange, n'est-ce pas la même chose ?
Non. Beaucoup de gens
s'imaginent que leur swapfile (fichier d'échange) est très utilisé par
Windows car ils voient sa taille changer sans arrêt, il grandit quand on
démarre des applications et diminue quand on les arrête. C'est un
raisonnement logique que je comprends parfaitement mais la réalité est
tout autre. La seule chose qui prouve qu'un swapfile est utilisé, c'est
son usage et non sa taille.
Il est courant d'avoir un swap
de 100 MB mais son usage est égal à zéro. Ce qui veut dire que si on voit
le 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 seulement
réservé de la place en mettant la FAT à jour. L'argument "performances"
mis en avant par les partisans du swapfile 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 swapfile
(taille ET usage) et confondent taille avec usage.
Le fichier
d'échange s'appelle normalement win386.swp dans le répertoire
windows mais il est possible de lui donner un autre nom et de le placer
ailleurs. Je ne vais pas expliquer ici comment et pourquoi, ça deviendrait
trop technique. Disons que si on a un PC en multiboot, on peut alors avoir
un seul fichier d'échange commun à XP et 98, par
exemple.
Maintenant que vous avez observé les différentes valeurs,
il est temps d'en tirer les conclusions.
- Si vous avez un usage
presque en permanence égal à zéro, cela signifie que Windows ne swappe
pas. En d'autres termes, la quantité de RAM dans votre PC est suffisante
actuellement pour votre usage. Vous le voyez également à la valeur
"mémoire physique non utilisée" qui ne descend jamais à zéro. Rajouter de
la RAM serait donc du gaspillage. Ceci pour répondre à certaines personnes
qui rajoutent de la RAM sans avoir fait les constatations ci-dessus et qui
s'étonnent que le PC n'est pas plus rapide. Si vous avez au moins 128
MB de RAM et un usage presque toujours à zéro, je vous conseille l'option
ConservativeSwapFileUsage=1 C'est mieux de copier/coller la
ligne afin de ne pas se tromper dans l'orthographe. Elle est à insérer
dans le fichier WindowsSystem.ini, sous la rubrique [386Enh]. En cas de
problème, il suffit de commenter la ligne en mettant un ; devant. Il faut
redémarrer Windows après avoir inséré ou enlevé le paramètre.
Précision : elle n'est d'aucune utilité sous XP/2K qui n'utilisent
d'ailleurs pas pour leur fonctionnement de fichier Win.ini ou System.ini.
Si vous avez un de ces 2 fichiers sous 2K/XP, cela veut seulement dire
qu'une application tierce l'utilise pour y stocker des informations pour
son propre usage mais en aucun cas le système d'exploitation ne les
exploite. On dira que ces fichiers sont là par compatibilité.
A
quoi sert cette option ? Disons qu'elle fait en sorte de n'allouer de la
place dans le fichier d'échange que quand la RAM est réellement pleine et
non de manière préventive, pour le cas où. En pratique, j'utilise cette
option (avec "laisser windows gérer la MV") et mon fichier d'échange reste
de longues semaines à sommeiller dans un coin avec une taille de 0 byte !
Autant vous dire que l'emplacement optimal d'un fichier de 0 byte est le
cadet de mes soucis.
- Si vous avez un usage plus grand que zéro,
ça veut dire que Windows utilise réellement le fichier d'échange,
c'est-à-dire qu'il transfère le contenu d'une partie de la RAM vers le
disque dur lorsque la RAM est pleine. Si l'usage est de plusieurs dizaines
de MB pendant une longue période d'observation, il est temps d'envisager
l'achat d'une barrette supplémentaire.
Comment changer le
paramétrage de la mémoire virtuelle ?
Pour y accéder touche
Win+Pause (ou clic droit sur le poste de travail et cliquer sur
Propriétés) -> Onglet "performance" bouton "Mémoire
virtuelle".
La solution la plus "sage" et la moins risquée est de
"Laisser Windows gérer les paramètres de mémoire virtuelle". C'est
l'option par défaut et elle permet de faire face à toutes les situations.
Seulement, que vous ayez un usage du swap supérieur à zéro ou non, votre
fichier swap bougera régulièrement en taille, ce qui n'est pas un problème
en soi, bien sûr.
Une autre solution consiste à désactiver la MV.
Ce n'est pas du tout recommandé. En effet, certains programmes ont besoin
du fichier swap et comme je l'ai dit, Windows alloue à l'avance de la
place disque pour le swap. Donc même si vous avez 1 GB de RAM, n'utilisez
pas cette option, il vaut mieux mettre CSU=1 (voir ci-dessus). A quoi
sert-elle alors ? Je pense que dans certaines circonstances, on peut
temporairement désactiver la MV mais c'est plus pour faire des tests
système qu'autre chose.
La dernière solution consiste à spécifier
soi-même les valeurs mini et maxi.
Comme valeur maxi, il vaut
mieux ne rien changer à celle proposée par Windows, elle correspond en
fait à l'espace disponible sur le disque en question. Comme valeur
mini, prenez la plus grande valeur de la taille du fichier d'échange que
vous avez constatée via Sysmon. Imaginons que vous obtenez 200 MB comme
taille maximale après plusieurs jours. Rajoutez simplement 10 ou 20 %,
pour arriver donc à 220 ou 240 MB et c'est cette dernière valeur qui est à
mettre en taille mini du swapfile. Ainsi, vous avez une marge pour le cas
où vous auriez une situation exceptionnelle nécessitant plus de mémoire
virtuelle, le fichier gonflerait temporairement pour revenir à sa taille
initiale dès que la RAM est moins sollicitée. Mais dans la plupart des
cas, votre fichier de 220 MB serait dans son coin et ne bougerait
plus.
En fait, c'est ce dernier point qui prête à confusion pour
beaucoup de gens, persuadés qu'il faut absolument mettre une valeur mini
égale à la valeur maxi "pour ne pas fragmenter et ne pas ralentir le PC".
En réalité, en mettant une valeur mini suffisamment grande, vous avez tous
les avantages d'un fichier de taille fixe mais sans les inconvénients.
Quels sont-ils ? Ça dépend, suivant qu'on ait de la chance ou pas. Si
vous avez mis une taille maxi trop faible (pour avoir un swap "permanent")
et que Windows a temporairement besoin d'allouer de la place, voici les
scénarios possibles au moment où cette taille maxi est
atteinte.
Soit, on a juste un message "mémoire insuffisante" et le
programme qui réclamait de la RAM se plante mais on peut continuer. Soit,
on n'a pas de message et c'est Windows qui se plante avec une possibilité
de fichiers corrompus et dans le cas le plus grave, plantage total avec
impossibilité de réparer le disque et obligation de reformater et
réinstaller.
Conclusion, il n'y a AUCUN bénéfice à mettre
une taille maximale autre que la place disque disponible, au mieux, vous
n'aurez pas de message d'erreur, au pire, voir ci-dessus. Les gens de
Norton Utilities préconisent (préconisaient ?) une taille maximale
relativement faible, comme quoi les plus "grands" peuvent se tromper.
Pourquoi ai-je un message d'erreur depuis que j'ai rajouté de
la RAM ?
Il arrive en effet que des gens constatent des
messages du genre "mémoire insuffisante" alors qu'ils ont justement
rajouté de la RAM. C'est un comble évidemment. La raison est simple, MS
n'avait pas planifié dans les années 90 que la RAM allait brutalement
chuter de prix et qu'on allait avoir des PC avec 512 MB ou 1 GB de RAM.
Résultat, certains paramètres de la gestion mémoire ont "disjoncté". Je
reste vague expressément car ce n'est pas MS qui dévoilera le problème,
disons que c'est le Vcache qui est le plus concerné. Je précise tout de
suite que si vous avez la quantité de RAM indiquée ci-dessous mais pas de
message d'erreur ou de redémarrage intempestif, il n'est pas nécessaire de
changer le Vcache. Pour les autres, il y a un certain nombre de solutions
passant par des paramètres du fichier System.ini à la rubrique
[vcache]
On peut y mettre par exemple
maxfilecache=358400 Le chiffre est en KB et convient pour ceux
qui ont 512 MB de RAM. Il faut redémarrer le PC pour que Windows en tienne
compte.
Pour les PC de plus de 128 MB (lisez minimum 160 MB jusqu'à
512 MB), mettre VCache à 70 % de la valeur totale de votre RAM est
recommandé pour éviter une fuite en avant du VCache dans quelques rares
situations.
Si vous avez plus de 512 MB de RAM (lisez au moins 640
MB), une valeur maximale de VCache égale à 500000 KB (voire un peu moins)
est recommandée. VCache est limité en interne par Windows à 800 MB. Le
problème avec les PC ayant beaucoup de RAM, c'est que la taille du VCache
peut être tellement grande qu'il consomme toutes les adresses mémoire, il
va rester très peu d'adresses libres pour du code et des données qui
doivent alors occuper de la place dans la MV.
Pour les systèmes
avec plus d'un 1 GB de RAM, il se peut que 98/ME provoquent un reboot
continuel du PC, des plantages ou des reboots en série lors d'un upgrade
de Win. Pour résoudre ce problème, il faut rajouter une entrée
MaxPhysPage=40000 dans la section [386enh] du system.ini. Ce paramètre
limite la quantité de RAM disponible que Windows peut accéder à un 1 GB.
MS préconise de mettre ce paramètre pour ceux qui ont 1.5 GB de RAM mais
la solution est de le mettre déjà pour les systèmes avec un 1 GB.
Voir ici : http://support.microsoft.com/support/kb/articles/Q304/9/43.ASP
MS
reconnaît que "WinME/9x n'ont pas été conçu pour gérer plus de 1 GB de
Ram. Plus de 1 GB de RAM peut causer l'instabilité du système."
Un
article intéressant sur la gestion de mémoire sous 9X/ME (en anglais),
c'est là que j'ai trouvé une partie des explications décrites dans ce
sujet.
http://aumha.org/a/memmgmt.htm
Une autre page
en anglais qui explique très clairement le fonctionnement du
swap
http://www.forrestandassociates.co.uk/pcforrest/swapfile.html
Reducing
the amount of resizing involved will certainly improve performance,
however it is your usage of the swapfile that has the greatest effect
on performance. Reducing your usage is the key and there's only two
ways to do that: run fewer, larger programs, or add more physical RAM. The
amount of RAM you need is a direct reflection of your swapfile usage. Thus
if your swapping regularly, you have insufficient RAM.
Si vous
ne comprenez pas l'anglais, on pourrait résumer comme ceci
:
Réduire la quantité de redimensionnement du swap va améliorer les
performances mais c'est l'usage qui a le plus grand effet sur les
performances. Réduire l'usage est la clé du problème et il n'y a que 2
manières de le faire : exécuter moins de programmes simultanément ou
ajouter de la RAM. La quantité de RAM nécessaire est en rapport direct
avec l'usage du swap. Donc, si l'usage est supérieur à zéro régulièrement,
vous manquez de RAM.
N'hésitez pas à poser des questions ou à commenter.
N'oubliez pas de préciser à chaque fois votre version de Windows, la
quantité de RAM et les paramètres actuels de votre VM pour qu'on soit sûr
de parler de la même chose. Je rappelle que certaines valeurs sont
stockées dans le fichier System.ini aux rubriques [386enh] et
[vcache].
|