Marllus
Marllus Cientista da computação, doutorando em educação, mestre em políticas públicas, professor, poeta, escritor, artista digital e aspirante a tudo que lhe der na telha.

PV, HVM, HVM com Drivers PV, PVHVM, PVH no XenServer (A sopa de letrinhas da virtualização)

PV, HVM, HVM com Drivers PV, PVHVM, PVH no XenServer (A sopa de letrinhas da virtualização)
Photo by Do mee

Hoje falarei sobre os termos PV, HVM e seus derivados. Sinceramente, esse assunto é meio tenso, pois, na internet vejo muita confusão sobre isso. Modos, grupos, grupos de modos, melhorias, tipos de virtualização, emulação… é uma sopa de letras e que no final só machuca a cabeça de quem tenta entender. Por isso, vou tentar (espero), da melhor forma possível, explicar pra você qual a diferença entre estes modos, suas melhorias e as vantagens e desvantagens de usar um ou outro, parafraseando o xenwiki, sem que você sofra um aneurisma! rs

Na verdade, tudo surgiu com o modo ‘Totalmente Virtualizado (Fully Virtualized – FV) na IBM em 1960′. Mas só era eficiente usá-lo nos mainframes da IBM, pois o mesmo era muito lento em arquiteturas x86.

Já em 2003, com o lançamento do projeto Xen 1.0, foi criado o modo:

PV (Paravirtualization ou OS Assisted Virtualization): Quando uma VM é executada neste modo, o seu kernel foi modificado na tentativa de proporcionar maior desempenho com utilização de hypercalls.

Hyper.. o quê?

“Simples”, por meio deste kernel modificado a VM “sabe” que está sendo virtualizada. Isto quer dizer que VMs podem realizar chamadas diretamente para o hypervisor (essa característica é conhecida como hypercalls) e isso torna o acesso ao hardware muito mais eficiente.

OBS: Essas modificações no kernel, descritas acima, geralmente são referentes ao kernel Linux. O Windows hoje não tem kernels paravirtualizados (até tentaram, em vão).

Porém, o tempo foi passando e surgiram tecnologias de hardware na tentativa de melhorar e tornar possível a “Full Virtualization – FV” na arquitetura x86. Foi pelo advento destas tecnologias que o projeto Xen, em 2005, lançou o suporte à HVM Guests, que conhecemos como o modo:

HVM (Hardware Virtual Machine – também chamado de ‘Hardware Assisted Virtualization’ e ‘Hardware Extensions to Full Virtualization’):

Neste modo, o hypervisor Xen usa o software “Qemu” para emular (via software – grande desvantagem) várias partes do host físico. Mas foi a partir das extensões HVM (criadas pela Intel e AMD e que fazem uma espécie de emulação de hardware) que foi possível “habilitar” esse modo na arquitetura x86. Essas extensões turbinam o acesso da VM à CPU do host físico, justamente onde o modo FV era mais fraco. Hoje, praticamente qualquer processador de médio porte já conta com este tipo de tecnologia (Intel VTx e AMD SVM).

Muito se vê os termos HVM e Full Virtualization como sendo iguais ou que um é a evolução do outro, mas, podemos dizer que as extensões HVM foram um meio para que fosse possível a utilização do FV na arquitetura x86.

Como praticamente toda a literatura se refere a HVM como um modo, também seguiremos a prática. Só não se engane nos conceitos.

Pois bem, a partir daqui é possível perceber que existem vantagens e desvantagens na utilização do modo PV bem como também no modo HVM. Partindo desse princípio, por que não tentar juntar o melhor dos dois mundos e gerar outras formas de virtualização?

Foi o que fizeram várias pessoas interessadas nisso. E ao longo dos anos, começaram a surgir melhorias, que tentavam utilizar a vantangem dos dois mundos, ou seja, a paravirtualização do modo PV com a extensão de virtualização que pode ser usada no modo HVM.

Dentre essas melhorias (vou chamá-las de derivados híbridos), podemos citar:

