Atenção: esse artigo tem um vídeo complementar. Clique e assista!

Quando os primeiros computadores pessoais entraram no cotidiano das pessoas, o número de aplicativos era bastante limitado. O que normalmente se usava era um editor de textos e, talvez, uma planilha eletrônica. Isso funcionava com o suporte de um sistema operacional (SO) que gerenciava os recursos da máquina – processador, memória e dispositivos de entrada e saída.

Atualmente, o próprio usuário se tornou multitarefa. Em outras palavras, independente de estar usando um notebook, um tablet ou mesmo um celular, o usuário deseja manter uma série de aplicações em execução ao mesmo tempo.

Aliás, com o crescimento dos serviços disponíveis na World Wide Web nos últimos anos – o que se convencionou chamar de cloud computing ou computação em nuvem – os navegadores acabaram assumindo a função de aplicativos multifuncionais, embutindo outras aplicações dentro de si. Com essa quantidade de programas exigindo processamento, somado a um sistema operacional que precisa gerenciar vários recursos, um único processador ficaria sobrecarregado, por mais rápido que seja.

Do ponto de vista dos serviços disponíveis na nuvem, a situação é ainda mais complexa. Nesse caso, são necessários equipamentos muito mais robustos, capazes de realizar um processamento de alto desempenho e assim prover serviços de qualidade.

Contudo, a tecnologia para criar processadores mais rápidos para atender essa demanda de processamento está próxima de um limite imposto por vários fatores. Entre eles o consumo de energia para atingir velocidades de processamento mais altas e a dissipação térmica decorrente desse consumo. Sendo assim, ao invés de aumentar a velocidade de um processador, por que não aumentar o número de núcleos dos processadores?

Os processadores com dois, quatro, oito ou mais núcleos são chamados multicore (ou multinúcleo). Com esse acréscimo no número de núcleos, é possível ter mais programas sendo executados simultaneamente ou ter programas que utilizam dois ou mais núcleos ao mesmo tempo, tornando-os mais rápidos, sem aumentar muito o consumo ou a dissipação térmica. Isso se chama de supercomputação ou processamento de alto desempenho.

Supercomputação como suporte à virtualização

A virtualização é uma estratégia que permite a criação de ambientes virtuais de processamento. Esses ambientes podem conter um SO específico, um dispositivo de armazenamento virtual e um espaço de endereçamento (memória RAM) próprio, além de poder compartilhar sistemas de entrada e saída como recursos de redes de computadores, por exemplo. Geralmente um ambiente virtual contém uma ou mais aplicações ou serviços que dependem de uma configuração específica. Cada um desses ambientes virtuais é emulado por uma máquina virtual que, por sua vez, é vista pelo SO como um processo comum. A Figura 1 ilustra uma modalidade de relação entre o hardware, o sistema operacional, as aplicações e as máquinas virtuais.

Figura 1. Relação entre os diversos componentes em um sistema com virtualização.

Outra modalidade possível é ter um hypervisor – ou gerenciador de máquinas virtuais – que possui uma relação direta com o hardware, sem interferência de nenhum sistema operacional. Nesse caso, os diversos ambientes virtuais são gerenciados pelo hypervisor e não mais por um sistema operacional específico.

Os sistemas de virtualização muito se beneficiam do hardware com processadores multicore. A razão para isso é que os processadores modernos com esta tecnologia permitem o particionamento dos diversos recursos computacionais – especialmente memória e núcleos de processamento – entre os diferentes processos. No entanto, para obter esses benefícios, é importante que o sistema operacional hospedeiro (host) – aquele sobre o qual as várias máquinas virtuais serão executadas – providencie o suporte adequado. Esse suporte deve incluir balanceamento de carga de processamento eficiente entre os diversos núcleos, mecanismos de particionamento e proteção de segmentos de memória, políticas de memória virtual compatíveis com as necessidades de cada máquina virtual, e compartilhamento e gerenciamento dos dispositivos de entrada e saída.

Prós e contras da virtualização com supercomputação

A virtualização tem muitas vantagens a seu favor, mas também há desvantagens a considerar. Entre as vantagens da virtualização, estão os aspectos a seguir:

· Redução de custos na aquisição de hardware, pois se evita adquirir equipamentos diferentes para implementar os diversos servidores. Nesse caso, um único hardware mais robusto pode substituir vários outros com menor robustez;

