Como funciona o uso de memória do VirtualBox?

38

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

  • Eu tenho uma VM executando o Windows 7 (como sistema operacional convidado) na máquina host do Windows XP.
  • A máquina host possui 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 SO convidado, vejo um uso de memória de 430 MB
  • Se eu executar o Gerenciador de Tarefas no SO host, vejo 3 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
  • Durante a execução da VM, o uso da memória do sistema operacional host é de aproximadamente 2 GB
  • Quando eu desligo a VM, o sistema operacional do host volta ao uso da memória e reduz para cerca de 900 MB

Tão claramente, existem algumas diferenças enormes aqui. Realmente não entendo como o GuestOS pode usar mais de 400 MB, enquanto o SO do host mostra apenas cerca de 75 MB alocados à VM. Existem outros processos usados ​​pelo VirtualBox que não são tão obviamente chamados?

Além disso, gostaria de saber se eu executo uma máquina com 1 GB, isso levará 1 GB para longe do sistema operacional host ou apenas a quantidade de memória que a máquina Guest está usando no momento?

Atualizar:

Alguém expressou desconfiança em relação aos 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 SO Host (que talvez seja o culpado), mas para qualquer cético, aqui está uma captura de tela desses processos na máquina host:

Gerenciador de tarefas do VirtualBox

DrFredEdison
fonte
Eu estava pensando exatamente a mesma coisa hoje cedo ao executar duas VMs VBox ao mesmo tempo.
6309 MartW
No Gerenciador de tarefas, ative algumas das outras colunas da memória (Exibir-> Selecionar colunas ...). A memória é contada de várias maneiras diferentes no Windows. Por exemplo, "tamanho da confirmação" pode ser muito maior que "Uso da Memória". Exatamente qual usar e como interpretá-los é uma história diferente.
lilbyrdie
Possível duplicado: superuser.com/q/17266/302
Rowland Shaw

Respostas:

12

O único local no Gerenciador de Tarefas que parece refletir o valor total está na guia desempenho - o valor Total Commit Charge cobra aproximadamente o ritmo do valor alocado para a VM. Acabei de fechar um com 1536MB alocado e a taxa de confirmação caiu de cerca de 2,4 GB para 0,8 GB. Você pode monitorar até certo ponto isso no 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 Memória: bytes confirmados para tudo.

MartW
fonte
O OP não parece estar particularmente interessado no que foi alocado, mas está perguntando sobre o que está sendo usado. Portanto, não tenho certeza de como isso se relaciona com a pergunta dele.
22415 David Schwartz #
12

Para entender a arquitetura de processo do VirtualBox, consulte
A arquitetura do VirtualBox :

Depois de iniciar uma máquina virtual (VM) a partir da GUI, você tem duas janelas (a janela principal e a VM), mas três processos em execução. Observando seu sistema no Gerenciador de Tarefas (no Windows) ou em algum monitor do sistema (no Linux), você verá estes:

  1. VirtualBox, a GUI da janela principal;
  2. Outro processo do VirtualBox iniciado com o parâmetro -startvm, o que significa que o processo da GUI atua como um shell para uma VM;
  3. VBoxSVC, o serviço mencionado acima, que está sendo executado em segundo plano para acompanhar todos os processos envolvidos. Isso foi iniciado automaticamente pelo primeiro processo da GUI.

Quanto à memória, o Manual do Usuário declara:

Memória base

Isso define a quantidade de RAM que é alocada e fornecida à VM quando está em execução. A quantidade especificada de memória será solicitada ao sistema operacional host, portanto, ela deve estar disponível ou disponibilizada como memória livre no host ao tentar iniciar a VM e não estará disponível para o host enquanto a VM estiver em execução. Essa é a mesma configuração especificada no assistente "Nova máquina virtual", conforme descrito nas diretrizes da seção "Criando uma máquina virtual" acima.

Isso significa que o convidado retira o host:

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

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

Além disso, o VirtualBox pode otimizar 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 exigem muita memória na VM podem ficar mais lentos devido à necessidade frequente do VirtualBox de solicitar mais memória do host.