HVM com drivers PV: Modo HVM com os drivers de disco e rede paravirtualizados. Um exemplo disso, basicamente, é uma VM Windows com o XenServer tools (xentools) instalado. Este XenServer tools é um pacote de software que contém os drivers de disco e rede paravirtualizados para a VM Windows.

OBS: No caso de VM Linux, esses drivers já vêm embutidos na instalação.

PVHVM: Modo HVM com a paravirtualização dos drivers de disco e rede (xentools), controladores de interrupção e temporizadores. Um exemplo disso são as novas versões dos sistema operacionais suportados pelo XenServer 6.5 (RHEL 7, CentOS 7, Oracle Linux 7, Ubuntu 14.04). De acordo com a Citrix, todas as novas VMs instanciadas a partir destas versões serão criadas em modo HVM, pois estes sistemas operacionais suportam, nativamente, alternação da execução entre HVM e PV em determinadas tarefas.

OBS: Segundo Olivier, a versão padrão do Debian 7 (Wheezy) também é compilado com estes drivers, ou seja, se você instalá-lo como “Other media install” no XenServer 6.5, terá uma VM PVHVM.

PVH: Modo PV com a extensão de hardware em instruções privilegiadas e tabelas de páginas (ui ui ui, desculpa aê).

Esse modo com certeza é o maior refinamento do modo PV (com a junção das sempres legais extensões HVM) e talvez seja o que ficará e se perpetuará por bastante tempo em ambientes de virtualização com Hypervisor Xen. Mas, ainda não está disponível para ser testado no XenServer 6.5, só na versão do xen source 4.4 (e ainda engatinhando).

A imagem abaixo representa, no lado esquerdo, os modos existentes e suas respectivas melhorias (filhos híbridos) e no lado direito um comparativo do que cada modo e melhoria tem em comum ou que difere do outro, se tornando mais performático ou pior.

OBS: Como citado anteriormente, perceba que o Windows suporta somente os dois primeiros modos/derivados, “HVM” e “HVM com drivers PV”. Mas, por quê? Porque, para suportar a partir da melhoria “PVHVM” seria preciso a paravirtualização do APIC (Controlador Avançado de Interrupção Programável), consequentemente, seria necessário que o kernel do windows fosse recompilado com essa nova característica (reclame para a microsoft, rs).

Clique na imagem para aumentar o tamanho.

 photo PV_HVM_zps1rp5ex6l.png

A partir destes modos e suas melhorias, pode-se formular algumas perguntas:

Qual o melhor modo, PV ou HVM?

Depende. Em arquiteturas x86 o mais rápido é PV, já em x86_64, é o HVM. Isso se deve a mudanças realizadas em x86_64 pela AMD que acabaram deixando um pouco mais lenta a paravirtualização nessa arquitetura. Porém, pela preocupação com a memória extra despendida no “qemu” para a emulação da placa mãe e dispositivos PCI, muitos usuários preferem utilizar PV em VMs 64bits, mesmo que mais lento. Inclusive, a Citrix recomenda a utilização de PV (quando não há a possibilidade de PVHVM).

Como escolher o modo ou melhoria para utilizar no meu ambiente XenServer 6.5?

Deixo aqui um fluxograma para lhe ajudar na escolha dos modos/derivados híbridos para uma máquina virtual x86_64, que, segundo recomendado pelo próprio xen project, irá servir para a maioria dos casos:

Exceto as distros RHEL 7, CentOS 7, Oracle Linux 7, Ubuntu 14.04 e Debian 7 (que suportam PVHVM), e analisando o fluxograma acima, você poderá cair no modo HVM com Drivers PV, certo? Pois bem, eu, particularmente, utilizo o modo PV, mesmo em VMs (Guests) 64 bits. Apesar da rapidez adicional que eu poderia ganhar utilizando HVM, alguns fatores me levaram a adotar o PV: Recomendação da Citrix na utilização dos templates dela (PV), e vulnerabilidades importantes de segurança que afetavam somente VMs em HVM (como relatadas aqui, aqui e aqui). Isso me fez repensar a importância do uso do PV até que se tivesse um modo ou melhoria que fosse MUITO vantajoso em termos de eficiência. É o caso do aparecimento do PVHVM. A própria Citrix fala isso na documentação oficial e diz que vai começar a trabalhar com ele nos Guests que citei no início do parágrafo, apesar de não falar o nome PVHVM (creio que para não gerar um aneurisma no usuário, rs).

