7 votes

Désactiver l'échange de mémoire inactif

Contexte :

OSX conserve en mémoire vive des informations qui ne sont plus utilisées, mais qui l'ont été récemment. C'est ce qu'on appelle mémoire inactive et vise à améliorer l'expérience de l'utilisateur en accélérant certaines actions :

Par exemple, si vous avez utilisé Mail et que vous l'avez quitté, la mémoire vive de Mail utilisait est marquée comme mémoire inactive. La mémoire inactive est disponible pour une autre application, tout comme la mémoire libre. Toutefois, si vous ouvrez Mail avant que sa mémoire inactive ne soit utilisée par une autre application, Mail reste disponible pour une autre application, tout comme la mémoire libre. par une autre application, Mail s'ouvrira plus rapidement parce que sa mémoire est convertie en mémoire active, au lieu de la charger à partir du lecteur le plus lent. plus lente.

Cela semble discutable (comment peut-on accélérer Mail sur une machine quadricœur ?), mais au moins, cela ne pourrait pas être le cas. blesser puisque cette mémoire peut être traitée comme de la mémoire libre ! En fait, il peut :

Dans OS X, lorsque le nombre de pages dans la liste libre passe en dessous d'un seuil calculé, le noyau récupère des pages physiques pour la liste libre en transférant les pages inactives hors de la mémoire.

Cela m'amène à me demander si la gestion de la mémoire d'OSX est en fait supérieure ; après tout, la même page mentionne que

La pagination, quelle qu'elle soit, affecte les performances de manière négative parce qu'elle oblige le système à passer beaucoup de temps à lire et à écrire sur le disque. La lecture d'une page à partir du backing store prend beaucoup de temps et est très temps et est beaucoup plus lente que la lecture directe à partir de la RAM. Si le système doit écrire une page sur le disque avant de pouvoir en lire une autre, l'impact sur les performances est encore plus important.

Enjeu :

