Comment les machines virtuelles peuvent-elles consommer si peu de RAM sur la machine hôte physique?

24

J'exécute VirtualBox sur une machine Windows XP avec 2 Go de RAM. J'ai créé une machine virtuelle Ubuntu et lui ai alloué une mémoire de base de 750 Mo.

Juste pour le tester, j'ai exécuté 20 choses à la fois sur la machine virtuelle. Selon "top" dans ubuntu, 750 Mo de mémoire étaient utilisés, ainsi qu'un espace de swap considérable.

Cependant, de retour dans le Gestionnaire des tâches de Windows, VitrualBox utilisait seulement 45 000 Ko de mémoire. Comme j'ai demandé à la machine virtuelle d'en faire de plus en plus, l'utilisation du processeur du processus VirtualBox a augmenté (sous Windows) mais l'utilisation de la mémoire est restée la même.

Comment une machine virtuelle qui utilise 750 Mo de mémoire ne peut-elle consommer que 45 Mo de mémoire sur une machine physique?

Je suppose que la réponse est que la machine virtuelle n'utilise pas de mémoire réelle, mais de la mémoire simulée (c'est-à-dire de l'espace d'échange), mais elle semble vraiment accrocheuse comme si elle fonctionnait en RAM.

MISE À JOUR: J'ai joué avec perfmon comme suggéré. Même en résumant tout ce à quoi je peux penser, cela semble encore prendre moins de 300 Mo ... donc c'est toujours un mystère.

Process               VirtualBox     VirtualBox#1     Total
PoolNonpagedBytes     5,840          42,552           48,392
PoolPagedBytes        119,796        166,892          286,688
PrivateBytes          8,884,224      52,719,616       61,603,840
VirtualBytes          75,939,840     161,202,176      237,142,016
Sum                   84,949,700     214,131,236      299,080,936
dggoldst
la source

Réponses:

7

Les colonnes du Gestionnaire des tâches peuvent donner des chiffres trompeurs - pour une utilisation précise de la mémoire par processus, vous pouvez utiliser perfmon (Analyseur de performances dans le Panneau de configuration) et consulter les chiffres des "octets privés".

Pour le montrer, allez dans perfmon, cliquez pour ajouter le compteur (je suis un Ctrl+ Igenre de personne). L '"objet de performance" serait "Processus", avec "Octets privés" dans la liste des compteurs - vous devrez évidemment sélectionner le processus approprié dans la liste de droite.

Rowland Shaw
la source
Salut. J'ai essayé mais je n'ai pas eu de chance de trouver quelque chose appelé Private Bytes. Pouvez-vous nous donner une étape par étape?
dggoldst
Ont ajouté ...
Rowland Shaw
Merci, ceci est très utile. J'ai ajouté l'analyse à la question. Je n'arrive toujours pas à comprendre pourquoi cela ne représente pas 750 cependant.
dggoldst
Très étrange. Je pourrais souligner que PrivateBytes est un sous-ensemble de VirtualBytes (les octets virtuels sont la proportion de l'espace d'adressage alloué, tandis que les octets privés sont cette mémoire qui n'a pas encore été libérée - vous pouvez obtenir une fragmentation de la mémoire avec une petite fuite de mémoire et avoir les applications meurent avec une mémoire insuffisante, même quand il y en a suffisamment). Il se peut que le pilote de virtualisation alloue la mémoire de manière à ce qu'elle ne s'affiche pas, ce qui serait logique car la mémoire devrait être à l'abri de la pagination vers le disque.
Rowland Shaw
Sur les quatre compteurs que vous mettez dans votre table, seul "PoolNonPagedBytes" est un décompte de mémoire virtuelle non paginable, donc cette quantité de mémoire physique sera utilisée. Les autres sont tous virtuels. Comme toute autre taille de mémoire virtuelle, la RAM réelle qu'elle utilise est presque toujours beaucoup moins importante. C'est l'un des principaux points de la mémoire virtuelle.
Jamie Hanrahan
5

Avec certaines solutions de virtualisation sous Linux, la façon dont ils allouent la mémoire le fait apparaître au noyau hôte comme un fichier mappé en mémoire spécial (un peu comme le /proc/kcorefichier spécial) donc il est compté dans le compte "mis en cache" dans la sortie de free, pas le nombre "utilisé".

Je suppose que quelque chose de similaire se produit avec votre environnement Windows: les 45 Mo seront utilisés par les processus de gestion de VirtualBox, et les 750 alloués à la VM elle-même seront comptés ailleurs.

David Spillett
la source
0

Il peut s'agir de mémoire virtuelle, de fichiers mappés en mémoire ou de quelque chose de similaire.

Avez-vous essayé d'afficher d'autres colonnes dans le Gestionnaire des tâches?

zildjohn01
la source
0

Ne croyez pas le gestionnaire de tâches. Il ne peut pas tout voir.

Ce problème est plus commun avec SQL Server, par exemple avec SQL, je n'ai jamais trouvé personne qui m'ait dit un moyen d'obtenir des informations précises du Gestionnaire des tâches qui me feraient croire que le chiffre n'est pas caché dans l'un des d'autres colonnes.

sgmoore
la source