Bonjour Pierre,
Je déterre ce sujet car j'ai lu ta page sur la gestion de MV sous Windows XP et je voudrais réagire sur le point de la fragmentation du fichier d'échange qui en soit n'est pas spécialement problématique (surtout si les fragments sont vides).
De mon point de vue la problématique n'est pas au niveau de la mémoire virtuelle mais plutôt du système de fichier. Qu'on utilise la FAT ou le NTFS, des qu'on approche les 60-70% d'espace utilisé on recent rapidement les effets de la fragmentation et nous voilà obligé de défragmenter... au delà d'une certaine limite (autour de 80% si je me souvient bien), le défragmenteur (XP) ne veut même plus fonctionner.
Sur d'autres systèmes de fichiers (HFS, reiser, XFS, UFS, EXT2-3, etc.) en fait probablement tous les autre, ceux du monde unix, on a très rarement de problèmes de fragmentation même a des taux d'utilisations suppérieurs à 90%. Personellement j'utilise reiserfs et ça ne commence à fragmenter qu'au delà de 99% sur un gros disque. Il semble qu'il ne fragmente que lorsqu'il n'y a nul part la place de mettre le fichier en un seul bloc. Tous ces OS utilise une partition et non un fichier de swap. Sa taille est donc obligatoirement fixe et elle ne peut pas être fragmentée (sauf si on en réparti plusieurs sur le disque entre les partitions de données, on dit même que c'est mieux).
Outre le fait de la mauvaise gestion du système de fichier en lui même je pense que la fragmentation virtuelle du fichier d'échange peut augmenter considérablement le phénomène de fragmentation, en effet même si l'espace aloué n'est pas utilisé il est bel et bien aloué et ne peut donc être utilisé pour écrire d'autre données. Par exemple si le fichier d'échange est enclavé ce qui est souvent le cas des le premier démarrage de windows, une augmentation de sa taille monopolise obligatoirement de l'espace disque justement là où devrait être écrit le document qu'on enregistre et lorsqu'il reprend sa taille normale on se retrouve avec un fragment de plus d'espace libre. Puis ce fragment d'espace libre se réduit avec l'ajout de nouvelles données et la fois suivant s'il est trop petit pour supporter l'allocation de la mémoire vide celle ci est allouée ailleur ce qui peut provoquer un nouveau fragment d'espace libre. Ainci les fichiers s'emmellent sur le disque et quand l'espace libre vient à manquer (<30% il faut défragmenter tout ça sous peine de voir les performances se réduire, ainci que la durée de vie du disque dur, et son stress augmenter à cause du bruit des têtes de lectures qui s'agitent sans cesse.
Autrement je suis parfaitement d'accord sur le fait que la mêmoire libre est du gaspillage et que les softs qui vident le cache sont plus nefaste aux performance qu'autre chose. Personnelement je n'emploierait pas le terme de "cache disque" mais de "cache" tout court car une grande partie des données qui s'y trouvent ne viennent pas du disque (résultats de calculs ou autre) et n'y seront pas forcément écrites un jour. Par exemple si on désactive le cache du navigateur, les pages chargées sont conservées en mémoire mais ne sont jamais écrites sur le disque.
Un test intéressant à faire serait de lancer plusieurs application qui réservent beaucoup d'espace mémoire pour voir si le fichier d'échange augmente de la somme de l'espace réservé ou bien seulement du plus grand. Je ne suis pas un spécialiste mais j'ai lu il y a longtemps un article sur la gestion de la mémoire (indépendament de l'os) et il y était expliqué un mécanisme appelé COW (Copy On Write) : grosso-modo si deux programme utilisent les même données en mémoire (par exemple lors d'un fork) les données ne sont dupliquées que si l'un des processus les modifie ce qui permet parfois des économies de mémoire considérable.
Il me semble donc tout-à-fait logique et trivial de faire de même avec les pages réservées : on peut très bien allouer le même espace vide à plusieurs processus tant qu'il est vide, ça ne pause pas de problème dans une architecture mono-processeur. Un processus réserve 200Mo et un autre 50Mo, je réserve 200Mo pour les 2, si et seulement si le premier processus utilise plus de 150Mo de son espace alloué, j'augmente la taille de l'espace réservé et je déplace la page aloué au seconde processus ce qui ne prend qu'une fraction de seconde puisqu'il sagit de déplacer un espace vide...
J'en avais presque oublié le problème de Chev_alier : vérifies dans la boite de dialogue propriétés système, onglet Avancé, tu ouvres le dialogue Options de performances onglet avancé : donnes la priorité au programmes pour l'utilisation de la mémoire et essai de donner la priorité aux services pour le processeur, si ça ne marche pas tu peux essayer les autres combinaisons, après tout il n'y en a que 4
Message édité par raoul-5 le 07-04-2006 à 05:33:44