Ce phénomène (la pagination de la mémoire inactive et la forte dégradation des performances qui s'ensuit) est susceptible de se produire même lors de tâches triviales telles que la navigation multi-onglets, même si le nombre d'onglets ouverts simultanément reste raisonnable (Safari et Chrome semblent tous deux coupables d'ajouter de la mémoire inactive à chaque fois qu'un onglet est fermé).

La machine devient alors difficilement utilisable - même l'ouverture de Terminal et de purger la mémoire peut prendre quelques minutes.

Question :

L'échange de mémoire inactive peut-il être désactivé ? Ou, la mémoire inactive n'étant pas essentielle, peut-on la désactiver complètement ?

Sinon, existe-t-il un démon ou, de préférence, une application Apple qui surveille l'évolution de l'état de santé de l'utilisateur ? utilisation de la mémoire inactive (un oxymore OSX) et lorsqu'il dépasse une quantité arbitraire (un demi-giga ?), une fenêtre purge est effectuée ?

7voto

Quantumpanda Points 89

Je me suis penché sur cette question pendant un certain temps et je suis arrivé à la conclusion que, bien qu'il existe plusieurs soi-disant "solutions" proposées à divers endroits, aucune d'entre elles ne résout vraiment le problème ou ne fait disparaître les symptômes. Ce que j'ai trouvé de mieux, ce sont des techniques qui changent quand la mémoire inactive est échangée, comme l'utilisation de la fonction purge à laquelle vous avez fait référence. Je pense que MacLemon a raison de dire que le swapping ne peut être désactivé que dans son intégralité et non de manière sélective, de sorte que la désactivation du swapping de la mémoire inactive équivaudrait en pratique à la désactivation totale de la mémoire virtuelle - ce qui pourrait être une solution viable sur une machine disposant de très grandes quantités de RAM, mais qui n'est pas pratique sur les machines disposant d'une faible capacité maximale de RAM, telles que les MacBooks ou les Minis.

La raison pour laquelle aucune des solutions de purge ad hoc n'améliore la situation de manière significative est qu'il n'y a réellement que deux façons de forcer OS X à vider la mémoire inactive : l'option purge ou de forcer l'allocation de toute la mémoire libre (et comme je ne suis pas certain de la méthode utilisée par le purge ces deux éléments peuvent en fait être plus ou moins identiques). purge comme vous l'avez mentionné, prend un temps non négligeable. L'allocation de toute la mémoire libre ne fait qu'accélérer le processus par lequel le contenu de la mémoire inactive serait échangé naturellement, et occupe donc toujours la même grande quantité de ressources système. Le seul avantage de ces deux solutions est qu'elles vous permettent de choisir le moment où la permutation a lieu, de sorte qu'elle peut être effectuée avant que vous n'essayiez normalement d'allouer cette mémoire à quelque chose d'autre. L'utilité de cette solution dépend de plusieurs facteurs, et la façon la plus simple de le savoir est de l'essayer.

J'ai testé quelques utilitaires de libération de la mémoire et j'ai découvert que, pour moi, forcer manuellement la permutation inactive nécessite une surveillance plus active des niveaux de mémoire que ce qui est pratique lorsque je travaille réellement, et utiliser un utilitaire qui force automatiquement la permutation lorsque la mémoire libre tombe en dessous d'un certain seuil n'est pas mieux que de laisser le système d'exploitation le faire de lui-même, car je n'ai toujours aucun contrôle sur le moment où la permutation se produira et où mes applications s'en iront. Ainsi, bien qu'il existe une application qui fera exactement ce que votre question alternative demande, cela ne rend pas la situation moins pénible.

Jusqu'à ce que l'équipe de développement du système d'exploitation d'Apple décide que le système de gestion de la mémoire ne fonctionne pas comme il le devrait et trouve un moyen de le faire fonctionner correctement, la seule véritable solution consiste à identifier les applications qui génèrent le plus de mémoire inactive et à cesser de les utiliser. Dans mon cas, cela s'est traduit par un changement de navigateur web. J'en ai testé plusieurs, et Chrome est jusqu'à présent celui qui semble générer le moins de mémoire inactive, probablement en partie parce que chaque onglet et chaque extension fonctionne comme un processus distinct, ce qui permet à la gestion native de la mémoire du système d'exploitation de traiter chacun séparément en termes de priorité d'échange. Safari est le pire que j'aie essayé ; à partir de Safari 5.1, je pouvais ouvrir quelques onglets, ne rien faire du tout, et voir la mémoire inactive augmenter rapidement dans le moniteur d'activité - elle passait facilement de <1gb inactif à >3gb inactif en l'espace d'environ cinq minutes, lancer le cycle de swap, puis refaire exactement la même chose. (Il est vrai que la mémoire qui ne fait rien est exactement ce qui la rend inactive en premier lieu, mais elle ne devrait pas créer plus de mémoire inactive que celle qui a été allouée active en premier lieu). Safari 6 sous Mountain Lion est un peu mieux, mais pas assez pour que cela vaille la peine de revenir en arrière. Firefox, qui n'est pas basé sur WebKit, devrait être meilleur à ce sujet que Safari ou Chrome, mais il a son propre héritage de problèmes de gestion de la mémoire, y compris un historique de fuites de mémoire, qui ne le rend pas meilleur dans la pratique.

Ce qui résoudrait vraiment le problème, c'est qu'il y ait une option, probablement une option cachée dans le système d'exploitation, indiquant au système d'exploitation de simplement vider le contenu de la mémoire inactive lorsque c'est nécessaire au lieu d'échanger son contenu sur le disque. Mais je ne m'attends pas à ce qu'Apple mette un jour une telle option à disposition.

6voto

scottmarlowe Points 2952

Quelle est la quantité de mémoire vive de votre Mac ? Par ailleurs, les navigateurs (en particulier les navigateurs Webkit) sont connus pour utiliser d'énormes quantités de mémoire de nos jours. La mémoire inactive est utilisée à bon escient, contrairement à la mémoire vive libre qui reste là à consommer de l'énergie. Dans le cas d'un navigateur, cela vous permet d'annuler la fermeture d'un onglet tout en conservant son historique, etc.

Vous pouvez désactiver complètement l'échange de mémoire en exécutant la commande suivante sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist et un redémarrage. Il n'est pas possible de désactiver l'échange de manière sélective.

Vous pouvez annuler cette opération en exécutant sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist et redémarrer à nouveau.

3voto

Old Pro Points 5634

Mise à jour 2020

Cette question a été posée en 2012 et cette réponse a été rédigée en 2020. Certaines choses ont changé entre-temps, mais beaucoup sont restées inchangées.

Je pense que la plupart de cette question, la réponse de Quantumpanda et la description de l'article du support Apple souffrent d'une mauvaise compréhension de la nature de la "mémoire inactive". Le PO renvoie à la documentation d'Apple qui dit

Dans OS X, lorsque le nombre de pages dans la liste libre passe en dessous d'un seuil calculé, le noyau récupère des pages physiques pour la liste libre en transférant les pages inactives hors de la mémoire.

La documentation d'Apple le disait en 2012 et le dira encore en 2020. Cependant, cette citation provient de la section "Paging Out Process" de la documentation ; l'OP a manqué la discussion sur " Listes de pages dans le noyau ". La phrase clé (pour nos besoins actuels) de cette section est la suivante

Si une page inactive n'a pas été modifiée et n'est pas résidente permanente (câblée), elle est volée (toutes les correspondances virtuelles actuelles avec cette page sont détruites) et ajoutée à la liste des pages libres.

Ce dont parlait l'article de soutien

Par exemple, si vous avez utilisé Mail puis l'avez quitté, la mémoire vive utilisée par Mail est marquée comme mémoire inactive. La mémoire inactive est disponible pour une autre application, tout comme la mémoire libre. Toutefois, si vous ouvrez Mail avant que sa mémoire inactive ne soit utilisée par une autre application, Mail s'ouvrira plus rapidement car sa mémoire inactive est convertie en mémoire active, au lieu de la charger à partir du lecteur le plus lent.

Pour exécuter un programme, Mail dans cet exemple, le code de ce programme est lu sur le disque et écrit dans la RAM, car l'unité centrale ne peut exécuter que du code provenant de la RAM. Le système d'exploitation garde la trace du fait que la RAM est une copie d'un fichier sur le disque, et il garde la trace du fait que les données de la RAM ont été modifiées ou non. Lorsque le programme Mail se termine, la copie du fichier dans la RAM n'est plus nécessaire et se retrouve sur la liste des fichiers "inactifs". Toutefois, s'il y a suffisamment de mémoire vive, il n'est pas nécessaire de détruire les données de la mémoire vive, qui sont donc laissées telles quelles.

Si vous exécutez à nouveau le programme immédiatement, le système d'exploitation n'a pas besoin de copier le code du disque vers la RAM, car il peut voir, en consultant la liste inactive, qu'il possède déjà une copie du fichier dans la RAM ; il déplace donc simplement cette RAM vers la liste active et l'affecte au nouveau programme Mail en cours d'exécution. Cette opération est beaucoup plus rapide que la relecture du fichier à partir du disque.

Le courrier est un mauvais exemple, car vous n'arrêtez et ne démarrez pas souvent le programme de courrier. En revanche, il existe des dizaines de petits programmes que le système d'exploitation exécute en arrière-plan, par exemple pour mettre à jour les index Spotlight ou synchroniser vos données locales avec iCloud, et qui sont fréquemment exécutés, puis quittés lorsqu'ils sont terminés. Pour ces programmes, le gain de temps est beaucoup plus important.

Le point critique : ce type de mémoire inactive est jamais échangé

Ce type de mémoire, qui est soutenu par un fichier sur le disque et qui n'est pas modifié, est jamais écrit dans l'échange parce qu'il existe déjà une copie sur un autre disque. C'est le type de mémoire dont il est question dans la citation ajoutée ci-dessus : "n'a pas été modifiée et n'est pas résidente permanente". Lorsqu'il n'y a pas assez de mémoire, ce type de mémoire inactive n'est pas échangé, il est volé et placé directement sur la liste des mémoires libres.

La mémoire inactive qui est échangée est la mémoire dont une application en cours d'exécution a encore besoin.

La mémoire peut également devenir inactive si une application ne l'a pas touchée (lecture ou écriture) depuis un certain temps. Par exemple, si vous travaillez dans un traitement de texte et que vous avez plusieurs fichiers ouverts, il peut s'agir d'informations sur l'un des fichiers que vous avez ouvert mais sur lequel vous ne travaillez pas. Lorsque la mémoire est faible, ce type de mémoire est transféré sur le disque pour faire de la place à ce qui demande de la mémoire et qui est à l'origine du manque de mémoire.

Ce type de mémoire inactive doit être remplacé parce qu'il contient des données qui ne sont sauvegardées nulle part ailleurs. La seule façon d'empêcher ce type de mémoire d'être échangée est de désactiver complètement l'échange, ce qui est presque toujours un mauvais choix. Lorsque vous désactivez complètement le swap, vous réduisez considérablement la capacité du système. Si vous limitez le système à ce qu'il peut faire tourner avec le swap désactivé, il fonctionnera tout aussi bien avec le swap activé.

purge est un faux-fuyant

En purge est un faux-fuyant contre-productif. Il forcera la mémoire inactive qui serait volée au lieu d'être échangée à être volée tout de suite. Cela peut sembler bon pour les chiffres, mais cela nuit en fait aux performances de deux manières :

  1. Il faut du temps pour faire fonctionner le purge programme
  2. Il supprime les performances obtenues en gardant la trace de ce que contient la mémoire inactive et en permettant sa réutilisation.

Conclusion : n'essayez pas de désactiver l'échange de mémoire inactif.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X