Técnicas de recuperação de memória no ESXi – parte 2

Padrão

Eu, particularmente, gosto muito de entender como as coisas funcionam. Eu tento entrar na cabeça dos engenheiros que desenharam a solução e seguir a mesma linha de raciocínio que eles tiveram. Eu realmente me divirto com isso. Existe uma grande diferença daqueles que apenas sabem fazer para os que tem plena consciência do que estão fazendo.

O post de hoje tem um conteúdo mais técnico e talvez não acrescente nada prático nas suas tarefas rotineiras. Porém, eu acho importante que todo profissional VMware entenda os conceitos de funcionamento da solução.

Hoje, vou dar continuidade ao assunto de gerenciamento de memória no ESXi. Se você não leu o primeiro post, falamos sobre memory host state, TPS (transparent page sharing) e balloon driver (vmmemctl).

Vamos falar hoje sobre memory compression e memory swapping.

  1. Memory compression

A técnica de memory compression entra em cena quando nem o TPS nem o balloon driver foram suficientes para atender à necessidade de memória do host. Para evitar que o ESXi recorra ao último método (memory swapping), o vmkernel passa a comprimir páginas de memória e armazená-las em uma área de cache, chamada cache de compressão.

Em termos de performance, o memory compression leva vantagem sobre o memory swapping porque na próxima vez que for feito um acesso à área de memória comprimida, o único trabalho do ESXi será descomprimir essa área, o que é muito melhor do que o swap em disco. Para uma página de memória ser comprimida, o ESXi precisa certificar que essa área pode ser reduzida em pelo menos 50%, caso contrário, a única saída, infelizmente, é o swap em disco.

Resumindo, o principal objetivo do memory compression é evitar o swap em disco. É a última alternativa. Somente áreas de memória que estão aptas a fazer swap em disco é que são candidatas ao memory compression, ou seja, o ESXi não vai comprimir áreas de memória quando o swap não for necessário.

2. Memory swapping ou host swapping

Esse é o último e mais doloroso método de recuperação de memória. Quando nem o TPS, balloon driver e memory compression foram bastante para conseguir recuperar memória, o memory swapping entra em cena.

Toda vez que uma máquina virtual é iniciada, o ESXi cria um arquivo de swap com o formato .vswp. O tamanho máximo desse arquivo é a quantidade de memória da máquina virtual. Em momentos de contenção, o ESXi pode fazer o swap de memória do guest para um arquivo em disco, que consequentemente vai liberar memória física do host para o hypervisor. O método de memory compression seleciona aleatoriamente páginas de memória do guest para serem recuperadas, independente se essa memória estiver ativa ou não, o que causa uma grande perda de performance na máquina virtual.

O TPS, balloon driver e o memory compression são métodos oportunísticos de aproveitamento de memória, ou seja, eles não garantem que podem recuperar memória de uma VM, pois elas podem não ter páginas de memória semelhantes para serem compartilhadas, o balloon driver pode não funcionar devido à ausência do VMware Tools e a compressão pode não ter um bom aproveitamento, ou ser inviável. O único método garantido de recuperação de memória é o host swapping.

Enfatizo mais uma vez: todos esses métodos de gerenciamento e recuperação de memória só vão acontecer em momentos de contenção do host. Se não há contenção, o hypervisor não irá impedir que a sua máquina virtual use toda a memória a ela provisionada 🙂

É isso. Espero que esses dois posts tenham lhe ajudado a entender um pouco sobre como funciona o gerenciamento de memória em um ambiente virtualizado VMware.

Até mais!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *