Comment désactiver Mac OS X d'utiliser swap quand il y a encore de la mémoire "inactive"?

Un phénomène courant dans mon utilisation quotidienne (et plusieurs autres selon divers articles sur Internet) d'OS X, le système semble devenir lent chaque fois qu'il n'y a plus de mémoire "libre" disponible. Soi-disant, cela est dû à l'échange, car une forte activité sur le disque est apparente et que vm_stat signale de nombreuses pages de sortie. (Corrigez-moi de mal)

Cependant, la quantité de ram "inactive" est généralement d'environ 12,5% à 25% de toute la mémoire disponible (^1.) lors de l'échange commence / se produit / se termine.

Selon http://support.apple.com/kb/ht1342 :

Mémoire inactive

Cette information en mémoire n'est pas utilisée activement, mais a été récemment utilisé.

Par exemple, si vous avez utilisé Mail et que vous l'avez ensuite quitté, la RAM qui Le courrier utilisé est marqué comme mémoire inactive. Cette mémoire inactive est disponible pour une utilisation par une autre application, tout comme la mémoire libre. Cependant, si vous ouvrez le courrier avant son inactif la mémoire est utilisée par un application différente, le courrier s'ouvrira plus rapidement car il est inactif la mémoire est convertie en mémoire active, au lieu de charger le courrier du disque dur plus lent.

Et selon http://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html :

La liste inactive contient les pages qui résident actuellement dans mémoire physique mais n'ont pas été consultés récemment. Ces pages contient des données valides mais peut être libéré de la mémoire à tout moment .

Donc, en gros: Lorsqu'un programme a quitté, sa mémoire devient marquée comme inactive et doit pouvoir être réclamée à tout moment. Pourtant, OS X préférera commencer à échanger de la mémoire vers le fichier d'échange au lieu de simplement réclamer cette mémoire, chaque fois que la mémoire "libre" devient faible.

Pourquoi ? Quel est l'avantage de ce comportement par rapport, disons, à libérer instantanément de la mémoire inactive et à ne même pas toucher au fichier d'échange? Quelques sources (^2.) indiquez qu'OS X mettrait en page la mémoire "inactive" pour l'échanger avant de la libérer, mais cela n'a plus de sens maintenant si la mémoire peut être libérée de la mémoire à tout moment ? L'échange coûte cher, la libération est bon marché, n'est-ce pas?

Ce comportement peut-il être modifié en utilisant une préférence ou un hack connu? (De préférence, celui qui n'inclut pas complètement la désactivation de swap / dynamic_pager et le redémarrage...)

J'apprécie la commande purge , car ainsi que le concept de Réparation des autorisations de disque pour forcer de la mémoire libre, mais ce sont des moyens de forcer douloureusement plus de mémoire libre que de réparer réellement la logique de décision de swap / release...

Btw une question similaire a été posée ici: http://forums.macnn.com/90/mac-os-x/434650/why-does-os-x-swap-when / et ici : http://hintsforums.macworld.com/showthread.php?t=87688 mais même si l'OPs a posé à nouveau la question centrale, aucune des réponses ne répond à une réponse à il...

^1. MISE À JOUR 17-mar-2012 Depuis que j'ai posté cette question pour la première fois, je suis passé de 4 Go à 8 Go de ram installée, et le problème persiste. La quantité de ram "inactive" était de 0,5 Go à 1,0 Go auparavant et se situe maintenant généralement autour de 1,0 à 2,0 Go lorsque l'échange démarre / se produit / se termine, c'est-à-dire qu'environ 12,5% à 25% de la ram est conservée comme inactive par la logique du noyau osx.

^2. Par exemple https://apple.stackexchange.com/questions/4288/what-does-it-mean-if-i-have-lots-of-inactive-memory-at-the-end-of-a-work-day :

Une fois que toute votre mémoire est utilisée (la mémoire libre est 0), le système d'exploitation s'écrira mémoire inactive dans le fichier swap pour faire plus de place dans la mémoire active.

MISE À JOUR 17-mar-2012

Voici un tour d'horizon des méthodes qui ont été suggérées pour aider jusqu'à présent:

La purge commande

" Utilisé pour approximer les conditions de démarrage initiales avec un cache tampon de disque froid pour l'analyse des performances. Cela n'affecte pas la mémoire anonyme allouée via malloc, vm_allocate, etc. ".

Ceci est utile pour empêcher osx d'échanger le cache disque (ce qui est ridicule qu'osx le fasse en premier lieu), mais avec l'inconvénient que le cache disque est libéré, ce qui signifie que si le cache disque n'était pas sur le point d'être échangé, on finirait simplement avec un cache tampon de disque froid, affectant probablement négativement les performances.

L'application Freememory et/ou Réparer les autorisations de disque pour forcer la mémoire libre

N'aide pas à libérer de la mémoire, ne déplaçant que quelques gigaoctets de contenu de la mémoire de la ram vers la HD. En fin de compte, cela provoque de nombreux swap-ins lorsque j'essaie d'utiliser les applications qui étaient ouvertes tout en libérant de la mémoire, car une grande partie de sa machine virtuelle est maintenant en swap.

Accélérer l'allocation de swap à l'aide de dynamicpagerwrapper

Semble une bonne chose à faire pour accélérer l'utilisation de l'échange, mais ne résout pas le problème de l'échange osx en premier lieu alors qu'il y a encore de la mémoire inactive.

Désactivation du swap en désactivant dynamicpager et en redémarrant

Cela forcera osx à ne pas utiliser swap au prix du système suspendu lorsque toute la mémoire est utilisée. Pas viable alternative...

Désactivation du swap à l'aide de un dynamicpager piraté

Similaire à la désactivation de dynamicpager ci-dessus, certains extraits des commentaires du billet de blog indiquent que ce n'est pas une solution viable: "La mémoire inactive est élevée comme d'habitude". "lorsque votre système est à court de mémoire, tout le système d'exploitation se bloque...", "si vous consommez toute la quantité de mémoire du mac, la machine se bloquera probablement"

Pour résumer, je ne suis toujours pas au courant d'un moyen de désactiver Mac OS X d'utiliser swap lorsqu'il y a encore de la mémoire "inactive". Si ce n'est pas possible, peut-être qu'il y a au moins une explication quelque part de la raison pour laquelle osx préfère échanger de la mémoire qui peut être libérée de la mémoire à tout moment ?

demandé sur