Usando o vSphere Client, você pode visualizar informações sobre e fazer alterações nas configurações de alocação de memória. Para administrar seus recursos de memória com eficiência, você também deve estar familiarizado com a sobrecarga de memória, o imposto de memória ociosa e como os hosts ESXi recuperam memória.

Ao administrar recursos de memória, você pode especificar a alocação de memória. Se você não personalizar a alocação de memória, o host ESXi usará padrões que funcionam bem na maioria das situações.

Você pode especificar a alocação de memória de várias maneiras.

  • Use os atributos e os recursos especiais disponíveis por meio do vSphere Client. O vSphere Client permite que você se conecte ao host ESXi ou ao sistema vCenter Server.
  • Use as configurações avançadas.
  • Use o SDK vSphere para alocação de memória com script.
Observação: Neste capítulo, "Memória" pode se referir à RAM física ou à memória persistente.

Noções básicas sobre sobrecarga de memória

A virtualização de recursos de memória tem alguma sobrecarga associada.

ESXi máquinas virtuais podem incorrer em dois tipos de sobrecarga de memória.

  • O tempo adicional para acessar a memória em uma máquina virtual.
  • O espaço extra necessário para o host ESXi para seu próprio código e estruturas de dados, além da memória alocada para cada máquina virtual.

ESXi A virtualização de memória adiciona pouca sobrecarga de tempo aos acessos à memória. Como o hardware de paginação do processador usa tabelas de páginas (tabelas de páginas de sombra para abordagem baseada em software ou tabelas de páginas de dois níveis para abordagem assistida por hardware) diretamente, a maioria dos acessos à memória na máquina virtual pode ser executada sem sobrecarga de conversão de endereço.

A sobrecarga de espaço de memória tem dois componentes.

  • Uma sobrecarga fixa em todo o sistema para o VMkernel.
  • Sobrecarga adicional para cada máquina virtual.

A memória de sobrecarga inclui espaço reservado para o buffer de quadros da máquina virtual e várias estruturas de dados de virtualização, como tabelas de páginas de sombra. A memória de sobrecarga depende do número de CPUs virtuais e da memória configurada para o sistema operacional convidado.

Sobrecarga de memória em máquinas virtuais

As máquinas virtuais exigem uma certa quantidade de memória de sobrecarga disponível para serem ligadas. Você deve estar ciente da quantidade dessa sobrecarga.

A quantidade de sobrecarga de memória necessária para uma máquina virtual depende de um grande número de fatores, incluindo o número de vCPUs e o tamanho da memória, o número e os tipos de dispositivos, o modo de execução que o monitor está usando e a versão de hardware da máquina virtual . A versão do vSphere que você está usando também pode afetar a quantidade de memória necessária. O VMX calcula automaticamente a quantidade de sobrecarga de memória necessária para uma máquina virtual.

Para descobrir quanta memória de sobrecarga é necessária para sua configuração específica, primeiro ligue a máquina virtual em questão. Procure no arquivo vmware.log. Quando a máquina virtual é ligada, a quantidade de sobrecarga de memória necessária é impressa no log. Pesquise no log por VMMEM para ver a quantidade inicial e precisa de sobrecarga de memória reservada para a máquina virtual.

Como os hosts do ESXi alocam memória

Um host aloca a memória especificada pelo parâmetro Limit para cada máquina virtual, a menos que a memória seja sobrecarregada. ESXi nunca aloca mais memória para uma máquina virtual do que o tamanho de memória física especificado.

Por exemplo, uma máquina virtual de 1 GB pode ter o limite padrão (ilimitado) ou um limite especificado pelo usuário (por exemplo, 2 GB). Em ambos os casos, o host ESXi nunca aloca mais de 1 GB, o tamanho da memória física especificado para ele.

Quando a memória é sobrecarregada, cada máquina virtual recebe uma quantidade de memória em algum lugar entre o que é especificado por Reservação (Reservation) e o que é especificado por Limite (Limit). A quantidade de memória concedida a uma máquina virtual acima de sua reserva geralmente varia de acordo com a carga de memória atual.

