
\chapter{Virtualização de recursos}
\label{virtualizacao}

% = O que é virtualização =

Virtualização é o modo de apresentação ou agrupamento de um subconjunto lógico de recursos computacionais de modo que possam ser alcançados resultados e benefícios como se o sistema estivesse executando sobre a configuração nativa. A virtualização de recursos geralmente incluem o armazenamento de dados e poder de processamento. Deste modo, a virtualização dos recursos não é restrita somente à execução, posição geográfica ou pela configuração física de recursos.

Uma tendência nova na virtualização é o conceito de um ``motor de virtualização"~ que dê uma visão holística de toda a  infra-estrutura de rede usando a técnica de agregação%, como por exemplo XXX
. Um outro tipo popular de virtualização e atualmente muito utilizado é a virtualização de \textit{hardware} para rodar mais de um sistema operacional ao mesmo tempo, através de microkernels ou de camadas de abstração de \textit{hardware}, como por exemplo o XEN.


\section{Principais tipos de virtualização}

Virtualização é um termo muito amplo que leva à abstração de recursos em diferentes aspectos da computação. O conceito ``virtualização"~ foi concebido pela área de TI para se referir a tudo que quisessem dizer sobre máquinas virtuais e a \textit{softwares} da gerência de sistemas, o que acaba tornando o sentido do termo muito amplo. %Algumas aplicações comuns de virtualização são listadas abaixo. Esta lista reflete a diversidade extrema do termo.

\subsection{Virtualização por \textit{software}}

Uma máquina virtual é um ambiente que se apresenta como um sistema operacional ``convidado"~ no \textit{hardware} mas é simulado em um ambiente de \textit{software} dentro do sistema hospedeiro\footnote{O \textit{hardware} propriamente dito, ou seja, o sistema base que irá receber os outros sistemas operacionais.}. A simulação dos drivers do \textit{hardware} deve ser muito robusta para o sistema hospedeiro funcionar corretamente. A criação e a gerência de máquinas virtuais são freqüentemente consultadas pelo \textit{software} de vitrualização também chamado de {\bf servidor de virtualização}. Há diversas soluções, considerando:

\begin{itemize}
\item \textbf{Emulação}, a máquina virtual simula todo o \textit{hardware}, permitindo que um Sistema Operacional sem modificações rode em um processador central completamente diferente do \textit{hardware} nativo. (Bochs, PearPC, versões do virtual PC para PPC, Qemu sem aceleração)

\item \textbf{Virtualização nativa} ou ``virtualização cheia", a máquina virtual somente simula parcialmente o \textit{hardware} para permitir que um Sistema Operacional sem modificações funcione isoladamente no \textit{hardware}, mas o Sistema Operacional convidado deve ser projetado para o tipo de processador central. (VMware, Parallels Desktop, Adeos, Mac-on-Linux, XEN)

\item \textbf{Paravirtualização}, a máquina virtual não simula o \textit{hardware} mas oferece preferencialmente um API especial que requer modificações no kernel do Sistema Operacional hospede. As chamadas de sistema ao \textit{hypervisor} é  conhecida como paravirtualização no XEN.

\item \textbf{Virtualização no nível do sistema operacional}, Virtualiza um servidor no nível do sistema operacional, permitindo o múltiplos isolamentos de modo seguro aos servidores virtualizados, em um único servidor físico. Os ambientes dos Sistemas Operacionais hospedes são os mesmos que o do Sistema hospedeiro, já que o mesmo kernel do \textit{hardware} é usado para executar os ambientes no hospedeiro. (Linux-VServer, Virtuozzo e OpenVZ, Solaris Containers, User Mode Linux e FreeBSD Jails)
\end{itemize}

A Virtualização de aplicação envolve o uso de uma aplicação ''desktop'' ou ''server'' localmente, usando recursos locais, sem ser instalado (comparado com os sistemas de instalação e ''terminal services''). A aplicação virtualizada roda em um pequeno ambiente virtual que contém as entradas de registro, arquivos e outros componentes necessários para execução. Este ambiente virtual age como uma camada entre a aplicação e o sistema operacional e elimina conflitos entre a aplicação e as aplicações do sistema operacional. (Softricity, Thinstall, Appstream, Ardence, Trigence, Neoware)

