Recomendações sobre alocação de memória VM Geral/Hyper-V

Recomendações sobre alocação de memória VM Geral/Hyper-V

Tenho uma pergunta básica sobre a configuração da VM. Estou usando o Hyper-V, mas acho que a pergunta é bem genérica. Isto é para um escritório doméstico, quero obter um desempenho razoavelmente bom nas VMs sem muito trabalho. Eu uso as VMs para testar/depurar meu software. Idealmente, eu teria todos os sistemas operacionais iniciados, mas apenas um (provavelmente zero na maioria das vezes) estaria sendo usado ativamente por vez.

Existem algumas diretrizes gerais para alocação de memória para VMs? Em um extremo, você poderia dividir a memória total pelo número de VMs (4 GB no total, 4 VMs -> 1 GB cada). No outro extremo do extremo, você poderia fornecer memória completa a cada VM e deixar o sistema operacional arbitrar. Eu acho que ambos estão errados! Estou procurando uma "regra prática" para um desempenho razoável. Não tenho ideia de como o servidor VM gerencia a memória das VMs.

[editar] Fiz esta pergunta porque presumi incorretamente que o Hyper-V (versão 2008 R2) poderia fornecer dinamicamente memória adicional para VMs se houvesse mais disponível. Meu pensamento era que eu poderia alocar mais a memória, desde que meu uso atingisse o pico de apenas uma VM por vez. Como o Hyper-V deseja alocar a memória fixa para cada VM quando elas são iniciadas, preciso desligar algumas VMs e executar apenas as que preciso ou configurar as VMs para diminuir as alocações de memória e garantir que a memória física esteja suficiente para todas as alocações mais o processo Hyper-V e (possivelmente) o sistema operacional host.

Parece que o VMWare tem mais opções nesse sentido, conforme observado nas respostas fornecidas. [/editar]

Obrigado, Brett

Responder1

Como regra geral, você deseja saber se, nas piores condições, há RAM física suficiente para que todas as funções padrão operem de maneira confiável a partir da RAM. O valor desse número mágico varia de sistema operacional para sistema operacional e varia muito dependendo dos usos que você atribui ao sistema operacional convidado. Você pode facilmente inicializar um Windows 2003 Server com algumas centenas de megabytes de RAM, algumas distros compactas do Linux com 30 Meg ou menos e assim por diante, mas se quiser executar o SQL Server em seu convidado com bancos de dados de vários gigabytes, você irá quero ter certeza de que ele realmente possui RAM real fazendo backup de alguns Gig de RAM que ele acha que possui.

A forma como o hipervisor lida com a RAM varia muito entre fornecedores e produtos. O Hyper-V não suporta o que é chamado de superalocação de memória, portanto você está limitado a alocar RAM com base no que você tem fisicamente disponível. O ESX da VMware permite comprometimento excessivo, definindo regras para arbitragem de contenção (compartilhamentos) para controlar o que acontece quando as VMs ficam ocupadas e a quantidade total de RAM física é insuficiente para atender à carga. Em um ambiente Hyper-V, você não tem esse nível de controle, portanto é necessário atribuir RAM suficiente antecipadamente.

A VMware tem alguns outros truques para ajudar no comprometimento excessivo de memória; Compartilhamento transparente de páginas e balão de memória.

O compartilhamento de página transparente é basicamente armazenamento de instância única para RAM - o hipervisor monitora os blocos de RAM alocados para cada VM e, se encontrar blocos comuns em várias VMs, ele mantém apenas uma única cópia e aponta todas as VMs para ela - se houver alguma VM posteriormente tenta escrever nesse bloco, ele divide uma cópia para que coisas ruins não aconteçam. Em um ambiente de VM homogêneo, isso pode economizar uma boa quantidade de RAM sem afetar o desempenho.

Memory Ballooning é um mecanismo que permite ao hipervisor "pegar emprestado" RAM alocada para uma VM e fornecê-la a uma mais importante usando um driver de sistema operacional convidado no primeiro que aloca um pedaço (grande) de memória dentro desse convidado. Uma vez alocado, o hipervisor pode realocar com segurança a RAM física que suporta a memória que o driver balão alocou para ele. A vantagem de fazer isso em comparação com a abordagem direta, onde o hipervisor apenas troca a memória da VM convidada para o disco, a fim de realocar a RAM, é que o convidado que está perdendo a RAM física está ciente de que a memória está sendo usada por alguma coisa e há um risco significativamente reduzido de que a RAM "emprestada" tenha sido alocada para quaisquer funções importantes do sistema no Guest.

Editado para adicionar: Eu nunca tentei ver o que acontece com o Hyper-V quando você tenta inicializar VMs que levarão os requisitos de memória além da quantidade de RAM física disponível. Toda a documentação que posso encontrar afirma que as VMs obtêm toda a RAM que você tem configurado para eles e, em seguida, o hipervisor e o sistema operacional host recebem o que resta. O Hyper-V não possui nenhum mecanismo para aplicar uma reserva mínima de RAM a uma VM e, em seguida, ter o restante alocado de um pool, embora forneça tal mecanismo para recursos de CPU. Novamente, o ESX\ESXi da VMware oferece essa opção.

Vale lembrar que você também precisa planejar a memória física necessária tanto para o hipervisor quanto para o sistema operacional host (desconsidere este último se estiver executando o servidor bare metal Hyper-V). da Microsoftconselhos de ajuste de desempenho para Hyper-Vafirma que além do XGig de RAM que você tem nas suas VM's você precisa ter:

  • 300 MB para o hipervisor
  • mais 32 MB para o primeiro GB de RAM alocado para cada máquina virtual
  • mais outros 8 MB para cada GB adicional de RAM alocado para cada máquina virtual
  • mais 512 MB para o sistema operacional host em execução na partição raiz

Se você não tiver RAM física suficiente para isso, o desempenho será seriamente afetado e, possivelmente, a estabilidade também.

Responder2

Hyper-V no Windows Server 2008 R2fazsuporta um recurso de memória dinâmica (estou executando o SP1 - não tenho certeza se estava na versão RTM). Sei que sua pergunta é bastante antiga, então provavelmente não era quando você a perguntou.

Comecei alocando memória estática para cada VM convidada, mas rapidamente limitei meu servidor. A memória dinâmica permite atribuir uma quantidade inicial (talvez baixa) e uma quantidade máxima por VM. Em seguida, ele alocará memória sob demanda e também recuperará a memória não utilizada. Você precisa editar as configurações de cada VM para configurar isso - não está disponível ao criar uma nova VM. Acabei de reconfigurar várias VMs para usar memória dinâmica e reduzi meu comprometimento geral de memória quase pela metade.

Captura de tela do Hyper-V Manager mostrando a memória atribuída

As VMs que configurei para memória dinâmica mostram a demanda e o status atuais da memória. A VM destacada ainda está em execução dentro da alocação inicial de 1 GB. O servidor Exchange (o segundo a partir do topo) é um porco grande e gordo e gastou seus 1 GB iniciais e recebeu mais alguns. O recurso permite um buffer configurável (20% por padrão), portanto o Hyper-V deu ao Exchange a quantidade exigida, além de alguns extras.

Responder3

Não é uma questão genérica porque o Hyper-V não pode compartilhar páginas de memória como o VMWare, essa tecnologia pode mudar enormemente a maneira como a memória da VM é alocada. Se o Hyper-V oferecer suporte, sugiro que você aloque uma quantidade inicial para suas VMs e, em seguida, observe o uso real ao longo do tempo por VM, alterando a alocação à medida que descobre mais sobre seu comportamento.

informação relacionada