· Aproveitamento eficiente do hardware, uma vez que haverá mais serviços implementados nas diversas máquinas virtuais executadas sobre um único equipamento;

· Redução do consumo de energia e da necessidade de refrigeração, visto que serão necessários menos equipamentos para executar os diversos servidores embutidos nas máquinas virtuais;

· Melhor utilização do espaço físico, pois em um único hardware pode-se ter várias máquinas virtuais em funcionamento;

· Segurança na recuperação de falhas e acidentes, pois é possível criar “imagens” das máquinas virtuais em dispositivos de armazenamento secundário (CDs ou DVDs). As “imagens” são cópias das máquinas virtuais com suas respectivas configurações. Essas cópias permitem a rápida recuperação de uma máquina virtual.

No entanto, há contrapontos a considerar. São eles:

· Ponto único de falha, visto que quando há falhas no hardware sobre o qual as diversas máquinas virtuais estão em execução, todas essas máquinas falham ao mesmo tempo. O sistema operacional hospedeiro também pode falhar, prejudicando as diversas máquinas ao mesmo tempo;

· Demanda por máquinas muito potentes, pois é importante observar que o poder de processamento do equipamento real vai ser dividido entre as diversas máquinas virtuais;

· Nem todas as aplicações podem ser executadas em máquinas virtuais, pois demandam acesso direto a instruções específicas do processador, algo que não pode ser emulado pelas máquinas virtuais;

· Há questões relativas aos custos das licenças de software, pois, em alguns casos, o modelo de licença varia em função do número de núcleos de processamento do sistema como um todo. Portanto, apesar da aplicação usar uma fração do número de núcleos, o custo da licença pode ser calculado com base no número total de cores do processador.

Alguns dos sistemas de virtualização mais comuns

São muitos os sistemas de virtualização. Citar todos esses sistemas seria inviável. No entanto, a Tabela 1 mostra uma compilação dos sistemas de virtualização mais comuns baseados em arquiteturas x86-64 bits. É importante destacar que alguns sistemas que aparecem na Tabela 1 usam licença GPL (GNU General Public License) para software livre.

Sistema

Fabricante

SO Hospedeiro

SO da máquina virtual

Licença

Hyper-V

Microsoft

Windows 2008

Linux, Windows e suas diferentes versões

Proprietário

KVM

Qumranet

Linux.

Linux

GPL versão 2

Virtual Box

Oracle

Windows, Linux, Mac OSX x86

Linux, Mac OSX, Solaris, Windows

GPL versão 2

VMware e seus diversos subsistemas

VMware

Windows, Linux

Linux, Mac OSX, Solaris, Windows

Proprietário

Xen

XenSource

NetBSD, Linux, Solaris

FreeBSD, NetBSD, Linux, Solaris, Windows XP e 2003 Server

GPL

Tabela 1. Sistemas de virtualização mais comuns na arquitetura x86 - 64 bits.

Conclusão

A virtualização como técnica para melhor aproveitamento do poder computacional disponível não é recente. Começou em meados da década de 1960 com o IBM CP-40. Anos depois, na década de 1990, a IBM desenvolveu o conceito de particionamento lógico (LPAR), no qual o hardware do computador pode ser dividido entre vários processos, onde conjuntos redundantes de dispositivos (núcleos e memória cache, por exemplo) são distribuídos entre processos distintos.

No entanto, é a partir do desenvolvimento da tecnologia multicore que a virtualização pode atingir o seu melhor momento. Com o suporte de um equipamento produzido para multiplicar o poder computacional, apesar de fatores limitantes como consumo de energia, dissipação térmica e compartilhamento de recursos, sistemas virtualizados podem atingir desempenho além do satisfatório.

Referências

Artigo “Virtualization on Multicore for Industrial Real-Time Operating Systems”, escrito por Chris Main.
http://ieeexplore.ieee.org

Artigo “Virtualization Shootout: VMware Server vs. VirtualBox vs. KVM”, escrito por Bill Childers.
www.linuxjournal.com/magazine/virtualization-shootout-vmware-server-vs-virutalbox-vs-kvm

Site do sistema Microsoft Hyper-V Server.
http://www.microsoft.com/brasil/hyper-v-server

Site do sistema KVM – Kernel-based Virtual Machine.
http://www.linux-kvm.org

Site do sistema Virtual Box.
http://www.virtualbox.org

Site da Empresa VMware.
http://www.vmware.com

Site do sistema Xen.
http://xen.org