Comment fonctionne l'utilisation de la mémoire de VirtualBox?

38

J'ai utilisé plusieurs machines virtuelles avec VirtualBox, et l'utilisation de la mémoire a été rapportée de différentes manières, et j'ai du mal à déterminer la quantité de mémoire réellement utilisée par mes machines virtuelles. Voici un exemple:

  • J'ai une machine virtuelle sous Windows 7 (en tant qu'OS invité) sur mon ordinateur hôte Windows XP.
  • La machine hôte dispose de 3 Go de RAM
  • La VM invité est configurée pour avoir une mémoire de base de 1 Go.
  • Si j'exécute le gestionnaire de tâches sur le système d'exploitation invité, la mémoire utilisée est de 430 Mo.
  • Si j'exécute le gestionnaire de tâches sur le système d'exploitation hôte, trois processus semblent appartenir à VirtualBox:
    1. VirtualBox.exe (1), utilisant 60 Mo de mémoire (celui-ci semble utiliser au maximum le processeur)
    2. VirtualBox.exe (2), utilisant 20 Mo de mémoire
    3. VBoxSvc.exe, utilisant 11,5 Mo de mémoire
  • Lors de l'exécution de la machine virtuelle, la mémoire utilisée par le système d'exploitation hôte est d'environ 2 Go.
  • Lorsque je ferme la machine virtuelle, l'utilisation du système d'exploitation hôte revient à 900 Mo environ.

Donc, clairement, il y a des différences énormes ici. Je ne comprends vraiment pas comment GuestOS peut utiliser plus de 400 Mo alors que le système d'exploitation hôte ne montre qu'environ 75 Mo alloués à la machine virtuelle. Existe-t-il d'autres processus utilisés par VirtualBox qui ne sont pas nommés de manière évidente?

De plus, j'aimerais savoir si j'utilise une machine de 1 Go, est-ce que cela va prendre 1 Go de mon système d'exploitation hôte ou uniquement la quantité de mémoire actuellement utilisée par la machine invité?

Mise à jour:

Une personne a exprimé sa méfiance vis-à-vis de mes chiffres d'utilisation de la mémoire, et je ne suis pas sûre si cette méfiance était dirigée contre moi ou les rapports du gestionnaire de tâches de mon système d'exploitation hôte (qui est peut-être le coupable), mais pour les sceptiques, voici une capture d'écran de ces processus sur la machine hôte:

Gestionnaire de tâches VirtualBox

DrFredEdison
la source
Je me demandais exactement la même chose plus tôt aujourd'hui lorsque j'exécutais deux machines virtuelles VBox à la fois.
MartW
Dans le gestionnaire de tâches, activez d'autres colonnes de la mémoire (Affichage-> Sélectionner des colonnes ...). La mémoire est comptée de différentes manières dans Windows. Par exemple, "taille de validation" peut être considérablement plus élevé que "Utilisation de la mémoire". Exactement lequel utiliser et comment les interpréter est une autre histoire.
Lilbyrdie
Double possible: superuser.com/q/17266/302
Rowland Shaw

Réponses:

12

Le seul emplacement dans le Gestionnaire des tâches qui semble refléter le montant total se trouve sur l'onglet Performances - la valeur Total Commit Charge suit à peu près le montant alloué à la machine virtuelle. Je viens d'en fermer une avec 1536 Mo alloués, et la charge de validation est passée d'environ 2,4 Go à 0,8 Go. Vous pouvez surveiller dans une certaine mesure ceci par rapport à Virtual Box à l'aide de l'Analyseur de performances et en choisissant les compteurs Process: Octets privés pour VirtualBox, VBoxSvc et également VirtualBox N ° 1, N ° 2, etc. (un pour chaque ordinateur virtuel en cours d'exécution). Il y a aussi le compteur Memory: Committed Bytes pour tout.