harrymc
fonte
8
Não é VirtualBox específica - ver isto: serverfault.com/questions/19935/...
MartW
@harrymc, então o que você está dizendo é que o gerenciador de tarefas NÃO mostra na lista de processos quanta memória a caixa virtual está usando?
Trevor Boyd Smith
@TrevorBoydSmith: Tudo o que estou dizendo é que há mais de um processo envolvido e para escolher corretamente as colunas no gerenciador de tarefas.
harrymc
2
meu vm ocupa 1,2 GB. no gerenciador de tarefas, ele mostra apenas 60 MB. portanto, eu diria que o gerenciador de tarefas não mostra toda a memória que meu vm está usando. a menos que você possa de alguma forma me mostrar como ajustar o gerenciador de tarefas para mostrar 1.2gb.
Trevor Boyd Smith
11
Toda essa conversa e todas as respostas são apenas variações de uma confusão entre memória virtual e memória física.
22415 David Schwartz
2

As entradas que você vê no TaskManager não são para sua máquina virtual, são para a GUI do VirtualBox. A guia desempenho mostrará claramente quanto de sua memória total está sendo usada, mas sem granularidade em relação aos processos. Pessoalmente, eu gostaria que o VBox usasse apenas o que precisava, mas concordo que é importante que ele seja capaz de usar o quanto espera, daí o cercado.

Rob Vanstone
fonte
1

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

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

Minha instalação do Lubuntu atualmente está 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 minha instalação do Ubuntu executando o ziproxy; quando faço algo que fala com ziproxy, o uso de memória atinge alguns megabytes quando a VM entra em uso.

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

mão amiga
fonte
1

Tão claramente, existem algumas diferenças enormes aqui. Realmente não entendo como o GuestOS pode usar mais de 400 MB, enquanto o SO do host mostra apenas cerca de 75 MB alocados à VM. Existem outros processos usados ​​pelo VirtualBox que não são tão obviamente chamados?

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

Além disso, gostaria de saber se eu executo uma máquina com 1 GB, isso levará 1 GB para longe do sistema operacional host ou apenas a quantidade de memória que a máquina Guest está usando no momento?

Ele reservará 1 GB de RAM, no entanto, pode acabar usando muito menos do que isso. Se o convidado não usar parte dessa memória, a RAM do host poderá ser usada para muitos outros propósitos (como armazenar em cache as páginas de disco limpas), mesmo que seja reservada para o convidado. E mesmo que o convidado use parte dessa memória, se não acessá-la por tempo suficiente, ainda poderá ser ejetado da memória física por meio de trocas oportunistas.

Infelizmente, você se deparou com um problema extremamente complexo e levaria muitas páginas para realmente explicar. Há muitas informações incorretas nas respostas a esta pergunta.

David Schwartz
fonte
0

Você pode vê-lo usando o ótimo aplicativo VMMap da SysInternals :

  1. Primeiro, você precisa encontrar o processo certo; portanto, inicie, por exemplo, o Process Hacker ou o Process Explorer da SysInternals
  2. Exibir a lista de processos como uma árvore
  3. Localize o processo VBoxSVC.exe, ele deve ter vários processos filhos VBoxHeadless.exese uma VM estiver executando
  4. Se várias VMs estiverem em execução, haverá várias ramificações de VBoxHeadless.exeprocessos, escolha a ramificação correta verificando a linha de comando do processo, que contém um identificador da sua VM
  5. Você está interessado no mais baixo VBoxHeadless.exedo ramo (ou seja, ele não tem mais filhos, apenas um dos pais, por isso é uma folha), lembre-se do IDP
  6. Inicie o VMMap
  7. Selecione o VBoxHeadless.exeprocesso correto pelo seu PID e clique em OK

No meu caso, todos relataram bytes privados , Conjunto de trabalho e Committed memória VMMap quase corresponder exatamente a quantidade de memória atribuída à VM no VirtualBox.

Dawid Ferenczy Rogožan
fonte