Virtualização: Otimizando o uso de memória do Hyper-V

A memória dinâmica pode ser um recurso útil, mas é preciso ter cuidado com a configuração de suas máquinas virtuais e de seu servidor host.

Brien M. Posey

Quanto se trata de hospedagem de cargas de trabalho virtuais, talvez não haja recurso de hardware tão importante para o desempenho geral como a memória física. É essencial alocar memória de uma maneira que garanta que cada máquina virtual (VM) tenha a memória necessária, sem desperdiçar memória no processo. A seguir, várias considerações fundamentais sobre alocação de memória para uso com o Microsoft Hyper-V.

Considerações sobre NUMA

O gerenciamento de memória para Hyper-V é como uma forma de arte. Você deve garantir a provisão da quantidade de memória adequada a cada VM. Ao mesmo tempo, também deve evitar a atribuição de mais memória a uma VM do que realmente o necessário.

Os motivos para isso parecem óbvios. A alocação de memória em excesso a uma VM limita a quantidade de memória que poderá ser alocada a outras VMs no mesmo servidor. Entretanto, em algumas ocasiões, a alocação de memória em excesso a uma VM pode até mesmo dificultar seu desempenho.

A maioria dos novos servidores usa a memória NUMA (non-uniform memory access). A memória NUMA é projetada para melhorar o desempenho ao atribuir memória por processador. Cada bloco de memória dedicada é conhecido como nó NUMA. Uma CPU pode acessar seu nó NUMA local (a memória diretamente atribuída a essa CPU) com mais rapidez do que pode acessar um nó NUMA não local.

As versões do Hyper-V para Windows Server 2008 e 2008 R2 não oferecem suporte direto a afinidade de memória por nó NUMA. Em outras palavras, não é possível configurar diretamente uma VM para que ela use um nó NUMA específico. Diz-se que esse recurso existirá na versão do Hyper-V para Windows Server 8. No entanto, ainda é possível executar etapas para reduzir as chances de uma VM usar nós NUMA não locais.

O truque é calcular o tamanho de cada nó NUMA. Por exemplo, suponha que seu servidor esteja equipado com dois processadores de oito núcleos e com 128 GB de RAM. Você pode calcular o tamanho do nó NUMA dividindo o tamanho da memória (128 GB) pelo número de núcleos de CPU (16). Neste caso em particular, o tamanho de um nó NUMA seria de 8 GB.

O Hyper-V não permite que você atribua um nó NUMA específico a uma VM específica. Entretanto, como sabemos que este servidor em particular possui um tamanho de nó NUMA de 8 GB, podemos inferir que qualquer VM com mais de 8 GB certamente usará memória de vários nós NUMA. A limitação da memória atribuída a uma VM a 8 GB ou menos (neste caso) aumenta as chances de que a VM usará memória de um único nó NUMA, melhorando, dessa forma, o desempenho.

Sobrecarga do Hyper-V

Os nós NUMA não são a única consideração quando se trata de gerenciamento de memória. Quando planejar as maneiras de usar a memória de seu servidor host, é extremamente importante levar em consideração a sobrecarga relacionada à virtualização. Existem duas considerações principais em relação à sobrecarga de virtualização. Primeiro, é preciso reservar parte da memória para a partição pai.

Será necessário reservar pelo menos 300 MB para o hipervisor e 512 MB para o sistema operacional host executado na partição raiz. Entretanto, a maioria das diretrizes de práticas recomendadas declara que é preciso reservar 2 GB para a partição pai.

Não é necessário usar a partição host para nada além do Hyper-V (embora você possa executar software de segurança e infraestrutura, como agentes de gerenciamento, agentes de backup e firewalls). Dessa forma, essa recomendação de 2 GB presume que você não executará qualquer aplicativo ou função de servidor extra na partição pai.

O Hyper-V não permite que você aloque memória diretamente na partição host. Essencialmente, ele usa qualquer memória que esteja sobrando. Assim, você terá de se lembrar de deixar 2 GB da memória de seu servidor host não alocados para que estejam disponíveis para a partição pai.

