O gerenciamento de memória do VMware parece ser um ato de equilíbrio complicado. Com RAM de cluster, Pools de recursos, técnicas de gerenciamento da VMware (TPS, balão, troca de host), utilização de RAM no convidado, troca, reservas, compartilhamentos e limites, há muitas variáveis.
Estou em uma situação em que os clientes estão usando recursos dedicados de cluster do vSphere. No entanto, eles estão configurando as máquinas virtuais como se estivessem em hardware físico. Por sua vez, isso significa que uma compilação de VM padrão pode ter 4 vCPUs e 16 GB ou mais de RAM. Eu venho da escola de começar pequeno (1 vCPU, RAM mínima), verificando o uso no mundo real e ajustando-o conforme necessário. Infelizmente, muitos requisitos de fornecedores e pessoas não familiarizadas com a virtualização solicitam mais recursos do que o necessário ... Estou interessado em quantificar o impacto dessa decisão.
Alguns exemplos de um cluster "problemático".
Resumo do pool de recursos - Parece quase 4: 1 supercomprometido. Observe a alta quantidade de RAM com balão.
Alocação de recursos - A coluna Alocação de pior caso mostra que essas VMs teriam acesso a menos de 50% de sua RAM configurada em condições restritas.
O gráfico de utilização de memória em tempo real da VM superior na lista acima. 4 vCPU e 64 GB de RAM alocados. A média é de 9 GB de uso.
Resumo da mesma VM
Quais são as desvantagens dos recursos de confirmação excessiva e excesso de configuração (especificamente RAM) nos ambientes vSphere?
Supondo que as VMs possam rodar com menos RAM, é justo dizer que há uma sobrecarga na configuração de máquinas virtuais com mais RAM do que elas realmente precisam?
Qual é o contra-argumento para: "se uma VM tem 16 GB de RAM alocada, mas usa apenas 4 GB, qual é o problema? "? Por exemplo, os clientes precisam ser informados de que as VMs não são iguais ao hardware físico?
Quais métricas específicas devem ser usadas para medir o uso da RAM. Rastreando os picos de "Ativo" versus tempo? Assistindo "Consumido"?
Atualização: usei o vCenter Operations Manager para criar um perfil desse ambiente e obter alguns detalhes sobre as estatísticas de cluster listadas acima. Embora as coisas sejam definitivamente supercomprometidas, as VMs são realmente tão superconfiguradas com RAM desnecessária que o espaço de memória real (minúsculo) não mostra contenção de memória no nível de cluster / host ...
Minha opinião é que as VMs devem realmente ser do tamanho certo com um pouco de buffer para o cache no nível do SO. O supercomprometimento por ignorância ou "requisitos" do fornecedor leva à situação apresentada aqui. Balões de memória parecem ruins em todos os casos, pois há um impacto no desempenho; portanto, o tamanho correto pode ajudar a evitar isso.
Atualização 2: algumas dessas VMs estão começando a falhar com:
kernel:BUG: soft lockup - CPU#1 stuck for 71s!
A VMware descreve isso como um sintoma de comprometimento excessivo da memória . Então eu acho que isso responde à pergunta.
Relatório de vCops "Máquinas virtuais de grandes dimensões" ...
vCops Gráfico "Resíduos recuperáveis" ...
Além da excelente resposta de Craig Watson, gostaria de acrescentar o seguinte:
O comprometimento excessivo da memória no VMware não é algo que você deve fazer de propósito. Em geral, isso mostra que você ou seu cliente estão assinando demais o hardware.
Se o comprometimento excessivo for a única opção, recomendo fortemente que você aplique regras de prioridade. Se alguém está empenhado em fornecer uma VM não crítica de 16 GB de vRam quando ela precisa apenas de 4 GB - pelo menos, coloque essa VM em um pool de recursos baixos ou dê uma prioridade baixa. Você realmente não deseja que um banco de dados crítico de produção seja trocado pelo hypervisor. O desempenho não apenas diminuirá o fluxo, como também consumirá as filas de E / S no armazenamento de back-end.
Se você estiver executando em um armazenamento rápido (FusionIO, Violino, SSDs locais etc.), a troca pode não ser uma grande preocupação, mas com o armazenamento SAN tradicional, você afetará eventualmente cada VM e host conectado ao mesmo array / controlador.
fonte