Hypervisor. Diego Souza Gomes 3 de maio de PDF
Download "Hypervisor. Diego Souza Gomes 3 de maio de 2007"
Esther Wagner Antas
1 Hypervisor Diego Souza Gomes 3 de maio de 2007 Resumo As máquinas virtuais envolvem a criação de um sistema de computador totalmente em software. Usando-as, é possível hospedar vários computadores virtuais em um único servidor físico e controlar, com precisão, os recursos alocados a cada sistema. As máquinas virtuais operam através da criação de um hipervisor, que age como um mini-sistema operacional que é inicializado primeiro e, essencialmente, virtualiza o hardware subjacente em pequenas partes para que o sistema operacional diferente possa ser executado no mesmo servidor. Essa abordagem não só facilita a operação de várias instâncias de sistema operacional, como também possibilita executar diferentes tipos deles no mesmo servidor físico. 1 Virtualização Em computação, virtualização é um termo que se refere a abstração de recursos computacionais. Uma definição útil é Uma técnica que esconde as características físicas dos recursos computacionais de modo que outros sistemas, aplicações, ou usuários finais possam interagir com estes recursos. Isto implica em fazer com que um único recurso (como um servidor, um sistema operacional, uma aplicação ou um dispositivo de armazenamento) apresente a funcionalidade de múltiplos recursos lógicos; ou também implica em fazer com que múltiplos recursos físicos (com dispositivos de armazenamento ou servidores) apresentemse como um único dispositivo lógico.[3] 2 Virtualização de plataformas A virtualização de plataformas é realizada sobre uma dada plataforma de hardware por um software hospedeiro, que cria um ambiente de computação simulado ( uma máquina virtual ) para um software convidado. O software convidado, que freqüentemente é um sistema operacional completo, roda como se fosse o único instalado sobre a plataforma de hardware.[2] Existem muitas abordagens para virtualização de plataforma, listadas abaixo, baseadas em como a simulação do hardware é implementada. Emulação - a máquina virtual simula todo o hardware, permitindo que um Sistema Operacional sem modificações rode em um processador central completamente diferente do hardware nativo. (Bochs, PearPC, versões do virtual PC para PPC, Qemu sem aceleração) 1
2 Virtualização nativa ou virtualização cheia - a máquina virtual somente simula parcialmente o hardware para permitir que um Sistema Operacional sem modificações funcione isoladamente no hardware, mas o Sistema Operacional convidado deve ser projetado para o tipo de processador central. (VirtualBox, Virtual Iron, Virtual PC, VMware Workstation, VMware Server VMware, Parallels Desktop, Adeos). Paravirtualização - a máquina virtual não simula o hardware, mas oferece preferivelmente um API especial que requer modificações do kernel do Sistema Operacional hóspede. (Xen) Virtualização no nível do sistema operacional - Virtualiza um servidor no nível do sistema operacional, permitindo que múltiplos servidores virtuais rodem em um único servidor físico de maneira isolada e segura. Os ambientes dos Sistemas Operacionais hospedes são os mesmos que o do Sistema hospedeiro, isto é, o mesmo kernel é compartilhado pelos sistemas convidados e o hospedeiro. (Linux-VServer, Virtuozzo e OpenVZ, Solaris Containers e FreeBSD Jails) A Virtualização de aplicação consiste em rodar uma aplicação desktop ou servidora localmente, usando recursos locais, dentro de uma máquina virtual apropriada. A aplicação roda um um pequeno ambiente virtual, contendo os componente necessários a sua execução - registradores, arquivos, variáveis de ambiente e elementos para interface com o usuário. Este ambiente virtual atua como uma camada entre a aplicação e o Sistema Operacional. Exemplos incluem a a Sun Java Virtual Machine, Softricity, Thinstall, Altiris, and Trigence. 3 Conceitos de Virtualização 3.1 Máquinas Virtuais O conceito de virtualização pode ser usado para todo o sistema em uma máquina. Para implementar uma máquina virtual, os desenvolvedores adicionam uma camada de software à máquina real para suportar a arquitetura desejada. Através do mapeamento implementado pela camada de virtualização, a máquina virtual pode oferecer uma interface diferente e esconder restrições do hardware na máquina real. Do ponto de vista de um processo executando um programa do usuário, a máquina real consiste de um espaço lógico de endereços de memória reservado para o processo contendo as instruções no nível do usuário e os registradores que permitem a executar o código e armazenar o estado pertencente ao processo. Os dispositivos de entrada/saída são visíveis apenas através das abstrações criadas pelo SO. A interface binária da aplicação (ABI) define a máquina vista pelo processo, assim como a interface de programação de aplicação (API) especifica as características da máquina em uma linguagem de alto nível. Do ponto de vista do SO, a máquina real é todo o hardware subjacente, onde o sistema inteiro é executado. O sistema é um ambiente de execução completo que pode atender múltiplos processos simultaneamente. Estes processos compartilham o processador, um sistema de arquivos, páginas de memória física e 2
3 outros dispositivos do hardware. O ambiente do SO persiste no tempo independente do início e término dos processos executados. O sistema aloca tempo de execução no processador, memória real e recursos de E/S para os processos, e permite que eles interajam com seus recursos. Da perspectiva do SO, então, as características do hardware apenas definem a máquina; é a arquitetura do conjunto de instruções (ISA) que provê a interface entre o sistema e a máquina. Assim como existem perspectivas do processo e do sistema para a máquina real, existem também máquinas virtuais para o processo e para o sistema. Uma MV de processo é uma plataforma virtual que executa um único processo. Esse tipo de MV existe apenas para suportar o processo; é criada junto com o processo e termina quando o processo termina. A MV de processo mais comum é tão ubíqua que poucos a consideram uma MV. A maioria dos SOs podem simultaneamente suportar múltiplos processos de usuário através da multiprogramação, que proporciona para cada processo a ilusão de possuir uma máquina completa para ele. O SO compartilha no tempo o hardware e gerencia os recursos para tornar isso possível. Outro exemplo de MV de processo bastante conhecido hoje, é a MV implementada no nível da linguagem de alto nível, como são a arquitetura de MV Java de Sun Microsystems e a Common Language Infrastructure da Microsoft. Este tipo de MV não corresponde diretamente a nenhuma máquina real, mas é projetada para permitir a portabilidade do código para qualquer plataforma de hardware que execute a MV e explorar as características da respectiva linguagem de alto nível. Em contraste, a MV de sistema provê um ambiente persistente e completo que suporta um SO junto com seus muitos processos de usuários. Permite ao SO convidado o acesso ao hardware virtual, como processador, memória, rede e outros recursos de entrada e saída (E/S). O processo ou sistema que executa sobre a MV é o componente convidado, enquanto a plataforma subjacente que suporta a MV é o hospedeiro. O software de virtualização, que cria as MVs, é normalmente chamado de monitor de máquina virtual (MMV) ou hypervisor. 4 Tipos de Máquinas Virtuais Uma MV provê um ambiente completo no qual o SO e muitos processos, possivelmente pertencendo a muitos usuários, podem coexistir. Através do MMV, uma única máquina pode suportar múltiplos SOs convidados executando isoladamente uns dos outros e simultaneamente.[6] 4.1 Virtualização Clássica ou do Tipo I Do ponto de vista do usuário, a maioria das MVs provê essencialmente a mesma funcionalidade mas difere nos detalhes de implementação. A abordagem clássica, figura 1, coloca o MMV diretamente sobre o hardware e as MVs são criadas na camada acima. O MMV executa com a maior prioridade, enquanto os sistemas convidados executam no modo de usuário, de forma que o MMV pode interceptar e emular todos as operações do SO convidado que acessam ou manipulam os recursos de hardware. Os exemplos clássicos de hypervisor do tipo 1 são o CP/CMS, desenvolvido pela IBM na década de 1960, um ancestral do atual z/vm, também desenvolvido pela IBM. Entre os exemplos mais recentes estão o Xen, VMware s ESX Server, and Sun s Logical Domains Hypervisor. 3
4 Figura 1: Virtualização clássica ou Tipo I 4.2 Virtualização Hospedada ou do Tipo II Uma implementação alternativa executa a camada de virtualização acima de um SO hospedeiro, resultando em uma MV hospedada, ver figura 2. Uma vantagem dessa abordagem é que o usuário instala a MV como uma aplicação típica. Mais ainda, a MV pode alcançar o hardware através dos drivers de dispositivos do SO, além de outros serviços de sistema, sem precisar de um MMV. Um exemplo da implementação de uma MV hospedada é servidor VMware Server GSX para plataforma de hardware Intel IA-32. Outro exemplo é o Virtual PC, da Microsoft, que executa um sistema Windows em uma plataforma Macintosh. Figura 2: Virtualização hospedada ou Tipo II 4
5 5 Particionamento Lógico O SO cria uma ilusão de uma máquina inteira dedicada para o processo. Extendendo esse conceito, é possível particionar os recursos do sistema de maneira a criar múltiplos contextos de execução, onde os processos e recursos são isolados, provendo a ilusão de múltiplos, independentemente gerenciados, servidores virtuais executando em uma única máquina. Cada partição é chamada de contexto de segurança, e o sistema virtualizado é o servidor privado virtual (SPV). A virtualização é implementada através da interface de chamada de sistemas. Sistemas como Linux-vserver, BSD jails, Solaris Zones implementam essa tecnologia. Figura 3: Particionamento lógico 6 Implementações de Monitor de Máquina Virtual De acordo com Popek e Goldberg, em [5], uma MMV tem três características. Primeira, uma MMV provê um ambiente de execução quase idêntico à máquina original; qualquer processo em uma MV deve ser executado como se estivesse na máquina real. Exceções à essa regra resultam das diferenças na disponibilidade de recursos do sistema, nas dependências da temporização e nos dispositivos de E/S oferecidos. Se a disponibilidade do recurso, por exemplo, espaço físico de memória, é diferente, o programa pode tomar decisões diferentes. A dependência da temporização pode perder sua validade porque o MMV pode intervir e executar um conjunto diferente de instruções quando uma instrução privilegiada é executada na MV. Finalmente, se a MV não está configurada com todos os dispositivos de E/S disponíveis na máquina real, o comportamento do programa executado pode não ser o esperado. A segunda característica obriga a MMV a ter o total controle dos recursos da máquina real. Nenhum processo na MV pode ter acesso a qualquer recurso do hardware sem que seja explicitamente alocado pelo MMV. Como também, 5
6 o MMV pode retomar o controle de um recurso alocado previamente para uma MV. A eficiência é a terceira característica. Um grande percentual de instruções do processador virtual deve ser executado pelo processador real, sem a intervenção do MMV. As instruções que não podem ser executadas diretamente pelo processador real são tratadas pelo MMV. O desempenho do sistema dependerá do tamanho do subconjunto de instruções que dependem do MMV. Várias técnicas podem ser usadas para obter as características citadas, cada uma oferecendo diferentes resultados na implementação. A avaliação dos resultados deve levar em conta os seguintes objetivos: compatibilidade, desempenho e simplicidade. A compatibilidade é importante para manter a a habilidade de executar software legado. O segundo objetivo procura tornar a execução do MMV o mais transparente possível para o desempenho do SO e seus processos na MV. A simplicidade é buscada para evitar falhas no MMV, que causaria problemas para todas as MVs executando no sistema. Em particular, para prover a segurança na execução da MV é necessário que o MMV esteja livre de bugs que possam ser explorados por ataques. 6.1 Virtualização do Processador A técnica mais básica para implementar as características básicas de um MMV é a execução direta que permite a execução da MV diretamente na máquina real, mas sob o controle total do MMV. Essa técnica transfere o modo de execução do SO convidado para o modo não-privilegiado do processador, enquanto o MMV executa no modo privilegiado. Quando algum código na MV tenta executar uma operação privilegiada, o processador gera uma exceção e a passa a executar o código respectivo à exceção no MMV. Assim, o MMV pode controlar os acessos privilegiados aos recursos feitos pela MV. O tratamento de uma instrução que desabilita as interrupções provê um bom exemplo. Se o SO convidado puder desabilitar realmente as interrupções, o MMV não mais receberá o controle da execução. A solução é o MMV registrar que as interrupções foram desabilitadas para aquela MV e adiar a entrega das próximas interrupções até que sejam habilitadas novamente. Quase todos os processadores atuais não estão aptos à técnica execução direta, incluindo a arquitetura mais popular - a Intel IA-32. Por exemplo, a arquitetura IA-32 permite que instruções não-privilegiadas possam acessar registradores com informações do modo de privilégio. Um código executando na MV pode ler o registrador CS para determinar o nível de privilégio corrente. A execução direta espera que o processador gere uma exceção para que o MMV possa informar o nível de privilégio correto da máquina virtual. Um processador x86, entretanto, não interrompe a execução da instrução e o software recebe a informação de privilégio incorreta. Várias técnicas alternativas podem ser usadas para implementar um MMV em processadores que não permitem o execução direta. As mais usadas são a paravirtualização e a execução direta combinada com a tradução binária rápida. Na paravirtualização, a interface da MV não é exatamente a interface da máquina real. Em termos do processador, o SO convidado deve ser modificado para remover os trechos de código que não permitem a virtualização e substituídos por trechos equivalentes, que respeitem a execução direta e 6
7 também mais eficientes. As modificações no SO convidado não exigem modificações respectivas nas aplicações do usuários. A maior desvantagem da paravirtualização é a incompatibilidade com SOs que não foram modificados para a arquitetura da MV. Mas mesmo com esse inconveniente, muitos projetos de pesquisa escolhem trabalhar com a paravirtualização, pois as implementações obtidas têm apresentado bons resultados de desempenho. O MMV VMware ESX [1] desenvolveu uma nova técnica de virtualização que combina a execução direta com a tradução binária em tempo de execução. Basicamente, o código do kernel (privilegiado) é executado sob o controle de um tradutor binário. O tradutor troca o código que contém instruções problemáticas por outro equivalente que pode ser executado diretamente no processador. A tradução é armazenada em uma trace cache para otimizar o desempenho. A tradução binária é feita também para otimizar a execução direta, eliminando muitas das interrupções geradas por instruções privilegiadas. Em futuro bem próximo, Intel e AMD oferecerão suporte de hardware para a virtualização em seus processadores x86. Ambas tecnologias adicionarão um novo modo de execução para o processador, que permitirá o MMV usar a execução direta de forma segura e transparente nas MVs. Para melhorar o desempenho, o modo de execução adicional promete diminuir o número de interrupções dependentes de tratamento pelo MMV e o tempo necessário para tratar as interrupções. 6.2 Virtualização de Memória A técnica tradicional de virtualização de memória é o MMV manter uma cópia da estrutura de dados de gerenciamento de memória da MV - a tabela de página sombra. Assim, o MMV pode manter o controle preciso das páginas de memória da máquina real disponíveis para uma MV. Quando o SO convidado estabelece um mapeamento novo em sua tabela de página, o MMV detecta a modificação e atualiza a respectiva entrada na tabela de página sombra, que aponta para a localização real da página de memória no hardware. Quando a MV está executando, o hardware usa a tabela de página sombra para a tradução do endereço, de forma que o MMV sempre tem o controle das páginas que cada MV está usando. O subsistema de memória do MMV constantemente controla a quantidade de memória usada por uma MV, e ele pode periodicamente recuperar as páginas de memória transferindo uma parte do espaço de memória da MV para o disco. Essa funcionalidade conflita com o gerenciamento de memória feito pelo SO convidado, o que pode resultar por exemplo na anomalia da paginação dupla, quando o SO convidado força o MMV a trazer uma página do disco, simplesmente para no momento seguinte retirá-la do seu espaço de memória. O MMV Xen [4] usa a paravirtualização para os processadores x86. Diferente do método tradicional, oferece apenas uma quantidade determinada de páginas físicas de memória para a MV e não trabalha com tabela de página sombra. Para obter melhor desempenho, Xen apenas interfere nas atualizações feitas pelo SO convidado na tabela de página para checar a validade das modificações. Para isso, Xen permite o registro da tabela de página do SO convidado diretamente com a MMU, mas restringe os acessos à apenas leituras. As tentativas de atualizações são passadas para Xen, através de chamadas especiais - 7
8 hypercalls - que valida e aplica as modificações nas entradas da tabela de página. Xen mantém o controle das quantidade de páginas usadas através de um mecanismo conhecido como ballon driver. Esse mecanismo permite que o MMV controle a quantidade de páginas físicas usados pela MV. Quando Xen quer retomar algumas páginas de memória, ele pede ao ballon driver para alocar mais memória. As páginas virtuais reservadas pelo SO convidado são então presas às respectivas páginas físicas. As páginas físicas podem assim ser retiradas da MV pelo MMV. As decisões de alocação e transferência de páginas de memória para o disco é feita apenas pelo SO convidado, evitando qualquer redundância no gerenciamento de memória, como descrito acima para o método tradicional. 6.3 Virtualização de E/S Os sistemas de computação atuais, com seus diversos dispositivos de E/S torna a virtualização de E/S muito difícil. Os sistemas baseados na arquitetura IA-32 suportam uma quantidade muito grande de dispositivos de diferentes fabricantes, com diferentes interfaces de programação. Conseqüentemente, a tarefa de escrever uma camada no MMV que controle estes dispositivos tornase quase impossível. Para superar este problema, o MMV VMware Workstation utiliza a arquitetura hospedada (hosted architecture). Nessa arquitetura, o MMV é instalado como uma aplicação do SO hospedeiro, como Windows NT ou Linux, e usa os drivers do SO hospedeiro para ter acesso aos dispositivos de E/S. Como esses SOs possuem os drivers para os dispositivos, a camada de virtualização pode suportar qualquer dispositivo de E/S. Essa técnica funciona bem para desktops, mas a sobrecarga do SO hospedeiro é muito alta para a virtualização dos dispositivos de E/S em servidores. Em sua última versão, Xen implementa a arquitetura Safe Hardware Interface, que permite que drivers de dispositivo, sem modificação, serem compartilhados por MVs isoladas, enquanto protege cada instância de SO e o sistema como um todo de falhas nos drivers. Referências [1] Vmware. [2] Wikepedia. [3] Wikipedia. [4] P. T. Barham, B. Dragovic, K. Fraser, S. Hand, T. L. Harris, A. Ho, R. Neugebauer, I. Pratt, and A. Warfield. Xen and the art of virtualization. In SOSP, pages , [5] G. J. Popek and R. P. Goldberg. Formal requirements for virtualizable third generation architectures. In SOSP 73: Proceedings of the fourth ACM symposium on Operating system principles, page 121, New York, NY, USA, ACM Press. 8
9 [6] G. J. Popek and R. P. Goldberg. Computer systems based on virtual machines. In Proceedings of the VI Workshop on High Performance Computing Systems, page 21,
AVALIAÇÃO EXPERIMENTAL DE TÉCNICAS DE VIRTUALIZAÇÃO ATRAVÉS DE BALANCEAMENTO DE CARGA EM CLUSTERS DE COMPUTADORES. Almir Dominicini Fernandes
COPPE/UFRJ AVALIAÇÃO EXPERIMENTAL DE TÉCNICAS DE VIRTUALIZAÇÃO ATRAVÉS DE BALANCEAMENTO DE CARGA EM CLUSTERS DE COMPUTADORES Almir Dominicini Fernandes Dissertação de Mestrado apresentada ao Programa de
Xen Básico sobre Plano de Fundo e Virtualização
1 Xen Básico sobre Plano de Fundo e Virtualização Xen é um monitor de máquina virtual (hipervisor) que permite que se O utilize um computador físico para executar muitos computadores virtuais por exemplo,