Problème de compréhension de la mémoire inactive dans MacOSX

8

Je pensais avoir compris comment MacOSX gère la mémoire, mais récemment, je suis déconcerté par ses performances. Voici la situation:

  1. J'ai un tout nouveau système Core i7 avec 8 Go de mémoire physique exécutant MacOSX 10.6.7. Il y a quelques applications qui fonctionnent régulièrement et qui occupent une partie de la mémoire: Safari, Mail, Xcode, Terminal, etc.
  2. J'ai besoin d'exécuter trois processus 64 bits en parallèle, chacun utilisant environ 2000M de mémoire réelle.
  3. Bien que la mémoire filaire reste inférieure à 1 000 M (c'est-à-dire que j'ai plus de 7 000 M disponibles pour les processus), je constate une activité de pagination intense conduisant à de très mauvaises performances des trois processus gourmands en mémoire que j'ai lancés.
  4. Apparemment, je ne manque pas de RAM disponible, car la mémoire inactive signalée reste autour de 2500M et la mémoire active ne dépasse pas 5000M.

Quelqu'un peut-il me dire pourquoi MacOSX ne libère pas la mémoire inactive pour les processus qui en ont besoin, au lieu de recourir à la pagination? Existe-t-il également un moyen approprié d'influencer la gestion de la mémoire par le système?

Ventzi Zhechev
la source

Réponses:

5

J'ai trouvé, sur ma machine, que Mac OS X est un peu lent à rechercher les bonnes choses.

Chaque fois que je fais quelque chose de particulièrement gourmand en mémoire, je quitte souvent quelques applications pour l'aider. Safari est un énorme porc de mémoire s'il fonctionne depuis un certain temps et est en haut de la liste des applications à quitter. Dans mon cas, c'est lorsque j'ai essayé d'exécuter VMWare Fusion sans assez de RAM réelle.

Vous le savez probablement, mais voici quelques liens vers la documentation Apple qui décrivent l'utilisation de la mémoire et la mémoire virtuelle sur OS X:

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

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

Voici l'explication qui est donnée: La liste inactive contient des pages qui résident actuellement dans la mémoire physique mais qui n'ont pas été consultées récemment. Il est difficile d'obtenir une définition exacte de ce que cela signifie, mais il semble inclure un cache du système de fichiers ainsi qu'une mémoire inactive réelle.

La mémoire inactive est probablement une chose difficile à gérer sur un système d'exploitation basé sur une interface graphique interactive où un utilisateur peut choisir de basculer vers n'importe quelle application en cours d'exécution à tout moment et fournir une réactivité dans ce genre de situation est important .... mais le revers de la médaille est que dans une situation comme la vôtre, le système d'exploitation ne sait pas vraiment quelle est la bonne chose à faire.

Il est possible de purger (une partie de) la mémoire inactive à l'aide de la commande de purge . Cela peut devoir être installé en installant les outils CHUD mais vous pouvez déjà l'avoir installé. Je n'ai pas essayé d'utiliser la commande de purge donc YMMV ...

J'ai un peu bavardé et j'ai peut-être répondu à votre question. Après avoir écrit tout cela, j'ai trouvé une autre question sur ce site qui contient une grande partie des mêmes informations qui pourraient également aider.

Mike Meyers
la source
Merci! La purgecommande est exactement ce que je cherchais. J'avais trouvé les articles d'assistance dans la base de connaissances d'Apple, mais ils n'étaient pas particulièrement utiles.
Ventzi Zhechev
1

MacOS ne libérer la mémoire inactive, mais seulement si elle a vraiment besoin. Cette «mémoire inactive» peut en fait être de la mémoire que le noyau pense être un candidat pour la pagination - mais cela n'a pas encore été décidé, en attendant plus de temps sans que la mémoire inactive soit référencée (au lieu de cela, elle se concentre sur la pagination de la mémoire qui est vraiment moins susceptible d'être réutilisé bientôt). Dans un tel cas, la «purge» de la mémoire inactive entraînera en fait une baisse de vos performances (car ces pages fréquemment utilisées devraient être relues à partir du disque avant que votre programme puisse continuer son exécution).

purgeest utile pour les développeurs pour simuler les conditions de démarrage d'une application - par exemple, pour voir combien de temps il faut pour qu'une application s'exécute la première fois après un démarrage ou une longue interruption. Pour l'utilisateur type, purgen'est pas très utile (et entraînera en fait une dégradation temporaire des performances).

jhfrontz
la source