8 votes

Pourquoi la somme de libre + actif + inactif + spéculatif + câblé ne correspond-elle pas à la RAM totale?

Lorsque j'exécute vm_stat sur mon MacBook Pro 10.6.8 avec 2 Go de RAM, j'obtiens ce qui suit :

Statistiques de mémoire virtuelle Mach : (taille de page de 4096 octets)
Pages libres : 90518.
Pages actives : 205479.
Pages inactives : 32417.
Pages spéculatives : 134461.
Pages câblées : 61009.
"Fautes de traduction" : 26323651.
Pages copiées en écriture : 177180.
Pages remplies de zéros : 15230394.
Pages réactivées : 3.
Pageins : 388108.
Pageouts : 0.
Cache d'objets : 14 hits sur 797355 recherches (taux de succès de 0%)

Si vous additionnez la mémoire libre, active, inactive, spéculative et câblée et que vous multipliez par 4096 (pour convertir les pages en octets), vous obtenez 2,145,828,864 au lieu des 2,147,483,648 attendus. Il manque 1,654,784 octets (ou 404 pages). Cependant, ce nombre n'est pas constant, il fluctue :

$ vm_stat 1 | perl -MList::Util=sum -nle 'next unless /^\s*\d/; print 524288-sum((split)[0 .. 4])'
193
147
146
60
57
220
215
385
379
285
283
194

Ces pages manquantes ne sont-elles qu'une inexactitude de rapport parce que la quantité d'un type de page a changé au moment où vm_stat imprime le type de page suivant ? Ou est-ce qu'il y a un autre type de mémoire que je ne prends pas en compte ?

4voto

Austin A Points 131

Après avoir passé du temps à examiner cela et à réfléchir à une question SO à ce sujet, je pense avoir trouvé la solution.

Avant de commencer, je tiens à souligner le débat philosophique qu'Apple a dû avoir lorsqu'ils ont cherché à répondre à la question Qu'est-ce que la mémoire utilisée? Si vous regardez le moniteur d'activité sur OSX avant Yosemite (vous pouvez le voir dans le lien de ma question ci-dessous), vous verrez que la Mémoire utilisée se compose de quatre parties : Mémoire de l'application, Cache de fichiers, Mémoire câblée et Mémoire compressée. Maintenant, si vous regardez le moniteur d'activité ci-dessous, à partir de OSX Yosemite, vous verrez que le Cache de fichiers a disparu. Je ne suis pas sûr pourquoi il y a eu un changement entre les systèmes d'exploitation, mais il y en a un néanmoins. Puisque vous utilisez un OS antérieur à Yosemite dans la question, je vais me référer à l'ancienne définition.

Revenons au calcul de la mémoire totale, plus précisément de la Mémoire utilisée puisque la Mémoire libre nous est donnée en utilisant vm_stat.

Pour calculer cela, nous devons mapper les quatre parties de la Mémoire utilisée aux différentes statistiques fournies par vm_stat. Certaines d'entre elles sont assez faciles.

Correspondances du moniteur d'activité avec vm_stat

  • Cache de fichiers : -> Pages soutenues par des fichiers
  • Mémoire câblée : -> Pages câblées
  • Compressé : -> Pages occupées par le compresseur
  • Mémoire de l'application : -> Pages actives + Pages spéculatives

Trouver la Mémoire de l'application est le plus difficile, et pour être honnête, je ne comprends pas vraiment pourquoi la mémoire spéculative en fait partie, mais les maths sont irréfutables.


Les mathématiques irréfutables (basées sur le moniteur d'activité OSX pré-Yosemite)

                  vm_stat       Moniteur d'activité
------------------------------------------------
Mémoire libre     9.97 Go       9.85 Go
Pages actives      2.38 Go       xxx
Pages spéculatives 0.57 Go       xxx
Mémoire de l'appli. xxx           2.95                       
Fichiers mis en cache    1.24 Go       1.22 Go
Mémoire câblée        1.43 Go       1.41 Go
Compressé        0.57 Go       0.58 Go
------------------------------------------------
Mémoire totale       16.16 Go       16.01 Go
                 (gardez à l'esprit l'erreur d'arrondi)

Moniteur d'activité OSX pré-Yosemite

description de l'image ici


Moniteur d'activité OSX Yosemite

description de l'image ici

2voto

RyanKeeter Points 1445

Réponse courte : la fonction host_statistics64() retourne de mauvaises données.

Je continue à enquêter sur la raison de cela, mais le bug (s'il s'agit d'un bug) se trouve dans la bibliothèque que vm_stat utilise, et non dans vm_stat lui-même.

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