Como o uso de memória do VirtualBox funciona?

36

Tenho executado várias VMs com o VirtualBox, e o uso de memória foi relatado de várias perspectivas, e estou tendo problemas para descobrir quanta memória minhas VMs realmente usam. Aqui está um exemplo:

  • Eu tenho uma VM executando o Windows 7 (como o sistema operacional convidado) na minha máquina host do Windows XP.
  • A máquina host tem 3 GB de RAM
  • A VM convidada está configurada para ter uma memória base de 1 GB
  • Se eu executar o Gerenciador de tarefas no sistema operacional convidado, vejo o uso de memória de 430 MB
  • Se eu executar o Gerenciador de tarefas no sistema operacional host, vejo três processos que parecem pertencer ao VirtualBox:
    1. VirtualBox.exe (1), usando 60 MB de memória (este parece ter o maior uso de CPU)
    2. VirtualBox.exe (2), usando 20 MB de memória
    3. VBoxSvc.exe, usando 11,5 MB de memória
  • Ao executar a VM, o uso de memória do SO do host é de cerca de 2 GB
  • Quando encerro a VM, o sistema operacional do host volta ao uso da memória até cerca de 900 MB

Então, claramente, existem algumas grandes diferenças aqui. Eu realmente não entendo como o GuestOS pode usar mais de 400 MB, enquanto o SO do Host mostra apenas 75 MB alocado para a VM. Existem outros processos usados pelo VirtualBox que não são obviamente chamados?

Além disso, eu gostaria de saber se eu executo uma máquina com 1 GB, isso vai tirar 1 GB do meu sistema operacional host, ou apenas a quantidade de memória que a máquina Convidada está usando atualmente?

Atualização:

Alguém expressou desconfiança sobre meus números de uso de memória, e não tenho certeza se essa desconfiança foi direcionada a mim, ou aos relatórios do Gerenciador de Tarefas do meu sistema operacional Host (que talvez seja o culpado), mas para todos os céticos, aqui está uma captura de tela desses processos na máquina host:

    
por DrFredEdison 06.11.2009 / 19:43

6 respostas

11

O único local no Gerenciador de Tarefas que parece refletir o valor total está na guia Desempenho - o valor Total Commit Charge (Carga Total de Confirmação) mantém um ritmo aproximado com o valor alocado para a VM. Acabei de fechar um com 1536MB alocados e a taxa de commit caiu de cerca de 2,4 GB para 0,8 GB. Você pode monitorar até certo ponto isso em relação ao Virtual Box usando o Monitor de Desempenho e escolhendo os contadores Process: Private Bytes para VirtualBox, VBoxSvc e também VirtualBox # 1, # 2, etc (um para cada VM em execução). Há também o contador Memory: Committed Bytes para tudo.

    
por 06.11.2009 / 23:23
11

Para entender a arquitetura do processo do VirtualBox, veja a A arquitetura do VirtualBox :

Once you start a virtual machine (VM) from the GUI, you have two windows (the main window and the VM), but three processes running. Looking at your system from Task Manager (on Windows) or some system monitor (on Linux), you will see these:

  1. VirtualBox, the GUI for the main window;
  2. Another VirtualBox process that was started with the -startvm parameter, which means that its GUI process acts as a shell for a VM;
  3. VBoxSVC, the service mentioned above, which is running in the background to keep track of all the processes involved. This was automatically started by the first GUI process.

Em relação à memória, o Manual do usuário afirma:

Base memory

This sets the amount of RAM that is allocated and given to the VM when it is running. The specified amount of memory will be requested from the host operating system, so it must be available or made available as free memory on the host when attempting to start the VM and will not be available to the host while the VM is running. This is the same setting that was specified in the "New Virtual Machine" wizard, as described with guidelines under the section called “Creating a virtual machine” above.

Isso significa que o convidado sai do host:

  • Tanta memória quanto foi declarada com
  • Cada VM também é um executável do VirtualBox, então você precisa adicionar sua memória.

É sempre possível que o manual do VirtualBox tenha várias versões por trás e que a técnica de otimização de memória mais recente não esteja documentada.

Além disso, o VirtualBox pode estar otimizando o uso da memória não alocando toda a memória da VM definida.

A alocação de memória conforme necessário é uma otimização que pode economizar muito na memória física, mas os processos que consomem muita memória na VM podem ser retardados pela necessidade freqüente do VirtualBox de solicitar mais memória do host.

    
por 06.11.2009 / 21:35
4

Isso parece ser um problema do Windows. Veja o terceiro post aqui: link

Usar um programa como o VMMap definitivamente mostra que a memória que você diz ao VBox para usar está realmente sendo usada. Não faço ideia porque não é visível para o gerenciador de tarefas ou o explorador de processos.

    
por 07.04.2013 / 19:12
2

As entradas que você vê no TaskManager não são para a sua máquina virtual, elas são para a GUI do VirtualBox. A guia de desempenho mostrará claramente quanto da memória total está sendo usada, mas sem granularidade em relação aos processos. Eu pessoalmente gostaria de ver o VBox usar apenas o que ele precisa, mas concordo que é importante que ele seja capaz de usar o que ele espera, por isso o ring-fencing.

    
por 15.05.2012 / 13:28
1

Pode estar relacionado com as adições de convidados do VirtualBox.

Minha instalação do Ubuntu está atualmente usando ~ 20MB conforme relatado pelo WinXP. Isso é com VBoxAdditions.

Minha instalação do Lubuntu está atualmente usando ~ 90MB, conforme relatado pelo WinXP. Apenas instalei; VBoxAdditions não foi instalado.

O uso da memória varia de acordo com o que a VM está fazendo. Eu tenho o meu Ubuntu instalar o ziproxy; quando eu faço algo que fala com o ziproxy, o uso da memória aumenta alguns megabytes conforme a VM entra em uso.

Em geral, porém, a virtualização avançou o suficiente para que as especificações aparentes para o convidado não precisem ser totalmente alocadas do host. Parece usar alocação dinâmica e paginação strong.

    
por 06.11.2010 / 15:24
1

So clearly, there are some huge differences here. I really don't understand how the GuestOS can use 400+ MB, while the Host OS only shows about 75 MB allocated to the VM. Are there other processes used by VirtualBox that aren't as obviously named?

Você está vendo o que está sendo usado no host, não o que está sendo alocado . O convidado não está usando mais de 400 MB de RAM do host (ainda).

Also, I'd like to know if I run a machine with 1 GB, is that going to take 1 GB away from my host OS, or only the amount of memory the Guest machine is currently using?

Ele reserva 1 GB de RAM, no entanto, pode acabar usando significativamente menos do que isso. Se o convidado não usar parte dessa memória, a RAM do host poderá ser usada para muitas outras finalidades (como o armazenamento em cache de páginas de disco limpas), mesmo que esteja reservada para o convidado. E mesmo que o convidado use parte dessa memória, se ela não for acessada por tempo suficiente, ela ainda pode ser ejetada da memória física por meio de troca oportunista.

Infelizmente, você se envolveu em um problema extremamente complexo e precisaria de muitas páginas para realmente explicá-lo. Há muitas informações incorretas nas respostas a essa pergunta.

    
por 02.11.2015 / 13:16