Um host determina alocações para cada máquina virtual com base no número de compartilhamentos alocados a ela e em uma estimativa do tamanho recente do conjunto de trabalho.

  • Compartilhamentos — ESXi hosts usam uma política de alocação de memória de compartilhamento proporcional modificada. Os compartilhamentos de memória autorizam uma máquina virtual a uma fração da memória física disponível.
  • Tamanho do conjunto de trabalho — os hosts ESXi estimam o conjunto de trabalho para uma máquina virtual monitorando a atividade da memória em períodos sucessivos de tempo de execução da máquina virtual. As estimativas são suavizadas ao longo de vários períodos de tempo usando técnicas que respondem rapidamente a aumentos no tamanho do conjunto de trabalho e mais lentamente a diminuições no tamanho do conjunto de trabalho.

    Essa abordagem garante que uma máquina virtual da qual a memória ociosa é recuperada possa acelerar rapidamente para sua alocação completa baseada em compartilhamento quando começar a usar sua memória mais ativamente.

    A atividade de memória é monitorada para estimar os tamanhos do conjunto de trabalho por um período padrão de 60 segundos. Para modificar esse padrão, ajuste a configuração avançada Mem.SamplePeriod. Consulte Definir atributos avançados de host.

Imposto de memória para máquinas virtuais ociosas

Se uma máquina virtual não estiver usando ativamente toda a memória atualmente alocada, ESXi cobra mais pela memória ociosa do que pela memória que está em uso. Isso é feito para ajudar a evitar que as máquinas virtuais acumulem memória ociosa.

O imposto de memória ociosa é aplicado de forma progressiva. A taxa de imposto efetiva aumenta à medida que a proporção de memória ociosa para memória ativa para a máquina virtual aumenta. (Em versões anteriores do ESXi que não davam suporte a pools de recursos hierárquicos, toda a memória ociosa de uma máquina virtual era tributada igualmente.)

Você pode modificar a taxa de imposto de memória ociosa com a opção Mem.IdleTax. Use essa opção, juntamente com o atributo avançado Mem.SamplePeriod, para controlar como o sistema determina as alocações de memória de destino para máquinas virtuais. Consulte Definir atributos avançados de host.

Observação: Na maioria dos casos, as alterações em Mem.IdleTax não são necessárias nem apropriadas.

Arquivos de permuta do VMX

Os arquivos de permuta executáveis de máquina virtual (VMX) permitem que o host reduza bastante a quantidade de sobrecarga de memória reservada para o processo VMX.

Observação: Os arquivos de permuta do VMX não estão relacionados ao recurso de permuta para o cache de permuta do host ou aos arquivos de permuta normais no nível do host.

ESXi reserva memória por máquina virtual para várias finalidades. A memória para as necessidades de determinados componentes, como o monitor de máquina virtual (VMM) e os dispositivos virtuais, é totalmente reservada quando uma máquina virtual é ligada. No entanto, parte da memória de sobrecarga reservada para o processo do VMX pode ser trocada. O recurso de permuta do VMX reduz significativamente a reserva de memória do VMX (por exemplo, de cerca de 50 MB ou mais por máquina virtual para cerca de 10 MB por máquina virtual). Isso permite que a memória restante seja trocada quando a memória do host é sobrecarregada, reduzindo a sobrecarga de reserva de memória para cada máquina virtual.

O host cria arquivos de permuta VMX automaticamente, desde que haja espaço livre em disco suficiente no momento em que uma máquina virtual é ligada.

Recuperação de memória

Os hosts ESXi podem recuperar memória de máquinas virtuais.

Um host aloca a quantidade de memória especificada por uma reserva diretamente para uma máquina virtual. Qualquer coisa além da reserva é alocada usando os recursos físicos do host ou, quando os recursos físicos não estão disponíveis, tratado usando técnicas especiais, como balão ou swap. Os hosts podem usar duas técnicas para expandir ou contrair dinamicamente a quantidade de memória alocada para máquinas virtuais.

  • Os sistemas ESXi usam um driver de balão de memória (vmmemctl), carregado no sistema operacional convidado em execução em uma máquina virtual. Consulte Driver do balão de memória.
  • O sistema ESXi troca uma página de uma máquina virtual para um arquivo de troca de servidor sem qualquer envolvimento do sistema operacional convidado. Cada máquina virtual tem seu próprio arquivo de permuta.

Driver do balão de memória

O driver do balão de memória (vmmemctl) colabora com o servidor para recuperar as páginas consideradas menos valiosas pelo sistema operacional convidado.

