L'échange s'est apparemment produit lorsque les pages RAM inactives étaient réellement actives.
( Mise à jour: comme cela a été clarifié dans un commentaire, ce n'est pas votre cas. Les personnes ayant le même problème peuvent donc passer à la règle horizontale .)
C'est-à-dire que vous aviez de nombreux programmes en cours d'exécution et que le noyau a échangé quelques pages. Ensuite, vous avez quitté certains programmes. Le noyau marque leurs pages RAM comme inactives. Mais il ne remettra pas les pages dans la RAM tant que ces pages ne seront pas nécessaires. Il en résulte des pages inactives et permutées.
Pourquoi ne pas échanger les pages de manière préventive? Parce que ce serait parier contre toute attente: à long terme, vous perdez. Pensons à un exemple simplifié: deux programmes A et B qui ne tiennent pas en même temps dans la RAM. Le programme A est toujours en cours d'exécution et toutes les pages permutées appartiennent à A. Le programme B a quitté et toutes les pages inactives appartiennent à B.
Si le noyau échange de manière préventive les pages de A et immédiatement après:
- le programme A doit accéder à ses pages -> Vous gagnez - les pages sont déjà dans la RAM.
- vous lancez à nouveau B -> Vous perdez - vous avez "payé" le coût pour ramener les pages en RAM et maintenant vous devez les renvoyer.
- vous lancez un autre programme C -> Vous perdez si A et C ne rentrent pas dans la RAM en même temps. S'ils correspondent, vous êtes égal.
Tenez également compte du fait que la permutation (écriture sur le disque) est plus coûteuse que la permutation (lecture à partir du disque). Ce qui rend ce "pari" encore plus peu attrayant.
En bref: faites confiance à votre noyau et n'essayez pas de le déjouer.
Mise à jour: il
s'avère que la mémoire inactive ne fonctionne pas car l'article Utilisation du moniteur d'activité pour lire la mémoire système a conduit de nombreuses personnes à croire que cela fonctionne. La définition donnée dans l'article pour la mémoire inactive est correcte:
Ces informations sont dans la RAM mais elles ne sont pas activement utilisées, elles ont été récemment utilisées.
Mais l'exemple suivant est totalement trompeur et trop simplifié (comme mon exemple pour être franc):
Par exemple, si vous avez utilisé Mail puis l'avez quitté, la RAM que Mail utilisait est marquée comme mémoire inactive. La mémoire inactive peut être utilisée par 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 plus lent.
J'ai cherché plus de ressources en ligne et je suis arrivé à ce fil dans la liste de diffusion du noyau darwin qui est assez informatif. Citant Jim Magee (de l'équipe Darwin - je pense):
En bref, le système VM du noyau lorsqu'il traite les analyses de pression de la mémoire à travers les pages en cours d'utilisation et essaie de les maintenir dans un équilibre entre les marquages actifs et inactifs. Les pages inactives sont analysées pour être réutilisées lorsqu'elles sont marquées comme inactives. S'ils ont été réutilisés, ils sont marqués comme actifs et une autre page doit passer de l'état actif à l'état inactif pour détecter si elle est en cours d'utilisation. Donc, inactif est un terme impropre. C'est un raccourci pour "éventuellement inactif, essayons de vérifier cela."
Comme vous l'avez découvert, l'équilibre interne que nous recherchons (actuellement) est d'environ 2/3 actif contre 1/3 inactif ...
Cela explique le comportement que vous observez. C'est-à-dire que les pages inactives que vous voyez appartiennent à des programmes en cours d'exécution qui n'ont pas été récemment utilisés. Ainsi, lorsque vous lancez un nouveau programme, les pages inactives sont permutées. En même temps, les pages d'autres programmes sont marquées comme inactives pour maintenir le rapport 2/1 entre actif et inactif.
Le fil contient également quelques suggestions pour en savoir plus sur les internes de Darwin. Il y a aussi quelques suggestions au cas où vous commenceriez à étudier l'utilisation de la mémoire à cause de problèmes de beachball (qui n'ont généralement pas grand-chose à voir avec cela).
La conclusion reste la même: faites confiance à votre noyau et n'essayez pas de le déjouer. :-)