La gestion de la mémoire vive sous Mac OS X
Par Denis Vaillant - Publié le
Mise en garde
Le sujet abordé ici est assez délicat et j'ai essayé d'être le plus clair possible. Toutefois, il se peut que certaines explications restent un peu obscures pour vous. En effet, compte-tenu de la complexité du sujet traité, j'ai tenté de le simplifier au maximum tout en essayant de vous permettre de comprendre ce que vous faîtes. Au cas ou un doute ou une imprécision apparaitrait, n'hésitez pas à poser une question au bas de l'article. J'y répondrai avec plaisir... Je tiens à prévenir dès maintenant que la mise en place d'une partition Swap nécessite le formatage de votre disque dur.
La mémoire virtuelle sous Mac OS
La mémoire virtuelle est une seconde mémoire vive, localisée sur le disque dur, qui permet de seconder activement la mémoire vive physiquement installée (RAM).
Cette mémoire virtuelle que l'on a tous connu sur nos anciens systèmes (Mac OS 7 -> Mac OS 9.x) permettait d'augmenter la mémoire vive totale en élevant la taille de la mémoire virtuelle sur le disque dur. Cela avait pour principal but d'allouer manuellement plus de mémoire vive à de gourmandes applications sans débourser d'argent pour l'achat de barettes de Ram (A l'époque très couteuses...). Toutefois cela avait aussi la particularité de sacrifier les performances de votre ordinateur car nos anciens systèmes géraient cette mémoire virtuelle de manière archaique. Heureusement, il était possible de désactiver cette "seconde mémoire vive" pour obtenir des performances maximales mais, dans ce cas, le système devenait beaucoup plus gourmand sur la consommation de RAM. Désactiver la mémoire virtuelle était indispenssable sur Mac OS 9 pour les musiciens, graphistes, ou vidéastes qui ne recherchaient que les performances optimales de la machine.
Mac OS X, système moderne basé sur un noyau Unix, possède également une mémoire virtuelle. Contrairement à classique, il n'est pas possible de désactiver cette mémoire virtuelle mais heureusement, Mac OS X gère cette mémoire correctement. Toutefois, un gain important de performance peut-être obtenu par un bon paramétrage de cette mémoire.
Cette mémoire virtuelle, dénommée également swap est localisée sur votre disque dur. Dès que vous lancez une application, celle-ci nécessite pour fonctionner de la mémoire vive. Seulement, votre RAM n’est pas illimitée et quand il n’y a plus de mémoire vive disponible, le système copie sous OS X une partie des informations contenu dans la Ram sur votre disque dur. Cette action a pour but de libérer de la mémoire et permettre au système de continuer de fonctionner correctement. Parallèlement à cela, souvent le système lit des informations contenues sur le disque pour les stocker dans la Ram dans le but d'optimiser les requètes. Ainsi, il existe donc un véritable "ballet" entre votre disque dur et vos barettes de Ram. Mais, alors que vos barettes de Ram fonctionnent à 66, 100 ou 133 Mhz, votre disque dur lui ne tourne qu'à 4200, 5400 ou 7200 tours/minute selon les machines...
Démonstration
Ouvrez un terminal (Applications/Utilities/Terminal) et tappez la commande "top". L’écran se remplit alors d'une foule d’informations.
Chaque ligne donne des explications spécifiques sur les opérations en cours sur votre ordinateur.
- La ligne 1 donne le nombre d'opérations en cours
- La ligne 2 renseigne sur l'utilisation et la disponibilité du processeur...
Mais ce qui nous intéresse ici, ce sont surtout les lignes 5 et 6 :
- La ligne 5 explique comment est gérée actuellement la RAM de votre ordinateur. La mémoire vive en utilisation est composée de la mémoire wired, active et inactive (celle-ci est une mémoire tampon et qui permet en cas de crash d'une opération, une libération immédiate de mémoire pour empécher votre ordinateur de planter). Enfin il reste la mémoire inutilisée.
- La ligne 6 présente la gestion de votre mémoire virtuelle. Ce qui est important ici ce sont les pageins et les pageouts. Les pageins correspondent aux informations qui circulent du disque dur vers la RAM physique. Les pageouts représentent au contraire le transfert d'informations de la Ram vers la mémoire Swap. A ce moment, le disque dur écrit en réalité des informations contenus dans la RAM sur le disque dur.
Ainsi, plus vous lancez d'applications, plus la réserve de mémoire inutilisée diminue. Pour libérer de la mémoire vous pouvez décider de quitter des applications. Si vous lancez une application puis vous la quittez, vous remarquerez que votre ordinateur possède moins de mémoire vive disponible qu'auparavant. En réalité, votre ordinateur garde une partie des informations en mémoire vive pour optimiser le lancement la prochaine fois (c'est intelligent ces petites bêtes, hein ? ;-)). C'est pour cela que les applications se lancent bien plus vite au second démarrage. Mais, quand il n'y a plus de mémoire disponible, le système réalise alors des pageouts pour libérer de la mémoire vive et c'est cette action qui détruit les performances de votre machine !!! En effet, Les pageins sont une simple lecture de votre disque alors que les pageouts sont un véritable cheval de bataille ou votre disque dur copie des dizaines de méga-octets, le rendant indisponibles durant tout ce temps-là !!!
Cette première capture montre qu'il y a actuellement 35 opérations en cours sur mon ordinateur (ligne 1 : Processes: 35 total...). On y voit également que sur les 320 Mo de Ram physique de mon ordinateur, 245 Mo sont occupés et 74,9 Mo sont libres (ligne 5 : simple addition de la mémoire utilisée -245M used- et de mémoire disponible -74,9M free-). Comme vous pouvez le voir, l'ordinateur a réalisé des pageins mais aucun pageouts car il reste de la RAM physique disponible.
J'ai lancé 8 applications en plus des 5 déjà ouvertes précédemment. On peut donc voir le nombre des opérations en cours grimper à 43. Par ailleurs, il ne reste plus que 5,73 Mo disponible, le reste étant utilisé par la gestion des 13 applications ouvertes ainsi que le système.
Je viens de lancer encore 5 applications. Il y a alors 48 opérations en cours dont 18 applications. L'ordinateur manquait donc de RAM physique et a copié des informations de la RAM vers le disque dur. Ainsi, il a réalisé 6552 pageouts.
Maitenant, faîtes donc de même sur votre ordinateur et regardez avec désespoir ce qui se passe lorsque le système commence à faire des pageouts. C'est le drame, n'est ce pas? La machine se traine lamentablement et le disque dur racle sans cesse ;-).
L’intérêt d’une partition swap dédiée
La mémoire virtuelle se trouve sur votre disque dur mais n'y occupe aucune position définie. Cela signifie concrètement que les informations de votre mémoire virtuelle sont copiées n’importe où sur le disque dur. Cela à pour conséquence d’allonger significativement les temps d’accès au disque et de ralentir l'écriture des données… Si vous décidez de créer une partition Swap dédiée, vous limiterez au maximum ces accès disques car votre partition Swap sera localisée en un seul endroit. La tête de lecture de votre disque dur la balayera donc en un seul coup , accélerant grandement les performances de votre ordinateur. Cela est d’autant plus vrai lorsque vous possédez 2 disques durs. En effet, le premier disque fait tourner le système et les applications alors que le deuxième contient la partition Swap. Dès lors, alors que votre second disque est handicapé à cause des pageouts, votre premier disque dur se porte comme un charme ;-).
Créer une partition Swap dédiée permet donc de limiter grandement les ralentis causée par l'échange d'informations entre votre disque dur et la RAM physique de votre ordinateur. Cette amélioration de performance est bien plus visible si vous possédez deux disques durs...
Voici des résultats obtenus avec un G4/466 version 2001 avec 768 Mo de Ram, Mac OS 10.0.4 et 2 disques durs internes ATA 66, l'un de 30 Go en mode maître et l'autre de 20 Go en mode esclave.
Attention, les différences obtenues doivent surement être un peu moins flagrantes avec Mac OS 10.1 mais cette manipulation permet toujours d'optimiser votre ordinateur de manière conséquente.
Création de la partition Swap dédiée
Maintenant que nous avons vu l'intérêt de créer une partition Swap dédiée, il convient de le faire concrètement :-).
Tout d'abord, quelle taille allouer à cette partition Swap? Sachez que cette partition fonctionne par incrément de 80 Mo. Si vous avez peu de Ram (128 - 192 Mo), il conviendra de créer une partition Swap de 160 voire 240 Mo. Tout dépend de l'utilisation que vous faîtes de votre ordinateur. Si vous lancez beaucoup d'applications et que vous avez peu de Ram, une large partition Swap sera appréciée. Au contraire, si vous disposez de beaucoup de RAM (+384 Mo), une simple partition de 80 Mo suffira. Mais, n'oubliez pas que Mac OS X réclamme tout seul pas moins de 128 Mo de Ram physique pour fonctionner...
Une fois votre choix fait, il convient de formater votre disque dur. Attention, cette opération efface toutes les données de votre disque dur. Il convient donc de réaliser un back-up complet de votre disque au préalable. Pour formater le disque et créer une partition, il vous faudra démarrer d'un autre disque ou d'un CD-Rom de démarrage Apple puis de lancer "Disk utility" sous OS X ou "Outil disque dur" sous Classique.
A ce propos, il existe un tutorial pour partitionner son disque que vous trouverez ici
Maintenant que votre ordinateur est de nouveau opérationnel (après la réinstallation du système et la création d'une partition pour y placer la mémoire virtuelle), il s'agit maintenant de modifier votre système pour dédier votre nouvelle partition à la localisation de la mémoire virtuelle.
Pour raisons de commodité, le nom de "Swap" pour la partition a été choisi pour les explications qui vont suivre)
Accrochez votre ceinture et enfilez vos moufles, on est parti ;-) : les opérations se dérouleront exclusivement dans le terminal!
Tappez dans celui-ci la commande "df -k".
La ligne qui nous intéresse ici est la cinquième. En effet, elle contient la localisation exacte de votre partition Swap : /dev/disk0s11. Attention, cette donnée est surement différente sur votre ordinateur !!!
Pour la suite des opérations, il faut vous logger en root. Pour cela, tappez la commande"su" puis entrez votre password. Je rapelle que pour réaliser cette opération, il vous faudra au préalable avoir activé le compte root. Dans le cas ou cela n'aurait pas été fait et si vous ne savez pas le faire, allez lire l'article suivant :
Comment passer en utilisateur Root en OS X jQuery36102591945402069238_1663713439090?
Vous voila donc logger en root. Entrez alors la commande dans le terminal :
"pico /etc/fstab"
Vous accédez alors au fichier système /etc/fstab que vous allez maintenant modifier. Entrez alors au début d'une ligne la commande suivant :
"/dev/disk0s11 /Volumes/swap hfs rw 1 2"
Attention, le début de cette commande provient du résultat obtenu lorsque vous avez tappé la commande df -k. "/dev/disk0s11" n'est donc probablement pas ce que vous avez obtenu... Recopiez donc soigneusement le résultat que vous aviez obtenu lors de l'opération df -k puis complétez avec la fin de la commande (/Volumes/swap hfs rw 1 2).
Une fois cette commande entrée dans le terminal (attention aux espaces et aux majuscules, la moindre erreur rendrait caduque vos changements...), appuyez enter pour retourner à la ligne. Tappez alors "control-x". Le terminal vous demande si vous désirez sauvegarder ces changements : appuyez la touche "y" puis tappez de nouveau "entrer" pour enregistrer les changements.
Nous allons maintenant modifier le fichier "/etc/rc". Pour cela, toujours dans le terminal, tappez la commande :
"pico /etc/rc"
Le fichier s'ouvre alors mais celui étant très grand, il convient d'effectuer une recherche pour arriver à l'endroit qui nous intéresse. Tappez "control-w" pour effectuer une recherche et entrez comme mot de recherche "swap". Vous arrivez alors sur cette partie du fichier :
Tappez alors un "#" au tout début de la ligne "swapdir=/private/var/vm". L'insertion du caractère "#" en début de ligne a pour effet d'annuler la lecture de cette ligne par le système. Vous venez donc d'annuler l'ancienne position de votre mémoire virtuelle (qui était localisée dans le dossier invisible var n'importe ou sur le disque dur). Maintenant, il convient de donner un nouvel emplacement à votre mémoire virtuelle. Pour cela, allez au bout de cette ligne grâce à la flèche droite de votre clavier et pressez la touche enter. Vous retournez alors à la ligne. Là, entrez la ligne suivante :
"swapdir=/Volumes/swap/vm"
puis retappez enter pour valider votre ligne. Vous devez obtenir ceci à la fin de cette opération :
Si c'est bien ce que vous avez à l'écran, pressez "control-x" pour sauvegarder les changements et tappez "y" pour valider (comme précédemment).
Bravo, vous venez de terminer !!! Pour activer votre partition Swap, redemmarer votre ordinateur.
Vérification de votre travail
Il y a 2 méthodes pour vérifier votre travail :
- Aller dans la partition swap. Ouvrez le dossier "vm. Un fichier dénommé "swapfile0" doit s'y trouver. Si c'est bien le cas, bravo. Si ce fichier se dénomme "swapfile1", il y a une erreur...
- Pour les mordus du terminal, entrez la commande:
"cd /volumes/swap/vm" puis tappez "ls"
[localhost:~] maclover% cd /volumes/swap/vm
[localhost:/volumes/swap/vm] maclover% ls
Vous devez obtenir ceci en réponse :
swapfile0
[localhost:/volumes/swap/vm] maclover%
Si vous avez "swapfile1" à la place, il y a une erreur...
En cas d'erreur, celle-ci provient probablement de la désignation de votre partition swap lors de l'étape /etc/fstab" (faute de frappe dans la désignation de la partition...). Cherchez patiemment l'erreur, ca doit marcher ;-).
Rendre la partition Swap invisible
Pour des raisons de confort, il peut être intéressant de rendre votre partition Swap invisible. Pour cela, il vous sera nécessaire de télécharger et d'installer les developer tools d'Apple (environ 200 Mo...). Celles-ci se téléchargent sur le site Hardware Developer Documentation d'Apple. Attention, il faut vous enregistrer dessus pour pouvoir accéder aux téléchargements.
Ces developer Tools sont nécessaires car elles apportent les fonctions SetFile et GetFileInfo. La commande SetFile permet de modifier certains paramètres d'un fichier. En voici la liste:
A = Alias file
V = Invisible[
B = Bundle (Wrapper)
S = System (name locked)
T = Stationary (i.e template)
C = Custom icon]
L = Locked
I = Initialised[
N = No INIT resource
M = Shared (can be launched several times)
E = Extension hidden]
D = Desktop[
La fonction GetFileInfo permet de vérifier les paramètres d'un fichier. Lorsque la lettre est en majuscule, le paramètre correspondant est actif. Au contraire, lorsque la lettre est en minuscule, ce paramètre n'est plus actif.
Application
Ouvrez un terminal et entrez la commande suivante :
sudo /Developer/Tools/SetFile -a V /Volumes/Swap
Le terminal vous demandera alors un password. Il s'agit la du password de votre utilisateur habituel et non celui de l'utilisateur root. Par ailleurs, la fin de cette commande peut différer de celle-ci si votre partition Swap ne se nomme pas "Swap". Dans ce cas, il vous faudra terminer commande par /Volumes/nom de votre partition Swap
Pour expliquer la commande, le V majuscule dans la commande signifie que vous avez rendu actif ce paramètre. Or le paramètre "V" correspond à l'invisibilié du fichier. Le changement du paramètre "v" en "V" sur votre partition Swap l'a donc rendu invisible.
Si jamais vous éprouvez le besoin de la rendre visible à nouveau, il vous sufffira de tapper la commande SetFile avec un v minucule:
sudo /Developer/Tools/SetFile -a v /Volumes/Swap
Pour vérifier si vos changements ont bien été pris en compte, tappez la commande suivante dans le terminal:
/Developer/Tools/GetFileInfo -a /Volumes/Swap (ou autre selon le nom de votre partition)
Le terminal vous donne alors cette réponse: aVbstclINMed. Vous remarquez que la lettre "v" est une majuscule. Le changement de paramètre a donc été bien enregistré. Il vous suffit donc de redemmarer maintenant.
Pour conclure
OOOOOOOOOOOOOOUF, c'est terminé pour aujourd'hui ;-)