segunda-feira, 12 de julho de 2010

VMI será abandonado pela VMware

O VMI (Virtual Machine Interface) foi uma iniciativa da VMware em criar uma interface padronizada entre o ambiente de virtualização (hypervisor) e o sistema operacional da máquina virtual, com o objetivo de reduzir alguns dos gargalos existentes no desempenho das máquinas virtuais.

A proposta da VMware não era criar uma interface exclusiva para otimizar o desempenho de suas soluções virtualização, e sim definir um padrão aberto que pudesse ser adotado por qualquer hypervisor e que qualquer sistema operacional pudesse oferecer suporte.

O VMI permite a para-virtualização transparente, isto é, o mesmo kernel é utilizado tanto numa instalação em máquina física quanto em máquina virtual, se ajustando a cada situação. Em 2005, quando o VMI começou a ser divulgado, a principal referência de para-virtualização era o Xen, que exigia um kernel diferente para seu funcionamento na máquina virtual.

A inclusão do VMI no kernel Linux foi realizada na versão 2.6.21, em 2007. Essa inclusão foi feita através de um recurso chamado paravirt-ops, baseado no VMI e desenvolvido em conjunto pela IBM, VMware, RedHat e XenSource. Os principais benefícios foram:
  • Redução no consumo de memória em VMs com múltiplas CPUs virtuais (vCPUs):  Com o VMI, algumas estruturas utilizadas no gerenciamento de memória, que antes precisavam ter cópias para cada vCPU, passaram a necessitar de apenas uma cópia compartilhadas, resultando numa redução no consumo de memória, como pode ser observado na Figura 1:
Figura 1: Overhead de Memória em VMs com múltiplas CPUs (Fonte)
  • Melhor desempennho no gerenciamento de memória: Algumas operações necessárias para o gerenciamento de memória da VM são muito custosas. Ao utilizar o VMI, várias dessas operações podem ser agrupadas, reduzindo o custo total e melhorando o desempenho geral.
  • Menor consumo de CPU quando a VM está inativa: O VMI permite reduzir o consumo de CPU do sistema hospedeiro quando a máquina virtual está ociosa (idle), liberando mais tempo de CPU para outras tarefas ou outras máquinas virtuais. O ganho pode ser visto na Figura 2
 
Figura 2: Uso de CPU por uma VM ociosa (Fonte)
  • Maior precisão na contagem de tempo: Um dos maiores desafios em um ambiente virtual é manter a precisão do relógio da máquina virtual. Não são raros os casos em que o relógio atrasa ou adianta em relação ao relógio do sistema hospedeiro. Atualmente avanços no kernel Linux e nas distribuições melhoraram bastante esse cenário (em especial a adoção de kernel tickless em distros recentes), mas antes que houvesse essa solução o VMI oferecia um timer especial, o vmi-timer, que oferecia a alta precisão necessária a diversos serviços cuja precisão do relógio é fundamental.
O desempenho de uma máquina virtual com o VMI habilitado é superior a uma VM utilizando apenas tradução binária (binary translation). O VMI serve como um complemento ao VMware Tools. Enquanto o VMware Tools oferece drivers para-virtualizados para dispositivos, como rede, disco e vídeo, o VMI atua em um nível mais baixo, provendo para-virtualização para o kernel do sistema operacional convidado (guest operating system).

A adoção não alcançou os níveis esperados pela VMware. No Linux, o suporte se restringiu às versões de 32 bits. Isso se deveu ao fato das CPUs Intel exigirem a utilização de virtualização em hardware em máquinas virtuais de 64 bits (algumas instruções necessárias para o funcionamento da tradução binária foram removidas do modo 64 bits), que é incompatível com o modo de funcionamento do VMI. Outros sistemas abertos, como o FreeBSD e o OpenSolaris, não demonstraram interesse pela tecnologia. A Microsoft também optou por não adotar o recurso no Windows.

Mesmo no Linux, alguns problemas abalaram a imagem do VMI. Em algumas versões do kernel, uma mudança afetava negativamente o desempenho das máquinas virtuais, chegando a ter uma queda de desempenho de 10x em relação a ter o recurso desativado. Felizmente a falha foi corrigida, mas algumas distribuições precisaram lançar versões corrigidas do kernel, como o Debian.