O driver usa uma técnica de balão proprietária que fornece um desempenho previsível que corresponde ao comportamento de um sistema nativo sob restrições de memória semelhantes. Essa técnica aumenta ou diminui a pressão de memória no sistema operacional convidado, fazendo com que o convidado use seus próprios algoritmos de gerenciamento de memória nativos. Quando a memória está limitada, o sistema operacional convidado determina quais páginas devem ser recuperadas e, se necessário, as troca para seu próprio disco virtual.

Figura 1. Ballooning de memória no sistema operacional convidado

Esta figura ilustra o balão de memória no sistema operacional convidado.
Observação: Você deve configurar o sistema operacional convidado com espaço de troca suficiente. Alguns sistemas operacionais convidados têm limitações adicionais.

Se necessário, você pode limitar a quantidade de recuperação de memória vmmemctl definindo o parâmetro sched.mem.maxmemctl para uma máquina virtual específica. Essa opção especifica a quantidade máxima de memória que pode ser recuperada de uma máquina virtual em megabytes (MB). Consulte Definir atributos avançados de máquina virtual.

Compartilhando memória entre máquinas virtuais

Muitas cargas de trabalho ESXi apresentam oportunidades para compartilhar memória entre máquinas virtuais (assim como em uma única máquina virtual).

O compartilhamento de memória ESXi é executado como uma atividade em segundo plano que verifica oportunidades de compartilhamento ao longo do tempo. A quantidade de memória salva varia com o tempo. Para uma carga de trabalho razoavelmente constante, a quantidade geralmente aumenta lentamente até que todas as oportunidades de compartilhamento sejam exploradas.

Para determinar a eficácia do compartilhamento de memória para uma determinada carga de trabalho, tente executar a carga de trabalho e use resxtop ou esxtop para observar a economia real. Encontre as informações no campo PSHARE do modo interativo na página Memória.

Use as configurações avançadas de Mem.ShareScanTime e Mem.ShareScanGHz para controlar a taxa na qual o sistema verifica a memória para identificar oportunidades de compartilhamento de memória.

Você também pode configurar o compartilhamento para máquinas virtuais individuais definindo a opção sched.mem.pshare.enable.

Devido a questões de segurança, o compartilhamento transparente de página entre máquinas virtuais é desativado por padrão e o compartilhamento de página está sendo restrito ao compartilhamento de memória entre máquinas virtuais. Isso significa que o compartilhamento de página não ocorre entre máquinas virtuais e ocorre apenas dentro de uma máquina virtual. O conceito de salting foi introduzido para ajudar a resolver as preocupações que os administradores de sistema podem ter sobre as implicações de segurança do compartilhamento transparente de páginas. O salting pode ser usado para permitir um gerenciamento mais granular das máquinas virtuais que participam do compartilhamento transparente de página do que era possível anteriormente. Com as novas configurações de salting, as máquinas virtuais poderão compartilhar páginas somente se o valor de salt e o conteúdo das páginas forem idênticos. Uma nova opção de configuração de host Mem.ShareForceSalting pode ser configurada para ativar ou desativar o salting.

Consulte Atributos avançados para obter informações sobre como definir opções avançadas.

Compactação de memória

ESXi fornece um cache de compactação de memória para melhorar o desempenho da máquina virtual quando você usa a superalocação de memória. A compactação de memória é ativada por padrão. Quando a memória de um host fica sobrecarregada, o ESXi compacta as páginas virtuais e as armazena na memória.

Como o acesso à memória compactada é mais rápido do que o acesso à memória que é trocada para o disco, a compactação de memória em ESXi permite sobrecarregar a memória sem prejudicar significativamente o desempenho. Quando uma página virtual precisa ser trocada, o ESXi primeiro tenta compactar a página. As páginas que podem ser compactadas para 2 KB ou menos são armazenadas no cache de compactação da máquina virtual, aumentando a capacidade do host.

Você pode definir o tamanho máximo do cache de compactação e desativar a compactação de memória usando a caixa de diálogo Configurações avançadas no vSphere Client.

Ativar ou desativar o cache de compactação de memória

A compactação de memória é ativada por padrão. Você pode usar as Configurações avançadas do sistema no vSphere Client para ativar ou desativar a compactação de memória para um host.

Procedimento

  1. Navegue até o host no vSphere Client.
  2. Clique em Configurar (Configure).
  3. Em Sistema (System), selecione Configurações avançadas do sistema (Advanced System Settings).
  4. Localize Mem.MemZipEnable e clique no botão Editar (Edit).
  5. Digite 1 para ativar ou digite 0 para desativar o cache de compactação de memória.
  6. Clique em OK.