MartW
la source
Le PO ne semble pas être particulièrement intéressé par ce qui a été alloué, mais il demande ce qui est utilisé. Donc, je ne suis pas sûr de savoir comment cela se rapporte à sa question.
David Schwartz
12

Pour comprendre l'architecture de processus de VirtualBox, voir
Architecture de VirtualBox :

Une fois que vous démarrez une machine virtuelle (VM) à partir de l'interface graphique, vous avez deux fenêtres (la fenêtre principale et la VM), mais trois processus en cours d'exécution. En regardant votre système depuis Task Manager (Windows) ou un moniteur système (sous Linux), vous verrez:

  1. VirtualBox, l'interface graphique de la fenêtre principale;
  2. Un autre processus VirtualBox qui a été lancé avec le paramètre -startvm, ce qui signifie que son processus d'interface graphique agit comme un shell pour une machine virtuelle.
  3. VBoxSVC, le service mentionné ci-dessus, qui s'exécute en arrière-plan pour garder une trace de tous les processus impliqués. Cela a été démarré automatiquement par le premier processus d'interface graphique.

En ce qui concerne la mémoire, le manuel de l' utilisateur indique:

Mémoire de base

Ceci définit la quantité de RAM allouée et donnée à la machine virtuelle lors de son exécution. La quantité de mémoire spécifiée sera demandée au système d'exploitation hôte. Elle doit donc être disponible ou rendue disponible en tant que mémoire libre sur l'hôte lorsque vous tentez de démarrer la machine virtuelle. Elle ne sera pas disponible pour l'hôte pendant le fonctionnement de la machine virtuelle. Il s'agit du même paramètre que celui spécifié dans l'assistant "Nouvelle machine virtuelle", décrit dans les instructions de la section intitulée "Création d'une machine virtuelle" ci-dessus.

Cela signifie que l'invité sort de l'hôte:

  • Autant de mémoire qu'il a été déclaré avec
  • Chaque machine virtuelle est également un exécutable VirtualBox, vous devez donc ajouter sa mémoire.

Il est toujours possible que le manuel de VirtualBox ait plusieurs versions de retard et que les dernières techniques d'optimisation de la mémoire ne soient pas documentées.

En outre, VirtualBox peut optimiser l'utilisation de la mémoire en n'allouant pas toute la mémoire de la machine virtuelle définie.

L'allocation de mémoire en fonction des besoins est une optimisation qui peut économiser beaucoup de mémoire physique, mais les processus gourmands en mémoire de la VM peuvent être ralentis par le besoin fréquent de VirtualBox de demander plus de mémoire hôte.

harrymc
la source
8
Ce n'est pas spécifique à VirtualBox - voir ceci: serverfault.com/questions/19935/…
MartW
@harrymc, vous dites donc que le gestionnaire de tâches n'indique PAS dans la liste des processus la quantité de mémoire utilisée par la machine virtuelle?
Trevor Boyd Smith
@TrevorBoydSmith: Tout ce que je dis, c'est qu'il y a plusieurs processus en jeu et que vous devez choisir correctement les colonnes dans le gestionnaire de tâches.
harrymc
2
mon vm prend 1,2 Go. sur le gestionnaire de tâches, il ne montre que 60 Mo. Donc, par conséquent, je dirais que ce gestionnaire de tâches n’affiche pas toute la mémoire utilisée par ma machine virtuelle. sauf si vous pouvez en quelque sorte me montrer comment ajuster le gestionnaire de tâches pour afficher 1,2 Go.
Trevor Boyd Smith
1
Toute cette conversation et toutes les réponses ne sont que des variantes d'une confusion entre mémoire virtuelle et mémoire physique.
David Schwartz
2

Les entrées que vous voyez dans TaskManager ne sont pas destinées à votre machine virtuelle, mais à l'interface graphique de VirtualBox. L'onglet Performances vous indiquera clairement la quantité de mémoire totale utilisée, mais sans granularité en ce qui concerne les processus. Personnellement, j'aimerais que la VBox n'utilise que ce dont elle a besoin, mais je suis d'accord pour dire qu'il est important qu'elle puisse utiliser autant qu'elle le souhaite, d'où la distinction.