De forma rápida e direta (para a maioria dos casos):

Se VM GNU/Linux e BSD:

Use PVHVM, nos sistemas operacionais suportados. Caso contário, use PV.

Se VM Windows:

Use HVM com drivers PV, nos sistemas operacionais suportados. Se não, use HVM.

E o modo PVH, que é melhor? Estou aguardando poder testá-lo no XenServer. Mas, até agora só por gambiarras e ainda não é oficial, apesar de ele ter sido liberado na versão do xen 4.4, que o XenServer 6.5 incorpora.

Vamos ter que esperar um tempo até que comece a ser implementado de forma estável nas distros.

Bem, espero que tenha gostado do tutorial e da história de como surgiram os modos e suas melhorias e que saiba agora os benefícios e malefícios de cada um. O que não lhe impede de realizar testes para a comprovação destes dados (e contribuir para este tutorial).

Para mais informações, consulte as referências (espetaculares e que me ajudaram muito para a elaboração desse texto).

 

Referências

http://hostel.ufabc.edu.br/~marcelo.nascimento/BC1518Q3/arquivos/virtualizacao_cap4-v2.pdf

https://xen-orchestra.com/blog/debian-pvhvm-vs-pv/

http://wiki.xenproject.org/wiki/Understanding_the_Virtualization_Spectrum

https://blog.xenproject.org/2012/10/23/the-paravirtualization-spectrum-part-1-the-ends-of-the-spectrum/

https://blog.xenproject.org/2012/10/31/the-paravirtualization-spectrum-part-2-from-poles-to-a-spectrum/

http://xenserver.org/blog/entry/creedence-debian-7-x-and-pvhvm-testing.html

http://xenproject.org/downloads/windows-pv-drivers.html
https://wiki.xenproject.org/images/c/c2/Xen-mode-flow.png

http://www.gossamer-threads.com/lists/xen/devel/363836

http://www.brendangregg.com/blog/2014-05-07/what-color-is-your-xen.html

http://www.gta.ufrj.br/grad/09_1/versao-final/virtualizacao/xen.html

http://ovmnaveia.blogspot.com.br/2012/09/pvm-paravirtualizado-ou-hvm.html

http://www.informit.com/articles/article.aspx?p=2233978

https://pt.wikipedia.org/wiki/Advanced_Programmable_Interrupt_Controller

http://www.vmware.com/files/pdf/VMware_paravirtualization.pdf

https://en.wikipedia.org/wiki/IBM_CP-40

https://sourceforge.net/p/xen/mailman/message/5533663/

http://lwn.net/Articles/109789/

https://en.wikipedia.org/wiki/Full_virtualization

https://www-950.ibm.com/events/wwe/grp/grp019.nsf/vLookupPDFs/7%20-%20VM-45-JahreHistory-EA-J-Elliott%20%5BKompatibilit%C3%A4tsmodus%5D/$file/7%20-%20VM-45-JahreHistory-EA-J-Elliott%20%5BKompatibilit%C3%A4tsmodus%5D.pdf

http://lwn.net/Articles/52033/

https://sourceforge.net/p/xen/news/2003/10/xen-10-stable-released/
https://www.qnap.com/i/en/qa/con_show.php?op=showone&cid=258

http://wiki.xenproject.org/wiki/Linux_PVH

http://docs.vmd.citrix.com/XenServer/6.5.0/1.0/en_gb/guest.html#id533926

http://pt.slideshare.net/xen_com_mgr/performance-tuning-xen-18477250

https://xen-orchestra.com/blog/debian-pvhvm-vs-pv/

http://www.brendangregg.com/blog/2014-05-09/xen-feature-detection.html

http://wiki.xen.org/old-wiki/xenwiki/XenLinuxPVonHVMdrivers.html

 

Licença Creative Commons
Este trabalho de Marllus, está licenciado com uma Licença Creative Commons – Atribuição-CompartilhaIgual 4.0 Internacional.