O documento discute virtualização no Linux, abordando diferentes técnicas como paravirtualização e full-virtualization. Ele explica como a virtualização baseada em Linux funciona com Xen e KVM, além de mudanças no kernel Linux para suporte a virtualização, como paravirt_ops e VirtIO. O documento também destaca a importância de enviar código para o upstream do kernel.
1. Virtualização e kernel, vistos por dentro
Eduardo Habkost
ehabkost@redhat.com
Tchelinux Porto Alegre 2008
Nível: Avançado
Escopo: Código e processo de desenvolvimento do kernel
Pré-requisitos: Noções básicas sobre o kernel Linux e seu
processo de desenvolvimento
2. Introdução
Linux-based virt
Upstream
Conclusão
Conteúdo
1 Introdução
Paravirtualization, full-virtualization, etc.
2 Linux-based virtualization
KVM
Mudanças no kernel
3 Trabalhando upstream
4 Conclusão
Eduardo Habkost Virtualização e kernel, vistos por dentro
3. Introdução
Linux-based virt
Paravirtualization, full-virtualization, etc.
Upstream
Conclusão
Conteúdo
1 Introdução
Paravirtualization, full-virtualization, etc.
2 Linux-based virtualization
KVM
Mudanças no kernel
3 Trabalhando upstream
4 Conclusão
Eduardo Habkost Virtualização e kernel, vistos por dentro
4. Introdução
Linux-based virt
Paravirtualization, full-virtualization, etc.
Upstream
Conclusão
Full-virtualization
Parece de verdade!
Parece uma máquina de verdade
VMWare, Qemu (com ou sem kqemu), Bochs, outros
Ou com ajuda do hardware (AMD-V, Intel-VT)
Suportado pelo Xen
No Linux: KVM
Performance ruim para I/O
Fácil para o hardware = fácil para o software
Operação de I/O → pula para o host
Eduardo Habkost Virtualização e kernel, vistos por dentro
5. Introdução
Linux-based virt
Paravirtualization, full-virtualization, etc.
Upstream
Conclusão
Paravirtualização
“Eu sei que é de mentira”
Kernel do guest modificado
Xen
lguest
VMI (VMWare)
User-mode Linux (por que não?)
Comunicação com o hypervisor através de hypercalls
Eduardo Habkost Virtualização e kernel, vistos por dentro
6. Introdução
Linux-based virt
Paravirtualization, full-virtualization, etc.
Upstream
Conclusão
Paravirtualized drivers
Um agente infiltrado
Ainda parece máquina de verdade
Mas com um hardware “meio diferente”
Exemplo: “device driver disk” do VMWare
Para o SO, é só um hardware diferente que precisa de um
driver
O driver conversa com o hypervisor
O melhor dos dois mundos
Exemplos: Xenbus (Xen), VirtIO (genérico), drivers do
VMWare
Eduardo Habkost Virtualização e kernel, vistos por dentro
7. Introdução
Linux-based virt KVM
Upstream Mudanças no kernel
Conclusão
Conteúdo
1 Introdução
Paravirtualization, full-virtualization, etc.
2 Linux-based virtualization
KVM
Mudanças no kernel
3 Trabalhando upstream
4 Conclusão
Eduardo Habkost Virtualização e kernel, vistos por dentro
8. Introdução
Linux-based virt KVM
Upstream Mudanças no kernel
Conclusão
Linux-based virtualization
Bare metal:
Eduardo Habkost Virtualização e kernel, vistos por dentro
9. Introdução
Linux-based virt KVM
Upstream Mudanças no kernel
Conclusão
Linux-based virtualization
Xen (teoria):
Eduardo Habkost Virtualização e kernel, vistos por dentro
10. Introdução
Linux-based virt KVM
Upstream Mudanças no kernel
Conclusão
Linux-based virtualization
Xen (prática):
Eduardo Habkost Virtualização e kernel, vistos por dentro
11. Introdução
Linux-based virt KVM
Upstream Mudanças no kernel
Conclusão
Linux-based virtualization
KVM:
Eduardo Habkost Virtualização e kernel, vistos por dentro
12. Introdução
Linux-based virt KVM
Upstream Mudanças no kernel
Conclusão
Conteúdo
1 Introdução
Paravirtualization, full-virtualization, etc.
2 Linux-based virtualization
KVM
Mudanças no kernel
3 Trabalhando upstream
4 Conclusão
Eduardo Habkost Virtualização e kernel, vistos por dentro
13. Introdução
Linux-based virt KVM
Upstream Mudanças no kernel
Conclusão
KVM
Kernel-based Virtual Machine
Full-virtualization
Precisa de suporte na CPU
Aproveita:
scheduler
proteção entre processos; permissões
gerenciamento de energia
drivers
gerenciamento de memória
Context switches a menos
Kernel: virtualização da CPU, exposta via /dev/kvm
Userspace (qemu modificado): I/O, UI, política
Eduardo Habkost Virtualização e kernel, vistos por dentro
14. Introdução
Linux-based virt KVM
Upstream Mudanças no kernel
Conclusão
Conteúdo
1 Introdução
Paravirtualization, full-virtualization, etc.
2 Linux-based virtualization
KVM
Mudanças no kernel
3 Trabalhando upstream
4 Conclusão
Eduardo Habkost Virtualização e kernel, vistos por dentro
15. Introdução
Linux-based virt KVM
Upstream Mudanças no kernel
Conclusão
Mudanças no kernel
KVM
lguest: simples, paravirtualização
paravirt_ops
Unificação x86
VirtIO
Eduardo Habkost Virtualização e kernel, vistos por dentro
16. Introdução
Linux-based virt KVM
Upstream Mudanças no kernel
Conclusão
paravirt_ops
Paravirtualização
Antes: recompilação do kernel do guest para suportar
paravirt
Agora: mesma imagem do kernel, vários guests
Truques para substituir código on-the-fly (parecido com
SMP alternatives)
Início: 2.6.20 (i386), lguest
Hoje: x86 (32 e 64-bits), ia64
Usuários hoje: lguest, VMI, Xen, KVM (paravirt. drivers)
Eduardo Habkost Virtualização e kernel, vistos por dentro
17. Introdução
Linux-based virt KVM
Upstream Mudanças no kernel
Conclusão
Unificação x86
i386, x86_64 -> x86
Muito código parecido e duplicado
Muito código i386 usado silenciosamente em x86_64: fácil
de cometer erros
Features novas precisavam ser “reimplementadas” (ex.:
paravirt_ops)
Ainda existem arquivos *_32.c e *_64.c a unificar
Eduardo Habkost Virtualização e kernel, vistos por dentro
18. Introdução
Linux-based virt KVM
Upstream Mudanças no kernel
Conclusão
VirtIO
Padrão de-facto para dispositivos virtuais
ABI guest ↔ host
API para drivers
Dispositivos aparecem como um dispositivo PCI
Drivers “comuns” (virtio-net, virtio-blk, etc.)
“A” Solução de paravirtualized drivers para o KVM
Também existe esforço para suportar no Xen
Eduardo Habkost Virtualização e kernel, vistos por dentro
19. Introdução
Linux-based virt
Upstream
Conclusão
Conteúdo
1 Introdução
Paravirtualization, full-virtualization, etc.
2 Linux-based virtualization
KVM
Mudanças no kernel
3 Trabalhando upstream
4 Conclusão
Eduardo Habkost Virtualização e kernel, vistos por dentro
20. Introdução
Linux-based virt
Upstream
Conclusão
Trabalhando upstream
Enviar seu código upstream dá trabalho
O kernel é um alvo móvel
Mas vale a pena. Senão você vai ter que escolher:
Fica preso a uma versão pré-histórica do kernel; ou
Tem ainda mais trabalho, podendo ser tarde demais
O Xen é um bom exemplo didático
Eduardo Habkost Virtualização e kernel, vistos por dentro
21. Introdução
Linux-based virt
Upstream
Conclusão
Trabalhando upstream
Enviar seu código upstream dá trabalho
O kernel é um alvo móvel
Mas vale a pena. Senão você vai ter que escolher:
Fica preso a uma versão pré-histórica do kernel; ou
Tem ainda mais trabalho, podendo ser tarde demais
O Xen é um bom exemplo didático
Eduardo Habkost Virtualização e kernel, vistos por dentro
22. Introdução
Linux-based virt
Upstream
Conclusão
Trabalhando upstream
Enviar seu código upstream dá trabalho
O kernel é um alvo móvel
Mas vale a pena. Senão você vai ter que escolher:
Fica preso a uma versão pré-histórica do kernel; ou
Tem ainda mais trabalho, podendo ser tarde demais
O Xen é um bom exemplo didático
Eduardo Habkost Virtualização e kernel, vistos por dentro
23. Introdução
Linux-based virt
Upstream
Conclusão
Trabalhando upstream
Enviar seu código upstream dá trabalho
O kernel é um alvo móvel
Mas vale a pena. Senão você vai ter que escolher:
Fica preso a uma versão pré-histórica do kernel; ou
Tem ainda mais trabalho, podendo ser tarde demais
O Xen é um bom exemplo didático
Eduardo Habkost Virtualização e kernel, vistos por dentro
24. Introdução
Linux-based virt
Upstream
Conclusão
Trabalhando upstream
Enviar seu código upstream dá trabalho
O kernel é um alvo móvel
Mas vale a pena. Senão você vai ter que escolher:
Fica preso a uma versão pré-histórica do kernel; ou
Tem ainda mais trabalho, podendo ser tarde demais
O Xen é um bom exemplo didático
Eduardo Habkost Virtualização e kernel, vistos por dentro
25. Introdução
Linux-based virt
Upstream
Conclusão
Trabalhando upstream
Enviar seu código upstream dá trabalho
O kernel é um alvo móvel
Mas vale a pena. Senão você vai ter que escolher:
Fica preso a uma versão pré-histórica do kernel; ou
Tem ainda mais trabalho, podendo ser tarde demais
O Xen é um bom exemplo didático
Eduardo Habkost Virtualização e kernel, vistos por dentro
26. Introdução
Linux-based virt
Upstream
Conclusão
Uma história sobre trabalho upstream
Árvore do kernel separada com suporte ao Xen, 2.6.18
Eduardo Habkost Virtualização e kernel, vistos por dentro
27. Introdução
Linux-based virt
Upstream
Conclusão
Uma história sobre trabalho upstream
Não boa o suficiente para envio upstream
Eduardo Habkost Virtualização e kernel, vistos por dentro
28. Introdução
Linux-based virt
Upstream
Conclusão
Uma história sobre trabalho upstream
“E daí?”
Eduardo Habkost Virtualização e kernel, vistos por dentro
29. Introdução
Linux-based virt
Upstream
Conclusão
Uma história sobre trabalho upstream
Novo kernel: 2.6.19
Eduardo Habkost Virtualização e kernel, vistos por dentro
30. Introdução
Linux-based virt
Upstream
Conclusão
Uma história sobre trabalho upstream
Algumas distribuições adaptam o código para o 2.6.19
É o chamado forward-port
Eduardo Habkost Virtualização e kernel, vistos por dentro
31. Introdução
Linux-based virt
Upstream
Conclusão
Uma história sobre trabalho upstream
XenSource continua usando o 2.6.18...
Eduardo Habkost Virtualização e kernel, vistos por dentro
32. Introdução
Linux-based virt
Upstream
Conclusão
Uma história sobre trabalho upstream
Novo kernel: 2.6.20
Eduardo Habkost Virtualização e kernel, vistos por dentro
33. Introdução
Linux-based virt
Upstream
Conclusão
Uma história sobre trabalho upstream
Distribuições fazem forward-port para o 2.6.20
Um pouco mais complicado: paravirt_ops começa a entrar
Eduardo Habkost Virtualização e kernel, vistos por dentro
34. Introdução
Linux-based virt
Upstream
Conclusão
Uma história sobre trabalho upstream
XenSource continua usando o 2.6.18...
Eduardo Habkost Virtualização e kernel, vistos por dentro
35. Introdução
Linux-based virt
Upstream
Conclusão
Uma história sobre trabalho upstream
Novo kernel: 2.6.21
Eduardo Habkost Virtualização e kernel, vistos por dentro
36. Introdução
Linux-based virt
Upstream
Conclusão
Uma história sobre trabalho upstream
2.6.21: Forward-port realmente complicado
paravirt_ops usado em muitos pontos do código também
modificados pelo patch do Xen
Eduardo Habkost Virtualização e kernel, vistos por dentro
37. Introdução
Linux-based virt
Upstream
Conclusão
Uma história sobre trabalho upstream
Novo kernel: 2.6.22
Eduardo Habkost Virtualização e kernel, vistos por dentro
38. Introdução
Linux-based virt
Upstream
Conclusão
Uma história sobre trabalho upstream
Quatro versões do kernel sem Xen oficial
Eduardo Habkost Virtualização e kernel, vistos por dentro
39. Introdução
Linux-based virt
Upstream
Conclusão
Uma história sobre trabalho upstream
E a XenSource ainda no kernel 2.6.18
Eduardo Habkost Virtualização e kernel, vistos por dentro
40. Introdução
Linux-based virt
Upstream
Conclusão
Uma história sobre trabalho upstream
Nem todo mundo chega a portar para 2.6.22
Eduardo Habkost Virtualização e kernel, vistos por dentro
41. Introdução
Linux-based virt
Upstream
Conclusão
Uma história sobre trabalho upstream
2.6.23
Eduardo Habkost Virtualização e kernel, vistos por dentro
42. Introdução
Linux-based virt
Upstream
Conclusão
Uma história sobre trabalho upstream
Forward-port mostra-se um trabalho sem fim
Tem que ter alguma outra solução
Eduardo Habkost Virtualização e kernel, vistos por dentro
43. Introdução
Linux-based virt
Upstream
Conclusão
Uma história sobre trabalho upstream
E a XenSource continua tendo que manter sua árvore do
2.6.18
Com correções de bugs, segurança, suporte a hardware
Eduardo Habkost Virtualização e kernel, vistos por dentro
44. Introdução
Linux-based virt
Upstream
Conclusão
Nem tudo está perdido
A partir do 2.6.26, algum suporte para o Xen entrou
Eduardo Habkost Virtualização e kernel, vistos por dentro
45. Introdução
Linux-based virt
Upstream
Conclusão
Nem tudo está perdido
2.6.27 está um pouco melhor
Mas ainda falta muita coisa
Eduardo Habkost Virtualização e kernel, vistos por dentro
46. Introdução
Linux-based virt
Upstream
Conclusão
Nem tudo está perdido
O trabalho para incluir todas as features do Xen do 2.6.18
é grande
Ninguém sabe quando isso vai estar pronto...
“Emulando” o hypervisor Xen usando o KVM: Xenner
Eduardo Habkost Virtualização e kernel, vistos por dentro
47. Introdução
Linux-based virt
Upstream
Conclusão
Nem tudo está perdido
O trabalho para incluir todas as features do Xen do 2.6.18
é grande
Ninguém sabe quando isso vai estar pronto...
“Emulando” o hypervisor Xen usando o KVM: Xenner
Eduardo Habkost Virtualização e kernel, vistos por dentro
48. Introdução
Linux-based virt
Upstream
Conclusão
Nem tudo está perdido
O trabalho para incluir todas as features do Xen do 2.6.18
é grande
Ninguém sabe quando isso vai estar pronto...
“Emulando” o hypervisor Xen usando o KVM: Xenner
Eduardo Habkost Virtualização e kernel, vistos por dentro
49. Introdução
Linux-based virt
Upstream
Conclusão
Nem tudo está perdido
O trabalho para incluir todas as features do Xen do 2.6.18
é grande
Ninguém sabe quando isso vai estar pronto...
“Emulando” o hypervisor Xen usando o KVM: Xenner
Eduardo Habkost Virtualização e kernel, vistos por dentro
50. Introdução
Linux-based virt
Upstream
Conclusão
Xenner
Usa /dev/kvm
Excelente candidato para usar um futuro “kvm-lite”
Utiliza parte do código userspace Xen
Mesmo que o Xen “tradicional” fique pra trás, a ABI pode
demorar a morrer
Eduardo Habkost Virtualização e kernel, vistos por dentro
51. Introdução
Linux-based virt
Upstream
Conclusão
Conteúdo
1 Introdução
Paravirtualization, full-virtualization, etc.
2 Linux-based virtualization
KVM
Mudanças no kernel
3 Trabalhando upstream
4 Conclusão
Eduardo Habkost Virtualização e kernel, vistos por dentro
52. Introdução
Linux-based virt
Upstream
Conclusão
Futuro
Mais paravirtualização
Mais performance
zero-copy I/O (disco, rede)
PCI passthrough
Video: SPICE
Integração com o qemu upstream
kvm-lite?
O que vai acontecer com o Xen?
Eduardo Habkost Virtualização e kernel, vistos por dentro
53. Introdução
Linux-based virt
Upstream
Conclusão
Olhando para cima
O mundo não é só feito de kernel
libvirt: API pra gerenciar VMs (Xen, KVM, outros)
virt-manager: GUI
oVirt: interface de gerenciamento
Eduardo Habkost Virtualização e kernel, vistos por dentro
54. Introdução
Linux-based virt
Upstream
Conclusão
Referências
Esta apresentação:
http://raisama.net/talks/virt-2008/
“virtio: towards a de-facto standard for virtual I/O devices”,
by Rusty Russel
KernelNewbies Virtualization Wiki:
http://virt.kernelnewbies.org/
KVM: http://kvm.qumranet.com/
lguest: http://lguest.ozlabs.org/
Xenner:
http://kraxel.fedorapeople.org/xenner/
Unificação x86:
http://www.glommer.net/blogs/?p=265
Eduardo Habkost Virtualização e kernel, vistos por dentro
55. Introdução
Linux-based virt
Upstream
Conclusão
Perguntas?
Eduardo Habkost Virtualização e kernel, vistos por dentro
56. Introdução
Linux-based virt
Upstream
Conclusão
Obrigado
Eduardo Habkost Virtualização e kernel, vistos por dentro