Definir o tamanho máximo do cache de compactação de memória

Você pode definir o tamanho máximo do cache de compactação de memória para as máquinas virtuais do host.

Você define o tamanho do cache de compactação como uma porcentagem do tamanho da memória da máquina virtual. Por exemplo, se você digitar 20 e o tamanho da memória de uma máquina virtual for de 1.000 MB, ESXi poderá usar até 200 MB de memória do host para armazenar as páginas compactadas da máquina virtual.

Se você não definir o tamanho do cache de compactação, ESXi usará o valor padrão de 10 por cento.

Procedimento

  1. Navegue até o host no vSphere Client.
  2. Clique em Configurar (Configure).
  3. Em Sistema (System), selecione Configurações avançadas do sistema (Advanced System Settings).
  4. Localize Mem.MemZipMaxPct e clique no botão Editar (Edit).
    O valor desse atributo determina o tamanho máximo do cache de compactação para a máquina virtual.
  5. Insira o tamanho máximo do cache de compactação.
    O valor é uma porcentagem do tamanho da máquina virtual e deve estar entre 5 e 100 por cento.
  6. Clique em OK.

Medindo e diferenciando tipos de uso de memória

A guia Desempenho (Performance) do vSphere Client exibe várias métricas que podem ser usadas para analisar o uso de memória.

Algumas dessas métricas de memória medem a memória física do convidado, enquanto outras métricas medem a memória da máquina. Por exemplo, dois tipos de uso de memória que você pode examinar usando métricas de desempenho são a memória física do convidado e a memória da máquina. Você mede a memória física do convidado usando a métrica Memória Concedida (para uma máquina virtual) ou Memória Compartilhada (para um host). No entanto, para medir a memória da máquina, use Memória consumida (para uma máquina virtual) ou Memória compartilhada comum (para um host). Compreender a diferença conceitual entre esses tipos de uso de memória é importante para saber o que essas métricas estão medindo e como interpretá-las.

O VMkernel mapeia a memória física do convidado para a memória da máquina, mas eles nem sempre são mapeados um-para-um. Várias regiões da memória física do convidado podem ser mapeadas para a mesma região da memória da máquina (quando o compartilhamento de memória) ou regiões específicas da memória física do convidado podem não ser mapeadas para a memória da máquina (quando o VMkernel faz swap ou balão de memória física do convidado). Nessas situações, os cálculos do uso da memória física do convidado e do uso da memória da máquina para uma máquina virtual individual ou um host são diferentes.

Considere o exemplo na figura a seguir, que mostra duas máquinas virtuais em execução em um host. Cada bloco representa 4 KB de memória e cada cor/letra representa um conjunto diferente de dados em um bloco.

Figura 2. Exemplo de uso de memória

Esta figura ilustra um exemplo do uso de memória de duas máquinas virtuais.

As métricas de desempenho para as máquinas virtuais podem ser determinadas da seguinte forma:

  • Para determinar a Memória Concedida (a quantidade de memória física do convidado que é mapeada para a memória da máquina) para a máquina virtual 1, conte o número de blocos na memória física do convidado da máquina virtual 1 que têm setas para a memória da máquina e multiplique por 4 KB. Como há cinco blocos com setas, a Memória Concedida é de 20 KB.
  • Memória consumida é a quantidade de memória da máquina alocada para a máquina virtual, contabilizando a economia da memória compartilhada. Primeiro, conte o número de blocos na memória da máquina que têm setas da memória física guest da máquina virtual 1. Existem três desses blocos, mas um bloco é compartilhado com a máquina virtual 2. Portanto, conte dois blocos completos mais metade do terceiro e multiplique por 4 KB para um total de 10 KB de memória consumida.
A diferença importante entre essas duas métricas é que Memória Concedida conta o número de blocos com setas no nível de memória física do convidado e Memória Consumida conta o número de blocos com setas no nível de memória da máquina. O número de blocos difere entre os dois níveis devido ao compartilhamento de memória e, portanto, a memória concedida e a memória consumida são diferentes. A memória está sendo salva por meio de compartilhamento ou outras técnicas de recuperação.
Um resultado semelhante é obtido ao determinar a Memória Compartilhada e a Memória Compartilhada Comum para o host.
  • A memória compartilhada para o host é a soma da memória compartilhada de cada máquina virtual. Calcule a memória compartilhada examinando a memória física guest de cada máquina virtual e contando o número de blocos que têm setas para os blocos de memória da máquina que têm mais de uma seta apontando para eles. Há seis desses blocos no exemplo, portanto, a memória compartilhada para o host é de 24 KB.
  • Memória Compartilhada Comum é a quantidade de memória de máquina compartilhada por máquinas virtuais. Para determinar a memória comum, examine a memória da máquina e conte o número de blocos que têm mais de uma seta apontando para eles. Há três desses blocos, portanto, a memória compartilhada comum é de 12 KB.
