Continuando com o artigo sobre o que é virtualização, hoje apresento alguns detalhes técnicos sobre as diferentes tecnologias de virtualização.
As Tecnologias de Virtualização
Introdução a Virtualização
Ao longo dos últimos anos, muitas organizações se voltaram para a tecnologia de virtualização para consolidar servidores físicos e reverter a tendência de expansão de servidores, bem como menor consumo elétrico, refrigeração e os custos de espaço para lidar com orçamentos cada vez menores. Recentemente, as tecnologias de virtualização de aplicativos e desktops também surgiram e foram adoptadas em um esforço para simplificar a implementação e gestão das infraestruturas do usuário final.
Cada vez mais, departamentos de Tecnologia da Informação (TI) descobrem que virtualização de infraestruturas proporcionam ambientes mais flexíveis para operar e contribuir para mais rapidamente se adaptar às constantes mudanças empresariais.
Virtualização, no contexto de software, como por exemplo, o Microsoft Hyper-V Server e Virtual Server 2005 R2, pode ser descrito como a abstração de recursos físicos do sistema de modo que várias partições lógicas possam serem criadas para hospedar um conjunto heterogêneo de sistemas operacionais, cada um executando simultaneamente em um único servidor físico.
Cada partição lógica, também conhecida como Máquina Virtual (VM – Virtual Machine) é um ambiente de software que apresenta recursos (através de emulação de hardware ou outros dispositivos), no topo do qual um sistema operacional e um ou mais aplicativos podem ser instalados e executados.
Embora a virtualização tornou-se intensivamente adotada em ambientes de TI baseados em x86 somente na década atual, a tecnologia em si foi realmente introduzida pela primeira vez há 40 anos.
Virtualização baseada em x86
Na última década, as pesquisas de tecnologia de virtualização e o desenvolvimento de produtos têm estado focado na plataforma x86 (32 bits e 64 bits). Em 2006, a AMD e Intel liberaram revisões de processadores x86 com novas instruções e extensões especificamente dirigidas para habilitar a virtualização auxiliada por hardware.
As deficiências da plataforma legada de processadores x86 em relação aos recursos atuais de virtualização não impediu os fornecedores de software de desenvolver soluções antes do lançamento do Intel Virtualization Technology (Intel VT) e AMD-Virtualization (AMD-V). Na verdade, vários tipos de tecnologias de virtualização foram criados para serem executados na arquitetura original do processador x86, utilizando diversas metodologias que diferem em seu nível de abstração, limitações e problemas.
O que é Virtualização de Software?
Virtualização de software inclui várias técnicas para permitir que um único sistema físico hospede várias partições isoladas e seguras entre elas, compartilhando simultaneamente recursos do sistema físico. Essas abordagens diferentes variam em densidade de partição (o número de partições simultâneas), escalabilidade, desempenho e abrangência de sistemas operacionais que podem ser suportadas simultaneamente em uma determinada plataforma.
Virtualização em nível de Máquina
A base de uma solução de virtualização de nível de máquina é o Monitor de Máquina Virtual (Virtual Machine Monitor – VMM). O VMM é responsável pela criação, isolamento e preservação do estado da máquina virtual, bem como a orquestração de acesso aos recursos do sistema. O VMM está vinculado a uma arquitetura de processador específico. Embora permita que diferentes sistemas operacionais possam executar em máquinas virtuais, contudo está limitado a sistemas operacionais que possam ser executados nativamente no processador físico do sistema.
Na figura abaixo ilustra três diferentes implementações de VMM: Tipo-2, o modelo “híbrido”, e Tipo-1. O VMM de tipo-2 é executado sobre um sistema operacional hospedeiro (host), como o Java VM. No modelo “híbrido”, o VMM é executado como um par (peer) para o sistema operacional host. Essa tipo de implementação é utilizada, por exemplo, no software Microsoft Virtual Server 2005 R2. Em contraste, um VMM de tipo-1, ou “hypervisor”, é executado diretamente no hardware abaixo de todas as partições da máquina virtual. O software Microsoft Hyper-V é uma solução baseada em hypervisor.

Em termos de desempenho, o hypervisor (VMM de tipo-1) é geralmente capaz de atingir níveis mais elevados de eficiência e, portanto, maior densidade de máquina virtual. Os outros tipos de VMMs dependem do sistema operacional host para o acesso aos recursos, o que resulta em mudanças de contexto mais custoso, menor desempenho e de maior sobrecarga ao sistema.
Apesar das diferentes implementações de VMM, as três variantes principais são usadas para criar uma interface entre as máquinas virtuais e os recursos do sistema virtualizado. Esses métodos são denominados Virtualização Completa (Full Virtualization), a Virtualização Nativa (Native Virtualization) e Paravirtualização (Paravirtualization).
Virtualização Completa
Nesse método, um sistema virtual completo é criado e mantido pelo VMM para abstrair o hardware real da máquina virtual. Esse método permite que um sistema operacional seja executado em uma máquina virtual sem qualquer modificação. O software Virtual Server 2005 R2 usa essa técnica junto com tradução binária, um processo que permite ao VMM tratar com instruções x86 não-virtualizáveis para fornecer virtualização em processadores x86 anteriores ao Intel VT e AMD-V.
Uma vantagem da virtualização completa e abordagem de dissociação entre o hardware físico da máquina virtual é a capacidade de mover máquinas virtuais facilmente entre servidores com configurações físicas diferentes, contudo essa flexibilidade vem com um impacto no desempenho por causa da sobrecarga associada com a manutenção de cada estado da máquina virtual e da latência introduzida com a tradução binária.