Rob Vanstone
la source
1

Peut être lié aux ajouts d'invité VirtualBox.

Mon installation Ubuntu utilise actuellement environ 20 Mo, comme indiqué par WinXP. C'est avec VBoxAdditions.

Mon installation Lubuntu utilise actuellement environ 90 Mo, comme indiqué par WinXP. Je viens de l'installer; VBoxAdditions n'a pas été installé.

L'utilisation de la mémoire varie en fonction de ce que fait la machine virtuelle. J'ai installé mon Ubuntu en cours d'exécution ziproxy; lorsque je fais quelque chose qui parle à ziproxy, l'utilisation de la mémoire augmente de quelques mégaoctets au fur et à mesure de l'utilisation de la VM.

En général, cependant, la virtualisation a suffisamment progressé pour que les spécifications apparentes pour l'invité n'aient pas besoin d'être entièrement attribuées par l'hôte. Semble utiliser l'allocation dynamique et la pagination forte.

Coup de main
la source
1

Donc, clairement, il y a des différences énormes ici. Je ne comprends vraiment pas comment GuestOS peut utiliser plus de 400 Mo alors que le système d'exploitation hôte ne montre qu'environ 75 Mo alloués à la machine virtuelle. Existe-t-il d'autres processus utilisés par VirtualBox qui ne sont pas nommés de manière évidente?

Vous regardez ce qui est utilisé sur l'hôte, pas ce qui est alloué . L’invité n’utilise pas (pour le moment) plus de 400 Mo de RAM.

De plus, j'aimerais savoir si j'utilise une machine de 1 Go, est-ce que cela va prendre 1 Go de mon système d'exploitation hôte ou uniquement la quantité de mémoire actuellement utilisée par la machine invité?

Il réservera 1 Go de RAM, mais il risque en fin de compte d’utiliser beaucoup moins que cela. Si l'invité n'utilise pas une partie de cette mémoire, la RAM hôte peut être utilisée à d'autres fins (telles que la mise en cache de pages de disque vierge), même si elle est réservée à l'invité. Et même si l'invité utilise une partie de cette mémoire, s'il ne l'utilise pas suffisamment longtemps, il peut toujours être éjecté de la mémoire physique par un échange opportuniste.

Malheureusement, vous vous êtes plongé dans une question extrêmement complexe et il faudrait beaucoup de pages pour l'expliquer réellement. Il y a beaucoup d'informations incorrectes dans les réponses à cette question.

David Schwartz
la source
0

Vous pouvez le voir en utilisant la grande application VMMap de SysInternals :

  1. Tout d’abord, vous devez trouver le bon processus. Commencez par exemple par Process Hacker ou Process Explorer de SysInternals.
  2. Afficher la liste des processus sous forme d'arborescence
  3. Localisez le processus VBoxSVC.exe, il devrait avoir plusieurs processus enfants VBoxHeadless.exesi une machine virtuelle est en cours d'exécution
  4. Si plusieurs ordinateurs virtuels sont en cours d'exécution, il y aura plusieurs branches de VBoxHeadless.exeprocessus, sélectionnez la branche appropriée en vérifiant la ligne de commande du processus. Elle contient un identificateur de votre ordinateur virtuel.
  5. Vous êtes intéressé par le plus bas VBoxHeadless.exede la branche (c’est-à-dire qu’il n’a plus d’enfants, seulement un parent, alors c’est une feuille), rappelez-vous son PID
  6. Démarrer VMMap
  7. Sélectionnez le bon VBoxHeadless.exeprocessus par son PID et cliquez sur OK

Dans mon cas, indiquant que tous les octets privés , jeu de travail et Committed mémoire en VMMap correspondent presque exactement la quantité de mémoire allouée à la machine virtuelle dans VirtualBox.

Dawid Ferenczy Rogožan
la source