A memória compartilhada está relacionada à memória física do convidado e examina a origem das setas. A memória compartilhada comum, no entanto, lida com a memória da máquina e examina o destino das setas.

As métricas de memória que medem a memória física do convidado e a memória da máquina podem parecer contraditórias. Na verdade, eles estão medindo diferentes aspectos do uso de memória de uma máquina virtual. Ao compreender as diferenças entre essas métricas, você pode usá-las melhor para diagnosticar problemas de desempenho.

Confiabilidade da memória

A confiabilidade da memória, também conhecida como isolamento de erros, permite que o ESXi pare de usar partes da memória quando determinar que uma falha pode ocorrer, bem como quando ocorreu uma falha.

Quando erros corrigidos suficientes são relatados em um endereço específico, ESXi para de usar esse endereço para evitar que o erro corrigido se torne um erro não corrigido.

A confiabilidade da memória fornece melhor confiabilidade do VMkernel, apesar dos erros corrigidos e não corrigidos na RAM. Ele também permite que o sistema evite o uso de páginas de memória que possam conter erros.

Correção de uma notificação de isolamento de erro

Com a confiabilidade da memória, o VMkernel para de usar as páginas que recebem uma notificação de isolamento de erro.

O usuário recebe um evento no vSphere Client quando o VMkernel se recupera de um erro de memória incorrigível, quando o VMkernel desativa uma porcentagem significativa da memória do sistema devido a um grande número de erros corrigíveis ou se há um grande número de páginas que não podem aposentar-se.

Procedimento

  1. Desocupar o host.
  2. Migre as máquinas virtuais.
  3. Execute testes de hardware relacionados à memória.

Sobre a troca do sistema

A troca do sistema é um processo de recuperação de memória que pode aproveitar os recursos de memória não utilizados em todo o sistema.

A troca do sistema permite que o sistema recupere memória de consumidores de memória que não sejam máquinas virtuais. Quando a troca do sistema está habilitada, você tem uma compensação entre o impacto de recuperar a memória de outro processo e a capacidade de atribuir a memória a uma máquina virtual que pode usá-la. A quantidade de espaço necessária para a troca do sistema é de 1 GB.

A memória é recuperada retirando dados da memória e gravando-os no armazenamento em segundo plano. O acesso aos dados do armazenamento em segundo plano é mais lento do que o acesso aos dados da memória, por isso é importante selecionar cuidadosamente onde armazenar os dados trocados.

ESXi determina automaticamente onde a troca do sistema deve ser armazenada, este é o Local preferido do arquivo de troca (Preferred swap file location). Essa decisão pode ser auxiliada pela seleção de um determinado conjunto de opções. O sistema seleciona a melhor opção ativada possível. Se nenhuma das opções for viável, a troca do sistema não será ativada.

As opções disponíveis são:

  • Datastore - Permita o uso do datastore especificado. Observe que um datastore vSAN ou um datastore VMware vSphere® Virtual VolumesTM não pode ser especificado para arquivos de permuta do sistema.
  • Cache de troca de host - Permita o uso de parte do cache de troca de host.
  • Localização preferencial do arquivo de permuta - Permita o uso da localização preferencial do arquivo de permuta configurada para o host.

Configurar a troca do sistema

Você pode personalizar as opções que determinam o local de troca do sistema.

Pré-requisitos

Marque a caixa de seleção Ativado (Enabled) na caixa de diálogo Editar configurações de troca do sistema.

Procedimento

  1. Navegue até o host no vSphere Client.
  2. Clique em Configurar (Configure).
  3. Em Sistema (System), selecione Trocar sistema (System Swap).
  4. Clique em Editar (Edit).
  5. Marque as caixas de seleção para cada opção que você deseja ativar.
  6. Se você selecionar a opção datastore, selecione um datastore no menu suspenso.
  7. Clique em OK.