Em Setembro de 2009, a VMware anunciou timidamente que estaria removendo o suporte ao VMI do kernel Linux e de seus hypervisors. Baseado em diversos testes internos, o ganho de desempenho oferecido pelo VMI já haviam sido superados pelo suporte em hardware disponíveis nas últimas CPUs da Intel e AMD. O suporte inicial a virtualização de CPU por hardware não oferecia desempenho aceitável e só se tornou competitivo com a adição do suporte a virtualização de memória, incluído pela AMD nos Opteron "Barcelona" e Phenom, sob o nome RVI (Rapid Virtualization Indexing), e pela Intel mais tardiamente nos Xeon "Nehalem" e Core i7, com o EPT (Extended Page Tables).

A remoção está prevista para a versão 2.6.37 do kernel, como pode ser observado aqui, mas pode ser adiantada. Como se trata de uma otimização, que poderia ser removida sem a quebra de compatibilidade, chegou-se a cogitar sua remoção já na versão 2.6.32, mas no final consideraram mais prudente um prazo maior, para que houvesse maior disseminação de hardware com suporte a virtualização capaz de superar s benefícios que o VMI proporcionava.

As novas versões das soluções da VMware alertam sobre a remoção do suporte em versões futuras, como pode ser visto na Figura 3. Apesar de se tratar de uma otimização, caso uma máquina virtual com VMI habilitado seja pausada, ela não poderá ser despausada em uma versão futura que não ofereça o recurso. O mesmo vale para o VMotion, suporte a migração de máquinas virtuais a quente (ligadas) entre servidores existente no VMware ESX/ESXi. A única forma de migrar uma máquina virtual com VMI para uma versão sem suporte será através de uma migração a frio, em que a VM precisa ser desligada. Um documento da VMware oferece mais detalhes.
Figura 3: Aviso informa que VMI será removido nas próximas versões

Apesar do abandono da VMware, outros grupos ainda se aproveitam de sua iniciativa. O KVM, hypervisor incluído no kernel Linux, utiliza as paravirt-ops para otimizar o desempenho das máquinas virtuais. O Xen, que chegou a criticar a inclusão do VMI no kernel, desde a versão 2.6.23 oferece a possibilidade da criação do domU (máquina virtual) utilizando as paravirt-ops, e se prepara para incluir no kernel o suporte ao dom0 (VM privilegiada que provê ao Xen acesso ao hardware) através do mesmo recurso.

Mais uma vez, a evolução do hardware superou as melhorais feitas em software. Isso demonstrou que o modelo de virtualização total, utilizado pela VMware, KVM e pelo Virtualbox, é o formato que deverá dominar daqui por diante, com o uso de para-virtualização em pontos críticos, como a emulação de hardware. 

O Xen, que já oferece o suporte a virtualização total desde a versão 3.0 (por causa do Windows), a cada dia perde mais seu sentido. Para que uma solução complexa de para-virtualização se o hardware permite um desempenho tão próximo, de maneira mais simples e fácil de manter? Por outro, aceitar essa condição e abandonar o suporte pode ser ainda pior, pois qual diferencial teria em relação às soluções da VMware, bem mais maduras e estabelecidas no mercado, e o KVM, que já está integrado ao kernel Linux há mais de três anos e evolui a cada dia?

Um comentário:

Israel disse...

Legal o artigo. Sou usuário do ubuntu 10.04 com kernel 2.6.32-24 e até hoje não vi suporte da vmware para tal. Várias tentativas sem sucesso estão me levando a trocar de opção em para-virtualização ou distribuição linux. Depois de ler sua matéria e algumas outras em outros blogs, fiquei "desmotivado" com as opções de virtualização. Realmente com a evolução dos sistemas operacionais, as VM's sempre permanecem em atraso, e pelo que parece, correm o risco de desaparecem por conta desta dificuldade de sincronia. Triste fim para uma tecnologia de tanta contribuição para a área de Infra-Estrutura tecnológica.

Postar um comentário