Laissez la mémoire de macOS tranquille !

Kirk Mc Elhearn (que nous avions eu le plaisir d’avoir comme invité sur 3 hommes et un podcast) a publié ces jours-ci un article (en anglais) sur les problèmes de consommation de mémoire de Safari, qu’il trouve trop gourmand. Même s’il soulève des points intéressants, je pense qu’il a une approche trop technique de la gestion de la RAM de nos ordinateurs, et surtout de nos Mac, pour ne pas dire quelque peu rétrograde (no offense, Kirk). Et je pense que c’est assez symptomatique des utilisateurs (dont je fais partie) du Mac depuis de longues années. Reprenons donc depuis le début.

Aux origines fut le Systeme 1.0

Le premier système qui a équipé le premier Macintosh était le système 1.0. D’une sophistication incroyable pour l’époque, il ne permettait qu’un seul programme en mémoire à un instant donné. Le MultiFinder puis le Système 7 ont permis d’exploiter plusieurs applications en même temps. Et ce fameux Système 7 a aussi permis d’améliorer la gestion de la mémoire à l’aide de la mémoire virtuelle. Mais toutes ces améliorations ont posé d’autres problèmes : le système gérait la mémoire de façon coopérative, ne gérait pas la fragmentation de la mémoire (des bouts contigus de mémoire ne pouvaient pas être attribués à une autre application, sauf à quitter toutes les applications lancées depuis), et chaque application devait se voir attribuée une quantité de mémoire avant le lancement. Si l’application manquait de RAM, pas de bol ! Il fallait quitter l’application, la sélectionner, utiliser la fenêtre Lire les informations pour attribuer plus de mémoire (si on en avait…).

Fenêtre Lire les informations dans le Système 6

Bref, ce n’était pas vraiment très souple… et cette gestion de la mémoire a pénalisé le Mac durant de nombreuses années, jusqu’à l’arrivée de Mac OS X.

Mac OS X : la mémoire, c’est moi !

En 2001, le nouveau système d’Apple basé sur NeXT apporte enfin au Mac une gestion dynamique de la mémoire1. Ainsi, plus besoin de gérer la mémoire à la main : le système se charge de gérer comme un vrai chef d’orchestre la mémoire, en gérant plus intelligemment également la mémoire virtuelle qui était aussi devenue dynamiquement attribuée. Mais si la puissance des processeurs de nos ordinateurs a augmenté et la quantité de mémoire vive installée également, leur plus gros point noir reste le disque dur qui équipe majoritairement nos Mac. Et c’est le drame du swap : lorsqu’un programme manque de mémoire, le système déplace une partie de la RAM vers le disque dur, ce qui génère des ralentissements importants. Et là, pas le choix : il faut quitter des applications lorsque la mémoire commence vraiment à manquer.

Mavericks : une gestion (encore) améliorée de la mémoire

OS X 10.9 (Mavericks) a également intégré un nouveau mécanisme de compression de la mémoire, afin de rendre la gestion de la mémoire plus efficace. Apple a d’ailleurs publié un nouvel article technique pour expliquer comment la mémoire est gérée par macOS (oui, on va maintenant dire macOS hein), et en particulier expliquer la notion de pression sur la mémoire. Et c’est peut-être l’endroit le plus important à comprendre pour bien gérer la mémoire de son Mac.

Moniteur Activite memoire compression

La zone Pression de la mémoire vous indique dans quel état se trouve la mémoire de votre Mac : si c’est vert, tout va bien ! Si on est dans l’orange, ça devient inquiétant, et s’il est rouge… Aie, vous êtes en mode swap total ! Dans ce cas, quitter des applications voire redémarrer devient indispensable.

Et encore, pour l’orange, ce n’est pas forcément significatif si votre Mac est équipé d’un SSD plutôt que d’un disque dur classique : certes le SSD reste moins rapide que de la vraie RAM, mais l’impact du swap sur les performances devient du coup très amoindri. Je ne dis pas qu’il n’existe pas, mais qu’il devient plus ou moins négligeable selon les cas.

Et Safari alors ?

Kirk constate que Safari consomme de la RAM, et ça le gêne. Je peux le comprendre, mais en réalité… qu’est-ce que ça peut faire si Safari consomme de la RAM si il y a encore de la RAM disponible ? Pourquoi vraiment est-ce un problème si Safari consomme 500 Mo ou un voire deux Go de RAM ? Est-ce que c’est vraiment un souci si cette mémoire n’est de toute façon pas utilisée par une autre application ? C’est le but du système d’exploitation d’attribuer de la mémoire, car la gestion qu’il en fait est bien trop complexe pour qu’on s’en occupe au final moins efficacement que lui.