\section{XEN - \textit{Xen virtual machine monitor}}
% = Sobre Xen =

Xen é um Monitor de Máquinas Virtuais (VMM) que provê uma camada de abstração entre o \textit{hardware} e o sistema operacional virtualizado. Todo o código do micro-kernel e das aplicações da VMM do Xen está sob GPL.


Xen provê paravirtualização de Sistemas Operacionais com alterações no kernel para a arquitetura xen em \textit{hardwares} x86/x86\_64 e \textit{full virtualization} em \textit{hardwares} x86/x86\_64 com suporte a virtualização assistida sem necessidade de modificações do sistema operacional hospede.

O Xen é mantido pela Universidade de Cambridge e conta com apoio de empresas globais da área de tecnologia da informação tais como IBM, HP, Intel, AMD entre outras. Para maiores informações acesse o sítio do projeto na Universidade de Cambridge \www{http://www.cl.cam.ac.uk/Research/SRG/netos/xen/} ou o sítio Xen Sources \www{http://www.xensource.com}.

O Xen está sendo portado para outros sistemas operacionais como NetBSD, FreeBSD e Solaris.

% \subsection{Peso pesado da virtualização}

A dependência do Sistema Operacional de um \textit{hardware} exclusivo parece estar se tornando coisa do passado. No futuro se pretende ter um Sistema Operacional que não dependa exclusivamente do \textit{hardware} e de sua localização geográfica.

O Xen nasceu do projeto NetOS (\textit{Networks and Operating Systems}), criado pelo ``Computer Laboratory's Systems Research Group"~ e pretende, como o próprio nome do projeto pai sugere, criar uma camada de abstração onde o Sistema Operacional ``navegue"~ nos recursos dos servidores por uma rede TCP/IP.

Trazendo estes conceitos para o presente, imagine o seguinte cenário: estar acessando um ''bit'' de uma determinada aplicação em um dado momento no tempo rodando em um servidor físico no Brasil e em outro momento este mesmo ''bit'' estar localizado em outro continente sem que ao menos o usuário que acessa este ''bit'' perceba a mudança geográfica do Sistema Operacional.

Aliando-se sistemas de balanceamento de carga, alta disponibilidade, consolidação de recursos computacionais e sistemas de arquivos em cluster, esta tarefa parece estar se materializando. %Neste horizonte, o que torna o Xen a aposta correta é o fato dele já cumprir com grande parte das tarefas projetadas.

\subsection{Comparação}

Ao contrário do VMWare, o Xen é executado diretamente sobre o \textit{hardware}, no \textit{ring 0}, e possui uma máquina virtual chamada de \textit{Dom0}. Essa máquina tem acesso privilegiado ao \textit{hypervisor}, permitindo a ela as operações necessárias que as demais máquinas virtuais não podem executar. A máquina virtual \textit{Dom0} é então responsável pelo gerenciamento de toda a estrutura de gerenciamento de virtualização fazendo uso de aplicações que tem acesso ao \textit{hypervisor}. É nesta máquina virtual que se parametriza a virtualização do \textit{hardware} e a fatia entregue para cada máquina virtual que não tenha acesso direto ao \textit{hardware} e ao \textit{hypervisor}.

No sítio da Sun \www{http://www.sun.com/emrkt/innercircle/newsletter/brazil/0706vass.html}, são feitas algumas ponderações sobre tecnologias de virtualização:

\begin{itemize}
\item Vmware:\\
 Embora atraente, a abordagem de máquina virtual do VMware pode ser relativamente cara em termos de desempenho. Geralmente, o \textit{hypervisor} consome entre 5 e 15\% da potência total da CPU, enquanto cada sistema operacional aumenta a carga. No final, as empresas podem consumir uma grande quantidade de recursos da CPU simplesmente para comportar a infra-estrutura de máquina virtual.

\item Xen:\\
 Recentemente, o \textit{software} de código aberto, Xen, surgiu como alternativa ao VMware. Como o VMware, o Xen suporta a execução de vários sistemas operacionais no mesmo \textit{hardware}. O Xen é uma forma de virtualização de nível mais baixo, com a qual os administradores podem virtualizar várias partes de um sistema, incluindo a memória e a CPU. Como ele reside a um nível baixo, este oferece isolamento de falhas e recursos computacionais consideráveis.
\end{itemize}
 
Há vários motivos para se considerar o Xen:

\begin{itemize}
\item é um programa de código aberto,
\item é relativamente leve, portanto, não consome uma quantidade absurda de recursos da CPU.
\item atinge um alto grau de isolamento entre as tecnologias de máquina virtual.

\item como qualquer outra tecnologia de máquina virtual,  suporta combinações variadas de sistemas operacionais e versões, além de permitir que os administradores iniciem e executem dinamicamente uma instância do sistema operacional sem afetar o serviço.
\end{itemize}

\subsection{Sistema Operacional nativo versus virtualização com Xen}

Algumas justificativas são válidas para a utilização de virtualização. Ainda no sítio da Sun \www{http://www.sun.com/emrkt/innercircle/newsletter/brazil/0106feature.html}:

\begin{quote}
``A popularidade da virtualização tem a ver com seu princípio filosófico - a convicção de que os \textit{data centers} estão abarrotados de servidores subutilizados. Ela parece solucionar o problema criado pelo paradigma predominante do 'um servidor para um aplicativo' que resulta do super-provisionamento visando à máxima performance. As taxas de utilização de servidores podem oscilar entre 5\% e 15\%. Por fim, a promessa de servidores baseados em \textit{commodities} resultou em \textit{data centers} excessivamente caros de gerenciar, alimentar e refrigerar."

\end{quote}


Esta afirmação faz cair por terra a tese de que é necessário o uso de ``um servidor por aplicação", considerando que servidor neste caso é subentendido por \textit{hardware}. As taxas de utilização do processador do \textit{hardware} podem ser melhor aproveitadas utilizando sistemas de virtualização, aumentando o uso dos processadores (o Xen provê virtualização dos processadores ou mesmo balanceamento de carga entre eles), reduzindo o espaço físico do \textit{Data Center} e em contra partida reduzindo o consumo de energia elétrica para a alimentação dos servidores e conseguentemente para outros ítens como condicionador de ar.

Ainda, com Xen é possível manter um SLA mais alto. A possibilidade de dar manutenção física nos servidores sem necessidade de parada dos serviços é um diferencial que todo administrador de sistemas deseja ter, para não sofrer no momento da parada de um \textit{hardware}. Basta para isso ter um outro servidor configurado e migrar em ''tempo real'' (50ms) o sistema operacional de um domínio para outro.

\subsection{Paravirtualização no Xen}

O Xen usa uma técnica completamente diferente do que conceitualmente é utilizada em outros \textit{hypervisors}. Na paravirtualização, o Sistema Operacional hospede é portado para uma camada de \textit{hardware} (ring 1) que virtualiza todas as relações do Sistema Operacional com o \textit{hardware}. Quando o Sistema Operacional atualiza estruturas de dados do \textit{hardware}, tais como a tabela de paginação ou da início a uma operação do acesso direto da memória, o Sistema Operacional hospede faz chamadas na API que é oferecida pelo \textit{hypervisor}.

Isto, por sua vez, permite que o \textit{hypervisor} mantenha o controle de todas as mudanças feitas pelo Sistema Operacional, e decida como modificar as interrupções do \textit{hardware}. O \textit{hypervisor} é mapeado no endereço de cada Sistema Operacional hospede, minimizando o tempo do interrupção entre todo o \textit{hardware} e o \textit{hypervisor}. Finalmente, trabalhando cooperativamente com os Sistemas Operacionais hospedes, o \textit{hypervisor} ganha a introspecção adicional do Sistema Operacional, e pode fazer com que ele fique ciente do fato que foi virtualizado. Isto pode ser uma grande vantagem para o sistema hospedeiro - por exemplo: o \textit{hypervisor} pode informar ao hospede em \textit{real-time} qual foi sua  última atividade, permitindo um reescalonamento bem mais eficiente dos sistemas hospedados.

A paravirtualização disponibiliza benefícios significantes em termos de drivers de dispositivos  e interfaces. Essencialmente, drivers de dispositivos podem ser virtualizados utilizando o modelo de paravirtualização, e assim, garantindo recursos de baixo nível separados por domínios como memória, CPU e outros recursos. Além disso, o próprio \textit{hypervisor} é protegido de eventuais erros e problemas com os drivers dos dispositivos e ainda pode-se empregar qualquer dispositivo disponível no mercado não precisando assim um \textit{hardware} ou driver especifico. E ainda, sistemas Operacionais virtualizados são muito mais portáveis quando virtualizados pelo \textit{hardware}: eles são virtualizados em níveis baixos e, a gerência do \textit{hardware} são módulos que funcionam sob o controle do \textit{hypervisor}.

% fontes:
% 
% [http://www.freesoftwaremagazine.com Free Software Magazine]
% 
% [http://www.ppgia.pucpr.br/~maziero/ensino/fso/apresentacoes/xen.pdf#search=%22xen%20para-virtualiza%C3%A7%C3%A3o%22 PUCPR] Mestrado em Informática Aplicada de André Luiz Przybysz e Olavo José Luiz Júnior

\subsection{Virtualização nativa no Xen}

Virtualização nativa, é também conhecida como virtualização acelerada ou híbrida, é uma combinação de virtualização nativa e virtualização de I/O (entrada e saída). Tipicamente, este método é iniciado com um VMM (Virtual Machine Monitor) com suporte a virtualização cheia, como o Xen por exemplo, e então, baseando-se na análise de desempenho, emprega as técnicas de aceleração. O uso do processador e também dos drivers de rede são os recursos mais comuns, onde é empregada a virtualização nativa.

% {\bf História:}\\
Uma técnica similar à virtualização nativa é usada em mainframes. Na virtualização de \textit{hardwares} x86, a primeira implementação de virtualização nativa foi feita com o software Virtual Iron \www{http://www.virtualiron.com}.


Uma vantagem da virtualização nativa, é que esta reduz a maioria das despesas de manutenção da paravirtualização no que tange a quantidade de alterações necessárias no sistema operacional convidado, e também obtém também considerável ganho de desempenho comparando com paravirtualização.

Uma desvantagem da virtualização nativa é requerer que o convidado carregue  módulos que podem afetar a sua sustentação. Ainda, existe uma certa limitação quanto ao número de sistemas operacionais convidados rodando eficientemente em uma VMM. É provável que, com as novas tecnologias de virtualização nativa de X86 e X86\_64 da Intel (\textit{Vander Pool}) e da AMD (\textit{Pacifica}), o alcance de melhoras nestes quesitos possam estar sendo alcançados. Equipes técnicas de ambas as empresas tem colaborado com o projeto Xen, o que pode trazer bons frutos para a ferramenta.



% O conceito de distribuir os recursos de um único computador em diversas instâncias de \textit{software} não é recente. A origem de virtualização de computadores vem da época dos mainframes, computadores de grande porte destinados a rodar várias instâncias de um sistema operacional, cada qual atendendo a um usuário ou finalidade específica.
% 
% 
% 
% \section{XEN - Xen virtual machine monitor}
% 
% Diferentemente de outros \textit{softwares} destinados a dividir seu hardware, o XEN consegue de maneira muito tranqüila dar a ilusão de que existem diversas máquinas em sua rede, com praticamente o mesmo desempenho de uma máquina real Linux. Estudos comparativos demonstram que o XEN, em diversas situações, é superior em desempenho a \textit{softwares} comerciais e OpenSource, como você pode comprovar no sítio oficial do programa.
% 
% O XEN é um monitor de máquina virtual para hardware x86, desenvolvido e mantido pela Universidade de Cambridge, capaz de suportar a execução de diversos sistemas operacionais sem precarizar ou prejudicar o desempenho e com isolamento total entre as máquinas virtuais, garantindo assim maior segurança.
% 
% 
