Os Dez Mandamentos do Rei da Virtualização Santos, Gustavo Lopes de Oliveira Os Dez Mandamentos do Rei da Virtualização / Gustavo Lopes de Oliveira Santos. Cuiabá – MT: 2013. 1. Ciência da computação – virtualização. I. Título. Gustavo Lopes de O. Santos MBA, LPIC-1, ITIL, Cobit, CAPM Os Dez Mandamentos do Rei da Virtualização Uma breve conversa sobre o que é, como funciona e qual o futuro da virtualização Sumário Prólogo.................................................................................................. 7 Mandamento 1. Saiba o que é virtualização.......................................9 Instrução e processamento............................................................9 Na vida real....................................................................................12 Como o problema foi resolvido?..................................................15 O custo da virtualização................................................................17 A virtualização sai de moda..........................................................19 A volta da virtualização primordialmente como mecanismo de isolamento entre sistemas operacionais.....................................20 Mandamento 2. Entenda os diferentes tipos de virtualização.........25 Virtualização de guest...................................................................25 Mandamento 3. Conheça as soluções disponíveis Mandamento 4. Mostre algum conhecimento sobre KVM Mandamento 5. Mostre algum conhecimento sobre Xen Mandamento 6. Mostre algum conhecimento sobre Hyper-V Mandamento 7. Mostre algum conhecimento sobre OpenVZ Mandamento 8. Mostre algum conhecimento sobre VmWare Mandamento 9. Conheça os principais avanços na área de virtualização Mandamento 10. Saiba o que a virtualização não pode fazer por você Epílogo Prólogo Talvez, algum grande gênio da Tecnologia da Informação que tenha ficado congelado por quarenta anos, e acabou de acordar, definisse virtualização como o ato de multiplexar máquinas computacionais em um único Hardware. E talvez, um gestor de tecnologia da Informação contemporâneo, que queira simplesmente economizar o dinheiro da organização, tivesse o cérebro imediatamente ejetado ao escutar esse enigmático corolário. Virtualização, humanamente falando, é o fato de você fazer com que um computador funcione como vários computadores. É o fato de você fazer um sistema operacional funcionar como vários sistemas operacionais. Simples? Sim. Acabou o livro. Vá para sua empresa e mostre para a gestão estratégica quem é que manda. Na verdade, há mais mistérios entre o software e o hardware do que nossa vã filosofia. Ao longo do tempo – e põe tempo nisso! – técnicas foram criadas para melhorar o desempenho de computadores (ou sistemas operacionais) “virtuais”. A popularização de tais técnicas é recente, porém suas primeiras palavras foram pronunciadas quando a microcomputação ainda engatinhava. Precoce ela. O objetivo deste livro é trazer o histórico, os conceitos, as técnicas, o funcionamento, as soluções de virtualização para você, leitor, de uma maneira direta e descontraída. Não é um trabalho acadêmico. Não é um tratado internacional. É apenas um conjunto de textos feitos para serem interessantes, com alguns diagramas para facilitar ainda mais seu entendimento. Muito se tem dito sobre virtualização. Tem empresas por aí que, inclusive, denominam de virtualização o mero mapeamento de pastas compartilhadas na rede! Esse tipo de marketing tem dificultado, um pouco, algumas pessoas no esforço de obterem um significado pontual para esse conceito. Será que virtualização é tudo? 8 - Os Dez Mandamentos do Rei da Virtualização Tudo é virtualização? Será que eu sou virtual? O céu não é azul? Eu existo? Calma. Virtualização não é tudo. E é isso que vamos explicar neste pequeno livro. Começaremos com o básico: o que é virtualização, no primeiro capítulo. Após, discutiremos o que é um hipervisor, e os tipos de hipervisores que existem – não tenha medo dos termos, chegaremos lá aos poucos, e você certamente irá dominá-los. A seguir, revelaremos algumas das principais soluções disponíveis no mercado. Uma visão de alto nível, claro. Do capítulo quatro ao capítulo oito, as coisas esquentam. Você será capaz de entender qualquer assunto que for falado sobre virtualização, pois o mundo inteiro usa essas soluções. Tais soluções tanto podem ser proprietárias (VmWare, Hyper-V), como não (Xen, KVM, OpenVZ). Existem outras, derivadas dessas. No penúltimo capítulo, faremos um tour sobre o que o mercado está preparando para o futuro da virtualização, seja em nível de hardware, ou em nível de software, e finalmente terminaremos este pequeno livro com uma discussão sobre o que a virtualização não é, e o que ela de fato não pode fazer por uma empresa. Como acontece com muitos assuntos que despertam interesse, existe muita falácia sobre virtualização. Desmistificaremo-as. Espero que você goste. Estou à disposição para ouvir críticas ou sugestões. Novembro de 2013, Autor. Mandamento 1. Saiba o que é virtualização Neste capítulo introdutório, discutiremos sobre o conceito de virtualização. É uma discussão de alto nível, sem entrar em muitos detalhes técnicos que fariam a leitura ficar um pouco massante. Este capítulo é prerrequisito para os demais. Iniciaremos com uma explicação sobre a compatibilidade que deve existir entre a instrução e o processador, e a seguir, em forma de histórico, apontaremos a solução encontrada para a resolução do problema da incompatibilidade de sistemas escritos para uma arquitetura diversa daquela que o processador executa. Instrução e processamento Formato da instrução da arquitetura X Formato da instrução da arquitetura Y Figura 1: Formatos de diferentes tipos de instrução O principal “ator” responsável por executar os programas no computador é o microprocessador, ou, simplesmente, proces- 10 - Os Dez Mandamentos do Rei da Virtualização sador, como usaremos neste livro. E cada processador, ou melhor, cada categoria de processador fala uma linguagem específica. Imagine que os tipos de instruções podem ser representados da forma gráfica indicada: instruções da arquitetura X como um triângulo e instruções da arquitetura Y como um hexágono. Para facilitar as coisas, considere a Figura 1. Sistema operacional feito para a arquitetura X ✔ Instruções de arquitetura X Hardware da arquitetura X Sistema operacional feito para a arquitetura Y ✔ Instruções de arquitetura Y Hardware da arquitetura Y Figura 2: Envio de instrução ao processador Saiba o que é virtualização - 11 Quando dizemos arquitetura, estamos nos referindo ao formato da instrução. Um processador só entende instruções que sejam do mesmo formato, ou seja, a instrução deve ser compatível com a arquitetura do computador. Por que sistemas operacionais funcionam? Por que a forma executável dos sistemas operacionais usam instruções da mesma arquitetura do processador, conforme ilustrado nas figuras 2. Um processador fornece um conjunto de instruções que devem ser usadas pelo software; softwares são meramente “sequências de instruções que dizem ao computador o que fazer”1. ! Sistema operacional feito para a arquitetura Y ! Erro de compatibilidade Hardware da arquitetura X Figura 3: Falha na execução Um processador, portanto, não executará software (como um sistema operacional) que emita instruções diversas do tipo do processador. Um sistema operacional da arquitetura Y de forma alguma, a princípio, será executado em um processador de arquitetura X, conforme ilustrado na figura 3. 1 CARTER, Nicholas, Arquitetura de Computadores, págs. 44. Bookman, São Paulo, 2003 12 - Os Dez Mandamentos do Rei da Virtualização Na vida real É bom saber que hoje em dia existem diferentes arquitetu- Sistema Operacional x86-64 Sistema Operacional x86-64 i1 i1 i2 ✔ i3 ✔ ✔ Hardware X86-64 Sistema Operacional ARM i1 i2 ✔ ✔ i3 ! ! ! Hardware ARM S. Operacional ARM i3 Hardware ARM i2 i1 ✔ ! i2 ✔ S.O. x86-64 ! i3 ✔ ! Hardware ARM Figura 4: Quatro situações ras de computadores. Destacamos algumas: • x86: é a arquitetura clássica dos processadores de uso pessoal. Foi usado durante muito tempo pela grande maioria dos sistemas operacionais. A principal limitação desta arquitetura é não conseguir reconhecer mais que 4GB de memória RAM, o que é um problema crescente, tendo em vista Saiba o que é virtualização - 13 que os sistemas operacionais demandam, a cada dia, mais recursos computacionais, e essa limitação está se tornando um gargalo. • ia64: arquitetura de 64 bits introduzida pela Intel em 2001 2. Suporta endereçamento de memória superior aos 4GB, porém não é compatível com as instruções da popular arquitetura x86. Significa que sistemas escritos para x86 não rodam nesta arquitetura, e precisam ser reescritos (recompilados). • x86-64: também conhecida como AMD64, pois foi introduzida no mercado em 2002, pela AMD. Possui os mesmos benefícios da arquitetura IA64, e, além disso, é compatível com instruções da arquitetura x86. Isso significa que é possível executar softwares, incluindo sistemas operacionais, da arquitetura x86 nesta arquitetura, sem precisar reescrevê-los3. • ARM: famosa arquitetura usada principalmente em sistemas embarcados, caracterizada pelo bom desempenho na execução de instruções e baixo consumo de energia. Existem muitas outras arquiteturas, como por exemplo PowerPC, usada nos antigos computadores da Apple. Hoje, porém, os sistemas Mac Os X são compilados com instruções x86-644. Tomemos como exemplo um Linux qualquer. Sabe-se que existem algumas distribuições, como o Fedora, que possuem tanto versões para x86-64 quando para ARM. Temos então algumas situações possíveis que, neste ponto, você sabe quais são. Na figura 4, as quatro situações são: 1. Um sistema x86-64 sendo executado sobre um hardware compatível. 2 3 4 ALBARELLO, Renato, Arquiteturas VLIW, pág. 4. Instituto de computação, Universidade Estadual de Campinas - UNICAMP. AMD64 Architecture Programmer's Manual, Volume 1: Application Programming, pág. 1. AMD, 2013. “Apple to Use Intel Microprocessors Beginning in 2006”, disponível em http://www.apple.com/pr/library/2005/06/06Apple-to-Use-Intel-Microprocessors-Beginning-in-2006.html. Acesso: 20/11/2013, 14:03. 14 - Os Dez Mandamentos do Rei da Virtualização 2. Um sistema x86-64 não sendo executado em um processador ARM, por não ser compatível – em tese, sequer seria possível instalar este sistema neste computador. Aplicação 1 Aplicação 2 Máquina virtual Sistema operacional escrito para o computador legado Hardware virtualizado de um computador legado VM/370 (Sistema Operacional) Máquina real Hardware do System/370 Figura 5: Máquina virtual dentro de uma máquina real 3. Um sistema ARM sendo executado sobre um hardware compatível. 4. Um computador com dois sistemas operacionais, provavelmente em duas partições de disco. O sistema é que compatível com a arquitetura ARM será executado. Já o outro sistema, não, pois não é compatível. ☞ A priori, não é possível executar um software escrito para uma determinada arquitetura, em outra. Saiba o que é virtualização - 15 Como o problema foi resolvido? No passado, houve muita dor de cabeça com a questão apresentada anteriormente, a respeito da incompatibilidade entre arquiteturas. Cada novo fabricante de computadores introduzia no mercado sua arquitetura proprietária. Às vezes acontecia de um fabricante fornecer compatibilidade com equipamentos anteriores; porém, quando era necessário romper com a família anterior para avançar tecnologicamente, não era fornecida compatibilidade 5. A grande questão para os gerentes empresariais era escolher entre manter suas aplicações em sistemas ultrapassados, cada dia ficando mais lentos (pois a demanda crescia), ou migrar para um novo computador com vários novos recursos, porém totalmente incompatível com as aplicações já existentes. Algumas vezes, quando não acontecia falência das empresas, escolhia-se gastar alguma quantia pornográfica de dólares reescrevendo os softwares (inclusive de baixo nível, como o sistema operacional) para a nova arquitetura. E isso se repetia com novas empresas lançando novas arquiteturas. Então, em 1972, a IBM introduziu no mercado uma das mais bombásticas soluções para a época: o conceito de máquina virtual: o sistema operacional VM/370 para os computadores System/3706 - que, embora não fosse o primeiro de sua espécie, foi o mais popular. Era um computador, de determinada arquitetura, que simplesmente “fingia” ser outro computador, de outra arquitetura (legada). E era essa arquitetura “virtual” que era apresentada a um software mais antigo que, de outra forma, não seria executado na presente arquitetura7. 5 6 7 STALLINGS, William. Arquitetura e organização dos computadores, pág. 24. 8ª edição. São Paulo. Pearson Pratice Hall, 2010. CREASY, R. J., The Origin of the VM/370 Time-sharing System, em IBM Journal Research Development, vol. 25, nº 5, Setembro 1981, pág. 485. Este artigo mostra o aspecto de isolamento das máquinas virtuais em detrimento à compatibilidade com arquiteturas anteriores. TAKEMURA, Chris; CRAWFORD, Luke S., The Book of Xen – A practical guideline for the system administrator, pág. XX. No starch press, San Francisco, 2010. 16 - Os Dez Mandamentos do Rei da Virtualização Apl. 1 Apl. 2 Apl. 3 Apl. 4 S.O. legado S.O. 370 Hardware virtual legado Hardware virtual System/370 VM/370 (Sistema Operacional) Máquinas virtuais Máquina real Hardware do System/370 Figura 6: Várias máquinas sendo virtualizadas Parecia magia, mas era tecnologia! Um computador emulando uma arquitetura diferente da sua própria! O mais interessante era que seria possível virtualizar várias arquiteturas ao mesmo tempo, significando que não seria necessário desligar uma máquina virtual para rodar outra. ☞ Virtualização consiste na instituição de alguma camada de abstração entre o hardware real e o software alvo, de forma a possibilitar a execução de tal software, que foi escrito para uma arquitetura incompatível com a arquitetura em que está se pretendendo executar. Saiba o que é virtualização - 17 Você pode ter ficado empolgado com a ideia. E realmente, é empolgante. Mas a solução também trouxe seus próprios proble- Sistema operacional feito para a arquitetura Y ✔ Tradução de instruções Hardware virtual da arquitetura Y ✔ ✔ Hardware real da arquitetura X Figura 7: Tradução de instruções mas intrínsecos. 18 - Os Dez Mandamentos do Rei da Virtualização O custo da virtualização Virtualizar é caro. Não, não estamos falando apenas no sentido financeiro, mas também no sentido tecnológico. Observe bem a figura 7, e veja o que acontece quando qualquer instrução é emitida. Tradução, boa palavra! Esse tipo de tradução chama-se tradução binária, ou virtualização total (Full Virtualization). Cada instrução emitida pelo software à máquina virtual é convertida, isto é, traduzida, para uma instrução da máquina de destino – uma instrução que o processador real entenda8. Como existem arquiteturas discrepantes entre si, pode acontecer – e, de fato, geralmente ocorre - de uma instrução virtual ser traduzida para múltiplas instruções de máquina real. Ou várias instruções virtuais para uma só instrução real. No mínimo, é necessário que a máquina virtual recepcione inteiramente a instrução virtual, traduza-a e envie a instrução para o processador real. Há um tempo de espera aí, que não aconteceria em um ambiente não virtualizado. Observe que, na vida real, não há uma instrução isolada: existem milhares, até mesmo milhões de instruções por segundo, e, no esquema de tradução binária, cada uma das milhões de instruções precisa ser convertida. Uma por uma. E cada tradução leva um tempo. Pode ser até ínfimo, mas pense neste ínfimo multiplicado por milhões… Há um outro custo inerente: a complexidade do hardware. Observe que, nesse esquema, o hardware da máquina juntamente com o software responsável por oferecer a virtualização devem resolver os seguintes conflitos: 1. Fornecer várias máquinas virtuais ao mesmo tempo. 2. Conhecer todo o conjunto de instruções, e implementá-lo em hardware, para cada um dos tipos de máquina virtual suportável (isto é, virtualizável). 3. Proteger (isolar) os recursos de cada máquina virtual, como 8 AHUJA, Sanjay P., Full and Paravirtualization, pág. 4. Disponível em http://www.unf.edu/~sahuja/cloudcourse/Fullandparavirtualization.pdf. Acessado em: 20/11/2013, 15:18. Saiba o que é virtualização - 19 memória, acesso ao disco, e assim por diante. Pois cada software rodando sobre as máquinas virtuais pensará que o sistema é exclusivo. Cabe ao hardware solucionar estes conflitos. A solução de virtualização funcionou, e muito! Salvou a pátria na época. Mas havia os custos citados. O progresso das máquinas virtuais continuou por algum tempo. Gestores empresariais ficaram aliviados ao saberem que não seria mais necessário reescrever todas as suas aplicações quando da aquisição de um novo computador. A virtualização sai de moda A necessidade de virtualizar diminuiu quando houve alguma padronização, no mercado, do conjunto de instruções de processadores: os fabricantes lançavam computadores compatíveis com suas versões anteriores e com de outros fabricantes. A arquitetura do conjunto de instruções muitas vezes era a mesma 9. Além disso, a respeito dos sistemas operacionais: o Unix entrou em cena, e muitas organizações passaram a usá-lo. Foram introduzidas no mundo linguagens de programação de alto nível, como o C, que eram capazes de compilar (isto é, transformar um programa escrito em C em instruções de máquina) para muitas das arquiteturas existentes. Em suma: tudo ficou mais simples, e, com essa simplicidade introduzida, tornou-se mais barato – tanto em termos de custos financeiros quanto em termos de complexidade – usar ambientes não virtualizados. A ideia de virtualização permaneceu em sono profundo até acordar nos anos 2000. 9 STALLINGS, William. Arquitetura e organização dos computadores, pág. 24. 8ª edição. São Paulo. Pearson Pratice Hall, 2010. 20 - Os Dez Mandamentos do Rei da Virtualização A volta da virtualização primordialmente como mecanismo de isolamento entre sistemas operacionais Nos últimos anos 10 anos mais ou menos, a virtualização voltou com tudo, e ao que parece veio para ficar. Porém, o objetivo principal não é mais meramente fornecer compatibilidade (embora a virtualização ainda seja usada para isso), e sim, capacitar que vários sistemas operacionais, que originalmente são compatíveis com o processador real, dividam um mesmo computador físico, dando Servidor de Banco de Dados Servidor de Aplicação i1 i1 ✔ ✔ Sistema Operacional Linux x86-64 i2 i3 ✔ Hardware X86-64 Sistema Operacional openBSD x86-64 i2 ✔ i3 ✔ ✔ Hardware X86-64 Figura 8: Dois servidores com requisitos diferentes aos sistemas virtualizados a impressão de que possuem uma má- Saiba o que é virtualização - 21 quina exclusiva. Não entendeu? Vamos detalhar a explicação. Suponha que uma organização queira executar um servidor de banco de dados que roda melhor sobre Linux. Além disso, a empresa também quer rodar um servidor de aplicações web que roda de maneira mais segura sobre um outro sistema, digamos, um openBSD. Servidor de Banco de Dados i1 Servidor de Aplicação ✔ i2 Sistema Operacional Linux x86-64 i3 ✔ i4 ✔ Sistema Operacional openBSD x86-64 ✔ i5 Hardware virtual X86-64 ✔ i6 ✔ Hardware virtual X86-64 Árbitro i3 ✔ i4 ✔ i5 ✔ i6 ✔ Hardware físico X86-64 Figura 9: Virtualizando um hardware do mesmo tipo que o real Originalmente, conforme por ser visto na figura 8, esses servidores foram escritos com instruções x86-64 e obviamente são compatíveis com os processadores x86-64. Considere que, embora 22 - Os Dez Mandamentos do Rei da Virtualização a aplicação de banco de dados seja compatível com o processador, ela também precisa ser compatível com o sistema operacional, o que impede que ela execute, por exemplo, no openBSD. A princípio, não é possível executar dois sistemas operacionais ao mesmo tempo sobre um mesmo processador. Porém, como foi dito a respeito do IBM VM/370, é possível virtualizar vários processadores e entregá-los aos sistemas virtuais, dando aos sistemas virtualizados a impressão de que possuem o computador exclusivamente para si mesmos. Não é questão de vaidade, é questão de princípios: um sistema operacional, diferente de um programa comum, precisa ter acesso ao hardware do computador. E o hardware precisa estar disponível somente para o sistema operacional. O que a solução de virtualização faz é entregar “um hardware” para o sistema ficar feliz. Não sabe o sistema que o hardware não é real, mas isso pouco importa. O objetivo último (que é executar o servidor de banco de dados, por exemplo) foi alcançado. É necessário que você atente para os seguintes fatos ao olhar para a figura 9: 1. Observe que o hardware virtual entregue para os sistemas operacionais virtuais é do mesmo tipo, da mesma arquitetura, do hardware real. Então, podemos dizer que esse computador está virtualizando a si próprio. 2. Os sistemas operacionais são originalmente compatíveis com o hardware real. A virtualização, aqui, não é prerrequisito para o funcionamento dos sistemas virtuais. 3. Nem sempre as instruções precisam ser traduzidas. Observe as instruções i3, i4, i5 e i6. Elas não foram traduzidas: foram tão-somente repassadas para o processador real. Isso é lógico: não há tradução binária onde não há necessidade de tradução. Certo? Tente entender este ponto antes de passar para o próximo. 4. Esse tipo de virtualização é mais rápida do que a tradução binária. Saiba o que é virtualização - 23 5. Embora não haja tradução binária, é necessário algum tipo de controle, para que os hardwares virtuais não queiram enviar instruções ao hardware físico exatamente ao mesmo tempo. Também é necessária a arbitragem para impedir múltiplo acesso a um mesmo dispositivo de entrada/saída (disco rígido, rede, impressora). Observe, portanto, que entre os hardwares virtuais e o hardware real, há um árbitro que serve exatamente para isso. Esse árbitro, como veremos no próximo capítulo, pode ser implementado tanto no hardware real do computador, como em firmware ou software. Hoje em dia, portanto, a virtualização está tornando-se popular e está sendo usada nas organizações mais para tornar possível o cenário da figura 9, do que propriamente fornecer compatibilidade. A virtualização hoje é usada principalmente para fornecer isolamento entre múltiplos sistemas operacionais rodando simultaneamente sobre um mesmo hardware físico. Em vez de comprar vários computadores físicos para rodar diferentes aplicações, pode-se comprar um único computador físico com potência suficiente, e virtualizar os sistemas para nele serem executados. Enfim, o árbitro tem um nome oficial. Chama-se hipervisor, ou, no inglês, hypervisor. Esse é o assunto do próximo capítulo. Mandamento 2. Entenda os diferentes tipos de virtualização Você já deve ter percebido que não existe um único tipo de virtualização. Pelo menos, existem dois tipos: aquele criado pela IBM há quarenta anos, que virtualizava uma máquina inteira, e usava a tradução binária, e a virtualização atual, que está mais comprometida com o isolamento entre sistemas operacionais, e pode ou não executar a tradução binária. Nos dias de hoje, é possível classificar os ambientes da seguinte forma: • Virtualização do tipo hipervisor, ou tipo 1, ou bare-metal. • Virtualização do tipo convidado (ou guest), ou tipo 2.. • Virtualização do tipo híbrido. Virtualização do tipo hipervisor, ou tipo 1, ou bare-metal