Virtualização Nativa
Virtualização nativa depende de uma arquitetura de processador virtualizável, como por exemples os processadores AMD-V e Intel VT. Esses processadores implementam novos modos de execução, instruções e construções de dados em hardware que são projetados para reduzir a complexidade do VMM.
Com a virtualização nativa, o VMM não é mais necessita manter o estado e as características de recursos da máquina virtual em software; essas funções agora pertencem ao hardware do processador. Assim como no caso da virtualização completa, sistemas operacionais podem rodar sem modificações dentro de máquinas virtuais. Hyper-V utiliza esse método para executar sistemas operacionais legados.
Este tipo de implementação tem muitas vantagens potenciais, que vão desde a simplificação da arquitetura do VMM para oferecer melhorias de desempenho significativas bem como a redução de sobrecarga baseada em software. Ao reduzir a sobrecarga da virtualização, uma maior densidade de partição pode ser alcançada em qualquer sistema.

Paravirtualização
Paravirtualização foi desenvolvido como uma alternativa ao uso de tradução binária para lidar com instruções x86 não-virtualizáveis. Nesse método os sistemas operacionais convidados (guests) requerem modificação para permitir “hiperchamadas” da máquina virtual para o hypervisor. Em vez de ter o hypervisor (ou VMM) traduzir uma instrução potencialmente perigosa do sistema operacional convidado, uma “hiperchamada” estruturada é feita a partir do convidado para o hypervisor para gerenciar as mudanças de estado do sistema. Nesse modelo o sistema operacional é modificado para chamar o VMM sempre que executar uma instrução que possa alterar o estado do sistema, uma instrução sensível. Isso acaba com a necessidade do VMM testar instrução por instrução, o que representa um ganho significativo de desempenho. Outro ponto positivo da paravirtualização é que os dispositivos de hardware são acessados por drivers da própria máquina virtual, não necessitando mais do uso de drivers genéricos que inibiam o uso da capacidade total do dispositivo.
Embora a paravirtualização apresentasse um ganho de desempenho significativo frente à virtualização completa, essa disparidade tem sido superada devido à presença de instruções de virtualização nos processadores Intel VT e AMD-V.
A paravirtualização foi lançada e implementada pela XenSource (recentemente adquirida pela Citrix), que produziu a solução de virtualização Xen de código aberto. Os lançamentos iniciais de Xen suportavam apenas alguns sistemas operacionais modificados. Com o lançamento do Xen 3.0, que alavancou a funcionalidade de virtualização de hardware da AMD-V e Intel VT, um sistema operacional Windows XP inalterado podia ser executado em uma máquina virtual convidada.

Virtualização em nível de Sistema Operacional
Virtualização em nível de sistema operacional é baseada na abstração da camada do sistema operacional para suportar múltiplas partições isoladas ou para suportar ambientes virtuais (VEs) em uma instância única do sistema operacional do host. A virtualização é realizada através do acesso de multiplexação ao kernel, enquanto que assegura que nenhum único VE seja capaz de derrubar o sistema.
Esta técnica resulta em baixa sobrecarga de virtualização e pode render alta densidade de partição. No entanto, existem dois grandes inconvenientes com este tipo de solução. A primeira desvantagem é a incapacidade de executar uma mistura heterogênea de sistema operacional em um determinado servidor, porque todas as partições compartilham um único kernel do sistema operacional. A segunda desvantagem, também causada pelo modelo de kernel compartilhado, é a falta de suporte à execução de carga de trabalho mista de 32-bit e 64-bit.
Parallels Virtuozzo Containers antigamente conhecido como SWsoft, é um exemplo de produto que usa a virtualização em nível de sistema operacional. Foi utilizado por muitos Web Hostings.

Virtualização em nível de Aplicação
Todas as técnicas de virtualização discutidos até este ponto têm o mesmo objetivo, aumentar o número de partições seguras, isolado em execução simultaneamente em hardware físico para maximizar o uso da CPU, armazenamento, rede, memória e outros recursos. Embora possam ser aplicados em um ambiente desktop, esses são principalmente voltadas para a solução de gestão de recursos em ambientes de servidor entretanto esses não abordam problemas de gerenciamento de aplicativos de desktop. Virtualização em nível de aplicação é uma tecnologia que é voltado para a separação e isolamento de aplicações “client-side” rodando no sistema operacional local. Conforme a figura abaixo, aplicações são isoladas em um ambiente virtual em camadas entre o sistema operacional e a pilha de aplicação. O ambiente virtual carrega a aplicação, isola a aplicação de outros aplicativos e do sistema operacional e também impede que o aplicativo modifique recursos locais, como arquivos e configurações do registro. Os aplicativos podem ler informações de arquivos e de registros do sistema local, mas versões graváveis destes recursos são mantidos dentro do ambiente virtual. Na verdade, o aplicativo nunca precisa ser instalado localmente no desktop; em vez disso, os bits de código podem ser dinamicamente transmitidos e armazenados em cache no ambiente virtual conforme novas partes do aplicativo são necessárias.

Em 2006, a Microsoft entrou no mercado de virtualização em nível de aplicação com a aquisição da Softricity e sua linha de produtos SoftGrid. O software Microsoft SoftGrid Application Virtualization for Desktops roda no desktop local e mantém um sistema de registro, sistema de arquivos, e outras configurações em um ambiente virtual, sendo esses entregues para a aplicação conforme sua necessidade. Atualmente existem diversos produtos para a virtualização em nível de aplicação e essa linha é conhecida como Microsoft Application Virtualization v4.6.