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:
- VirtualBox.exe (1), usando 60 MB de memória (este parece ter o maior uso de CPU)
- VirtualBox.exe (2), usando 20 MB de memória
- 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:
fonte
Respostas:
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.
fonte
Para entender a arquitetura de processo do VirtualBox, consulte
A arquitetura do VirtualBox :
Quanto à memória, o Manual do Usuário declara:
Isso significa que o convidado retira o host:
É 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.
fonte
Isso parece ser um problema do Windows. Veja a terceira publicação aqui: http://forum.sysinternals.com/pe-is-not-showing-all-memory-used-by-virtualbox_topic23886.html
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 por que não é visível para o gerenciador de tarefas ou o explorador de processos.
fonte
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.
fonte
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.
fonte
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.
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.
fonte
Você pode vê-lo usando o ótimo aplicativo VMMap da SysInternals :
VBoxSVC.exe
, ele deve ter vários processos filhosVBoxHeadless.exe
se uma VM estiver executandoVBoxHeadless.exe
processos, escolha a ramificação correta verificando a linha de comando do processo, que contém um identificador da sua VMVBoxHeadless.exe
do ramo (ou seja, ele não tem mais filhos, apenas um dos pais, por isso é uma folha), lembre-se do IDPVBoxHeadless.exe
processo correto pelo seu PID e clique em OKNo 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.
fonte