Alocação de memória de máquina convidada

Outro aspecto a ser considerado em relação à sobrecarga de virtualização é que as VMs usam uma pequena quantidade de memória para Integration Services e para outros processos relacionados a virtualização. Essa quantidade de memória é, de alguma forma, trivial, de forma que normalmente não será preciso se preocupar com a atribuição de memória extra para isso, a menos que você esteja planejando fornecer a cada VM o mínimo de memória possível.

As VMs com 1 GB ou menos de RAM só usarão cerca de 32 MB de memória para sobrecarga relacionada a virtualização. É preciso adicionar 8 MB para cada gigabyte de RAM adicional. Por exemplo, uma VM com 2 GB de RAM usaria 40 MB (32 MB mais 8 MB) de memória para sobrecarga relacionada a virtualização. Da mesma forma, uma VM com 4 GB de memória perderia 64 MB de memória para sobrecarga.

Memória dinâmica

O Windows Server 2008 R2 SP1 introduziu um novo recurso de memória dinâmica que permite às VMs consumir memória dinamicamente, com base na carga de trabalho atual. Isso também permite que você comprometa excessivamente a memória física do servidor para executar mais VMs do que poderia ser possível de outra forma. Independentemente dos benefícios da memória dinâmica, é importante adotar algumas diretrizes de práticas recomendadas para evitar que suas VMs fiquem sem memória.

Primeiro, usar memória dinâmica nem sempre é a melhor opção. Você pode habilitar ou desabilitar a memória dinâmica por VM. É importante habilitar a memória dinâmica somente nas VMs que realmente se beneficiarão dela.

Uma das considerações mais importantes é a carga de trabalho em suas VMs. Se um aplicativo de uma VM for projetado para usar uma quantidade fixa de memória, é melhor dar a essa VM exatamente a quantidade de memória necessária em vez de usar a memória dinâmica.

O mesmo acontece para aplicativos que precisam de muita memória. Alguns aplicativos foram projetados para consumir o máximo de memória disponível. Eles podem esgotar rapidamente a memória física de um servidor se puderem usar a memória dinâmica. Nesse caso, é melhor atribuir uma quantidade fixa de memória às VMs que executam esses tipos de aplicativo.

Por fim, o desempenho de um servidor poderá ser prejudicado se as VMs tentarem usar memória de vários nós NUMA. Dessa forma, se seu servidor usa memória NUMA e se o desempenho é uma preocupação fundamental, talvez seja melhor evitar a memória dinâmica.

RAM de inicialização

Um dos conceitos mais importantes a ser compreendido a respeito da memória dinâmica é a RAM de inicialização. Ao usar a memória dinâmica, você deverá atribuir a cada VM um valor para a RAM de inicialização. Esse valor reflete a quantidade de memória física que a VM usará inicialmente quando for inicializada. E o mais importante, a RAM de inicialização também representa a quantidade mínima de memória física que a VM consumirá. Uma VM não pode reduzir seu uso de memória para menos do que o valor da RAM de inicialização.

Nesse caso, a Microsoft recomenda que você evite atribuir a uma VM uma grande quantidade de RAM de inicialização. É melhor basear a RAM de inicialização no sistema operacional em que a VM está sendo executada. A Microsoft recomenda 512 MB de RAM de inicialização para VMs que estejam executando Windows 7, Windows Vista, Windows Server 2008 e Windows Server 2008 R2. Se as VMs forem executar o Windows Server 2003 ou o Windows Server 2003 R2, a Microsoft recomenda 128 MB de RAM de inicialização.

Para que uma VM use memória dinâmica, ela deverá ter o suporte do sistema operacional em execução nessa VM. O Windows XP não oferece suporte a memória dinâmica. Se você tentar executar o Windows XP em uma VM configurada para uso de memória dinâmica, o sistema operacional só será capaz de acessar a RAM de inicialização.

