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

J'ai exécuté plusieurs machines virtuelles avec VirtualBox, et l'utilisation de la mémoire a été signalée à partir de différentes perspectives, et j'ai du mal à déterminer la quantité de mémoire que mes machines virtuelles utilisent réellement. Voici un exemple:

  • J'ai une machine virtuelle exécutant Windows 7 (en tant que Guest OS) sur ma machine hôte Windows XP.
  • La machine hôte a 3 Go de RAM
  • La VM Invité est configurée pour avoir une mémoire de base de 1 Go
  • Si je lance Task Manger sur le système d'exploitation invité, je vois l'utilisation de la mémoire de 430 Mo
  • Si je lance Task Manger sur le système d'exploitation hôte, je vois 3 processus qui semblent appartenir à VirtualBox:
    1. VirtualBox.exe (1), en utilisant 60 Mo de mémoire (celui-ci semble avoir le plus d'utilisation de CPU)
    2. VirtualBox.exe (2), en 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, l'utilisation de la mémoire du système d'exploitation hôte est d'environ 2 Go
  • Lorsque je ferme la machine virtuelle, le système d'exploitation hôte remonte à l'utilisation de la mémoire jusqu'à environ 900 Mo

Donc, il y a des différences considérables ici. Je ne comprends vraiment pas comment le GuestOS peut utiliser 400+ MB, alors que le système d'exploitation hôte affiche seulement environ 75 Mo alloués à la machine virtuelle. Existe-t-il d'autres processus utilisés par VirtualBox qui ne sont pas aussi clairement nommés?

En outre, j'aimerais savoir si je lance une machine avec 1 Go, est-ce que cela va prendre 1 Go de l'hôte de mon système hôte, ou seulement la quantité de mémoire utilisée par la machine Invité?

Mettre à jour:

Quelqu'un a exprimé sa méfiance à l'égard de mes numéros d'utilisation de la mémoire, et je ne suis pas sûr de savoir si cette méfiance était dirigée contre moi, ou les rapports de gestion de tâches de mon serveur hôte (ce qui est peut-être le coupable), mais pour tous les sceptiques, voici une capture d'écran de ces processus Sur la machine hôte:

Gestionnaire de tâches VirtualBox

Le seul endroit dans le Gestionnaire des tâches qui semble refléter le montant total se trouve sur l'onglet performance – la valeur Total Commit Charge gagne à peu près le rythme du montant alloué à la machine virtuelle. Je viens de fermer un avec 1536 Mo alloué, et la charge de validation est passée d'environ 2,4 Go à 0,8 Go. Vous pouvez surveiller dans une certaine mesure cela contre Virtual Box à l'aide du moniteur de performance et choisir les compteurs Process: Private Bytes pour VirtualBox, VBoxSvc, ainsi que VirtualBox # 1, # 2, etc. (un pour chaque machine virtuelle en cours d'exécution). Il y a aussi la mémoire: Comptes Bytes confirmés pour tout.

Pour comprendre l'architecture de processus de VirtualBox, voir
L'architecture 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 machine virtuelle), mais trois processus en cours d'exécution. En regardant votre système à partir de Task Manager (sur Windows) ou d'un moniteur système (sous Linux), vous verrez ceci:

  1. VirtualBox, l'interface graphique pour 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 GUI agit comme un shell pour une VM;
  3. VBoxSVC, le service mentionné ci-dessus, qui fonctionne en arrière-plan pour suivre tous les processus impliqués. Cela a été automatiquement démarré par le premier processus GUI.

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

Mémoire de base

Cela définit la quantité de RAM qui est allouée et donnée à la machine virtuelle lorsqu'il est en cours d'exécution. La quantité de mémoire spécifiée sera demandée au système d'exploitation hôte, donc elle doit être disponible ou mise à disposition en tant que mémoire libre sur l'hôte lors de la tentative de démarrage de la machine virtuelle et ne sera pas disponible pour l'hôte pendant la mise en service de la VM. C'est le même paramètre qui a été spécifié dans l'assistant "Nouvelle machine virtuelle", comme décrit avec les instructions dans la section intitulée «Création d'une machine virtuelle» ci-dessus.

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

  • Plus de mémoire qu'on l'a 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 VirtualBox présente plusieurs versions et que la dernière technique d'optimisation de mémoire ne soit pas documentée.

De plus, VirtualBox peut optimiser l'utilisation de la mémoire en n'attribuant pas la mémoire VM entière définie.

L'attribution de la mémoire requise est une optimisation qui peut être très importante pour la mémoire physique, mais les processus à forte intensité de mémoire dans la VM peuvent être ralenties par le besoin fréquent de VirtualBox de demander plus de mémoire hôte.

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

L'utilisation d'un programme tel que VMMap indique définitivement que la mémoire que vous dites à VBox à utiliser est en fait utilisée. Pas d'idée pourquoi il n'est pas visible pour le gestionnaire de tâches ou l'explorateur de processus.

Les entrées que vous voyez dans TaskManager ne correspondent pas à votre machine virtuelle, elles concernent l'interface graphique VirtualBox. L'onglet Performance vous indiquera clairement la quantité de mémoire totale utilisée, mais sans granularité quant aux processus. Personnellement, j'aimerais que VBox n'utilise que ce dont il a besoin, mais conviennent qu'il est important de pouvoir utiliser autant qu'il attend, d'où l'anneau de clôture.

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

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

Mon installation Lubuntu utilise actuellement ~ 90 Mo comme indiqué par WinXP. Juste l'installer; VBoxAdditions n'a pas été installé.

L'utilisation de la mémoire varie selon ce que la machine virtuelle fait. J'ai mon installation Ubuntu sous ziproxy; Quand je fais quelque chose qui parle de ziproxy, l'utilisation de la mémoire pique quelques mégaoctets au moment de l'utilisation de la VM.

En général, cependant, la virtualisation a avancé suffisamment loin pour que les spécifications apparentes pour l'invité ne soient pas entièrement attribuées à l'hôte. On dirait utiliser une allocation dynamique et une pagination forte.

Donc, il y a des différences considérables ici. Je ne comprends vraiment pas comment le GuestOS peut utiliser 400+ MB, alors que le système d'exploitation hôte affiche seulement environ 75 Mo alloués à la machine virtuelle. Existe-t-il d'autres processus utilisés par VirtualBox qui ne sont pas aussi clairement nommés?

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

En outre, j'aimerais savoir si je lance une machine avec 1 Go, est-ce que cela va prendre 1 Go de l'hôte de mon système hôte, ou seulement la quantité de mémoire utilisée par la machine Invité?

Il réserve 1 Go de RAM, mais il peut se réellement utiliser significativement moins que cela. Si l'invité n'utilise pas une partie de cette mémoire, la RAM de l'hôte peut être utilisée à d'autres fins (comme la mise en cache de pages de disque propres), même si elle est réservée aux invités. Et même si l'invité utilise une partie de cette mémoire, si elle ne l'accède pas suffisamment longtemps, elle peut encore être éjectée de la mémoire physique par un échange opportuniste.

Malheureusement, vous vous êtes transformé en un problème extrêmement complexe et il faudrait beaucoup de pages pour vraiment l'expliquer. Il y a beaucoup d'informations incorrectes dans les réponses à cette question.