web-dev-qa-db-fra.com

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

J'ai utilisé plusieurs machines virtuelles avec VirtualBox, et l'utilisation de la mémoire a été rapportée sous différents angles, 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 un VM exécutant Windows 7 (en tant qu'OS invité) sur mon ordinateur Windows XP.
  • La machine hôte dispose de 3 Go de RAM
  • L'invité VM est configuré pour disposer d'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 que la machine invitée utilise actuellement?

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ûr 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:

VirtualBox task manager

37
DrFredEdison

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

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

  1. VirtualBox, l'interface graphique de la fenêtre principale;
  2. Un autre processus VirtualBox qui a été démarré 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 VM lorsqu'elle est en cours d'exécution. La quantité de mémoire spécifiée sera demandée au système d’exploitation de l’hôte. Elle doit donc être disponible ou rendue disponible en tant que mémoire libre sur l’hôte lors de la tentative de démarrage de la VM. Elle ne sera pas disponible pour l’hôte tant que le VM est en cours d'exécution. 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 VM 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 définie VM.

L'allocation de mémoire selon les besoins est une optimisation qui permet d'é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.

12
harrymc

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.

12
MartW

Cela semble être un problème de Windows. Voir le troisième article ici: http://forum.sysinternals.com/pe-is-not-showing-all-memory-used-by-virtualbox_topic23886.html

L'utilisation d'un programme tel que VMMap montre clairement que la mémoire que vous indiquez à la VBox d'utiliser est réellement utilisée. Aucune idée pourquoi ce n'est pas visible pour le gestionnaire de tâches ou l'explorateur de processus.

4
RandomInsano

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 aucun détail sur les processus. Personnellement, j'aimerais que la VBox utilise uniquement 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.

2
Rob Vanstone

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 plus de 400 Mo de l'hôte RAM de l'hôte.

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 que la machine invitée utilise actuellement?

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, l'hôte RAM peut être utilisé à de nombreuses autres fins (telle 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, votre question est extrêmement complexe et il faudrait plusieurs pages pour l'expliquer réellement. Il y a beaucoup d'informations incorrectes dans les réponses à cette question.

1
David Schwartz

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 VM fait. J'ai mon installation 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 à la mise en service du 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.

1
helping-hand