Antes de mudar para outras tarefas de configuração, é importante garantir que o total combinado de RAM de inicialização para todas as VMs combinadas não exceda a RAM física instalada em seu servidor. Caso contrário, será necessário remover algumas VMs ou adicionar memória.

Talvez você também queira ajudar o valor máximo de RAM. Esse valor representa o máximo de memória física que uma VM poderá usar. Por padrão, o Hyper-V define o máximo de 64 GB de RAM para cada VM. Talvez você queira definir o máximo de RAM como um valor inferior se não necessitar de tanta memória física para algumas de suas VMs.

Peso da memória

A ideia por trás do uso de memória dinâmica é que ela permite que você comprometa a memória em excesso. Isso permite que suas VMs acessem a memória de que necessitam quando for preciso. A grande desvantagem de comprometer qualquer recurso de hardware em excesso é que isso pode terminar por esgotar o recurso. No caso de memória dinâmica, é totalmente possível que suas VMs possam consumir toda a memória física disponível e ainda precisar de mais.

A solução a longo prazo para este problema é garantir que seu servidor esteja equipado com memória suficiente para servir aos requisitos da VM. Entretanto, uma solução a curto prazo é priorizar o uso da memória.

Quase todos os servidores host possuem algumas VMs mais importantes do que as outras. O Hyper-V permite que você as priorize de forma que caso haja falta de memória física, a memória seja alocada para as VMs de maior prioridade primeiro. Você pode priorizar a necessidade de memória dinâmica de uma VM ajustando seu peso de memória. As VMs com um peso de memória maior têm precedência sobre as VMs com pesos de memória menores.

A outra configuração que precisa ser feita para cada VM que usa memória dinâmica é o buffer de memória. A configuração do buffer de memória controla quanta memória cada VM deve tentar reservar como um buffer. Esse valor é expresso como uma porcentagem. Por exemplo, se uma VM estiver usando 4 GB de memória comprometida e se o buffer de memória for definido como 50%, a VM poderia consumir até 6 GB de memória.

O buffer de memória não garante que a memória do buffer estará disponível para uma VM. Ele simplesmente controla quanta memória a VM deve tentar solicitar. Vale observar isso porque o buffer de memória é expresso como uma porcentagem, a quantidade de memória em buffer muda em resposta à quantidade de memória a VM está usando no momento. Todas as VMs que usam memória dinâmica começam usando uma quantidade de memória mínima. Elas ajustam dinamicamente o uso da memória com base na pressão que a carga de trabalho exerce em sua memória.

Configuração de memória

O processo de configuração real do uso de memória de uma VM é simples. Abra o Gerenciador Hyper-V, clique com o botão direito do mouse em uma VM (porque a memória de cada VM é gerenciada de forma independente). Escolha o comando Configurações no menu de atalho. Quando a caixa de diálogo Configurações for exibida, clique em Memória.

O Hyper-V oferece a você a opção de alocação de uma quantidade estática de memória para a VM ou a utilização de memória dinâmica (consulte Figura 1). Se você escolher a opção dinâmica, poderá ajustar a RAM de inicialização, a RAM máxima, o buffer de memória e o peso de memória de forma direta, por meio da caixa de diálogo Configurações.

You can adjust the memory allocation for a virtual machine through the Settings dialog box

Figura 1 Você pode ajustar a alocação de memória para uma máquina virtual por meio da caixa de diálogo Configurações.

Se um servidor host tiver recursos limitados de memória física, normalmente existirá uma compensação entre o uso de memória estática e dinâmica. Tipicamente, a memória estática oferece melhor desempenho geral (supondo que haja memória adequada alocada). A memória dinâmica pode ser perigosa, mas normalmente permite uma densidade maior à VM.

Brien Posey

**Brien Posey**é MVP e escritor técnico freelance com milhares de artigos e dezenas de livros de sua autoria. Você pode visitar o site dele em brienposey.com.

Conteúdo relacionado