Pour Apple, en fait, le but à long terme devrait être le même que pour iOS (et je pense que c’est leur objectif à long terme) : proposer le même système de gestion de mémoire que sur iOS où les apps sont tuées en arrière-plan et relancées automatiquement si besoin est (un mécanisme similaire existe dans macOS, mais je ne l’ai quasiment jamais vu en action), et où il n’y a finalement pas d’information sur la mémoire utilisée.

De nos jours, un navigateur web est une application complexe qui consomme de la RAM,  quasiment un système d’exploitation à lui tout seul, capable de gérer des applications de plus en plus complexes avec des langages interprétés dynamiquement, avec des contenus visuels ou sonores de plus en plus lourds (tiens, par exemple, placer des images Retina dans une page web, ça a forcément un impact sur la consommation mémoire de votre navigateur) . Quand Kirk dit que Google Docs consomme 500 Mo de RAM rien qu’en affichant uniquement une page blanche, c’est mésestimer la complexité de toute l’application autour de cette page. Nous ne sommes plus à l’époque de SimpleText, mais en 2016, et on s’attend à voir un traitement de texte (collaboratif en temps réel !) fonctionner à une vitesse correcte dans un navigateur web. Et pour que l’ensemble des fonctions de ce logiciel intégré au navigateur fonctionne… il faut sûrement plus de RAM que pour un Word. Et là encore, si j’ai encore de la RAM disponible, pourquoi devrais-je m’en priver si cela améliore les performances ? Si une page web consomme vraiment trop de RAM (et elles en consomment de plus en plus !), on peut toujours de toute façon la tuer sans stopper l’ensemble du navigateur (quel progrès mes aïeux !). Il arrive évidemment que certaines pages mal programmées génèrent des fuites de mémoire (j’en ai eu une aujourd’hui, en raison d’une vidéo mal programmée). Dans ce cas, pas le choix : tuez la page à l’aide du Moniteur d’activité, et passez à autre chose.

Mais alors, comment gérer la mémoire de son Mac ?

La réponse est en fait très simple : ne gérez la mémoire de votre Mac que lorsque c’est vraiment nécessaire, c’est-à-dire si vous constatez un ralentissement significatif d’activité, si une page web est plantée, si elle a un impact sur l’autonomie du Mac ou si ce dernier vous le demande poliment. Nous ne sommes plus dans les années 80, nos navigateurs sont des logiciels complexes qui ont besoin de mémoire pour fonctionner, tout comme l’ensemble de nos logiciels. Si vous avez encore la nostalgie des logiciels qui tournaient dans 100 Ko de mémoire, vous n’avez effectivement plus que vos yeux pour pleurer. Mais dans l’ensemble, macOS fait preuve d’une bonne efficacité dans la gestion de la mémoire. Ne le suppléez que si vous constatez un gros souci. J’ai eu par exemple le cas d’un logiciel (j’ai oublié lequel malheureusement) qui générait énormément de mémoire virtuelle (genre plusieurs dizaines de Go après quelques jours), alors qu’il s’agissait d’un logiciel simple qui se logeait dans la barre des menus. Lorsque j’ai constaté qu’il consommait plusieurs giga-octects de mémoire réelle probablement en raison d’une fuite de mémoire, je l’ai supprimé, et je n’ai plus eu de problème.

De même, n’oubliez pas que si vous disposez d’un SSD, la perte de performances imposée par la mémoire virtuelle est moins importante que pour un disque dur classique. Et si vous hésitez entre augmenter la mémoire installer un SSD pour améliorer un Mac vieillissant, investissez sans tarder sur le SSD !

Bref… Oubliez donc vos vieux réflexes, laissez vos programmes ouverts toute la journée si cela vous chante, et ne les quittez pas juste parce qu’ils consomment de la RAM à ne rien faire : au contraire, car cette mémoire sera disponible immédiatement en cas de besoin. Si macOS en a besoin, il saura sûrement la récupérer à son usage. Si vous quittez vos logiciels sans bonne raison, vous forcez le programme à se recharger de façon probablement inutile. N’ayez donc pas le Cmd+Q trop fréquent : vous ne feriez qu’y perdre côté inactivité. Et si toutes les fenêtres affichées d’un programme vous agacent, faites un clic droit > Masquer sur l’icône de l’application dans le Dock (ou Cmd + H pour masquer l’app en court, ou encore Cmd+Alt+H pour masquer toutes les autres applications en cours et ainsi dégager l’affichage). Ou pensez à exploiter le mode plein écran des applications macOS, c’est parfois aussi plus pratique.

Votre Mac ne pourra que vous en remercier !

leave_macos_memory_alone

  1. Ainsi que la protection de la mémoire ou un vrai multitâche, mais ce n’est pas le sujet aujourd’hui.