virtualização e kernel, vistos por dentro

56
Virtualização e kernel, vistos por dentro Eduardo Habkost [email protected] 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

Upload: ehabkost

Post on 25-May-2015

2.680 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Virtualização e Kernel, vistos por dentro

Virtualização e kernel, vistos por dentro

Eduardo [email protected]

Tchelinux Porto Alegre 2008

Nível: AvançadoEscopo: Código e processo de desenvolvimento do kernelPré-requisitos: Noções básicas sobre o kernel Linux e seuprocesso de desenvolvimento

Page 2: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Conteúdo

1 IntroduçãoParavirtualization, full-virtualization, etc.

2 Linux-based virtualizationKVMMudanças no kernel

3 Trabalhando upstream

4 Conclusão

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 3: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Paravirtualization, full-virtualization, etc.

Conteúdo

1 IntroduçãoParavirtualization, full-virtualization, etc.

2 Linux-based virtualizationKVMMudanças no kernel

3 Trabalhando upstream

4 Conclusão

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 4: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Paravirtualization, full-virtualization, etc.

Full-virtualizationParece de verdade!

Parece uma máquina de verdadeVMWare, Qemu (com ou sem kqemu), Bochs, outrosOu com ajuda do hardware (AMD-V, Intel-VT)

Suportado pelo XenNo Linux: KVM

Performance ruim para I/OFácil para o hardware 6= fácil para o softwareOperação de I/O → pula para o host

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 5: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Paravirtualization, full-virtualization, etc.

Paravirtualização“Eu sei que é de mentira”

Kernel do guest modificadoXenlguestVMI (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

Page 6: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Paravirtualization, full-virtualization, etc.

Paravirtualized driversUm agente infiltrado

Ainda parece máquina de verdadeMas com um hardware “meio diferente”Exemplo: “device driver disk” do VMWarePara o SO, é só um hardware diferente que precisa de umdriverO driver conversa com o hypervisorO melhor dos dois mundosExemplos: Xenbus (Xen), VirtIO (genérico), drivers doVMWare

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 7: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

KVMMudanças no kernel

Conteúdo

1 IntroduçãoParavirtualization, full-virtualization, etc.

2 Linux-based virtualizationKVMMudanças no kernel

3 Trabalhando upstream

4 Conclusão

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 8: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

KVMMudanças no kernel

Linux-based virtualization

Bare metal:

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 9: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

KVMMudanças no kernel

Linux-based virtualization

Xen (teoria):

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 10: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

KVMMudanças no kernel

Linux-based virtualization

Xen (prática):

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 11: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

KVMMudanças no kernel

Linux-based virtualization

KVM:

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 12: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

KVMMudanças no kernel

Conteúdo

1 IntroduçãoParavirtualization, full-virtualization, etc.

2 Linux-based virtualizationKVMMudanças no kernel

3 Trabalhando upstream

4 Conclusão

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 13: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

KVMMudanças no kernel

KVMKernel-based Virtual Machine

Full-virtualizationPrecisa de suporte na CPUAproveita:

schedulerproteção entre processos; permissõesgerenciamento de energiadriversgerenciamento de memória

Context switches a menosKernel: 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

Page 14: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

KVMMudanças no kernel

Conteúdo

1 IntroduçãoParavirtualization, full-virtualization, etc.

2 Linux-based virtualizationKVMMudanças no kernel

3 Trabalhando upstream

4 Conclusão

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 15: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

KVMMudanças no kernel

Mudanças no kernel

KVMlguest: simples, paravirtualizaçãoparavirt_opsUnificação x86VirtIO

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 16: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

KVMMudanças no kernel

paravirt_ops

ParavirtualizaçãoAntes: recompilação do kernel do guest para suportarparavirtAgora: mesma imagem do kernel, vários guestsTruques para substituir código on-the-fly (parecido comSMP alternatives)Início: 2.6.20 (i386), lguestHoje: x86 (32 e 64-bits), ia64Usuários hoje: lguest, VMI, Xen, KVM (paravirt. drivers)

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 17: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

KVMMudanças no kernel

Unificação x86

i386, x86_64 -> x86Muito código parecido e duplicadoMuito código i386 usado silenciosamente em x86_64: fácilde cometer errosFeatures 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

Page 18: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

KVMMudanças no kernel

VirtIO

Padrão de-facto para dispositivos virtuaisABI guest ↔ hostAPI para driversDispositivos aparecem como um dispositivo PCIDrivers “comuns” (virtio-net, virtio-blk, etc.)“A” Solução de paravirtualized drivers para o KVMTambém existe esforço para suportar no Xen

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 19: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Conteúdo

1 IntroduçãoParavirtualization, full-virtualization, etc.

2 Linux-based virtualizationKVMMudanças no kernel

3 Trabalhando upstream

4 Conclusão

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 20: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Trabalhando upstream

Enviar seu código upstream dá trabalhoO kernel é um alvo móvelMas vale a pena. Senão você vai ter que escolher:

Fica preso a uma versão pré-histórica do kernel; ouTem ainda mais trabalho, podendo ser tarde demais

O Xen é um bom exemplo didático

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 21: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Trabalhando upstream

Enviar seu código upstream dá trabalhoO kernel é um alvo móvelMas vale a pena. Senão você vai ter que escolher:

Fica preso a uma versão pré-histórica do kernel; ouTem ainda mais trabalho, podendo ser tarde demais

O Xen é um bom exemplo didático

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 22: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Trabalhando upstream

Enviar seu código upstream dá trabalhoO kernel é um alvo móvelMas vale a pena. Senão você vai ter que escolher:

Fica preso a uma versão pré-histórica do kernel; ouTem ainda mais trabalho, podendo ser tarde demais

O Xen é um bom exemplo didático

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 23: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Trabalhando upstream

Enviar seu código upstream dá trabalhoO kernel é um alvo móvelMas vale a pena. Senão você vai ter que escolher:

Fica preso a uma versão pré-histórica do kernel; ouTem ainda mais trabalho, podendo ser tarde demais

O Xen é um bom exemplo didático

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 24: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Trabalhando upstream

Enviar seu código upstream dá trabalhoO kernel é um alvo móvelMas vale a pena. Senão você vai ter que escolher:

Fica preso a uma versão pré-histórica do kernel; ouTem ainda mais trabalho, podendo ser tarde demais

O Xen é um bom exemplo didático

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 25: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Trabalhando upstream

Enviar seu código upstream dá trabalhoO kernel é um alvo móvelMas vale a pena. Senão você vai ter que escolher:

Fica preso a uma versão pré-histórica do kernel; ouTem ainda mais trabalho, podendo ser tarde demais

O Xen é um bom exemplo didático

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 26: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusã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

Page 27: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Uma história sobre trabalho upstream

Não boa o suficiente para envio upstream

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 28: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Uma história sobre trabalho upstream

“E daí?”

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 29: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Uma história sobre trabalho upstream

Novo kernel: 2.6.19

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 30: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusã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

Page 31: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Uma história sobre trabalho upstream

XenSource continua usando o 2.6.18...

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 32: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Uma história sobre trabalho upstream

Novo kernel: 2.6.20

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 33: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusã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

Page 34: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Uma história sobre trabalho upstream

XenSource continua usando o 2.6.18...

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 35: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Uma história sobre trabalho upstream

Novo kernel: 2.6.21

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 36: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Uma história sobre trabalho upstream

2.6.21: Forward-port realmente complicado

paravirt_ops usado em muitos pontos do código tambémmodificados pelo patch do Xen

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 37: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Uma história sobre trabalho upstream

Novo kernel: 2.6.22

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 38: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Uma história sobre trabalho upstream

Quatro versões do kernel sem Xen oficial

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 39: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusã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

Page 40: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusã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

Page 41: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Uma história sobre trabalho upstream

2.6.23

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 42: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusã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

Page 43: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Uma história sobre trabalho upstream

E a XenSource continua tendo que manter sua árvore do2.6.18

Com correções de bugs, segurança, suporte a hardware

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 44: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusã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

Page 45: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusã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

Page 46: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Nem tudo está perdido

O trabalho para incluir todas as features do Xen do 2.6.18é grandeNinguém sabe quando isso vai estar pronto...“Emulando” o hypervisor Xen usando o KVM: Xenner

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 47: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Nem tudo está perdido

O trabalho para incluir todas as features do Xen do 2.6.18é grandeNinguém sabe quando isso vai estar pronto...“Emulando” o hypervisor Xen usando o KVM: Xenner

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 48: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Nem tudo está perdido

O trabalho para incluir todas as features do Xen do 2.6.18é grandeNinguém sabe quando isso vai estar pronto...“Emulando” o hypervisor Xen usando o KVM: Xenner

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 49: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Nem tudo está perdido

O trabalho para incluir todas as features do Xen do 2.6.18é grandeNinguém sabe quando isso vai estar pronto...“Emulando” o hypervisor Xen usando o KVM: Xenner

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 50: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Xenner

Usa /dev/kvm

Excelente candidato para usar um futuro “kvm-lite”Utiliza parte do código userspace XenMesmo que o Xen “tradicional” fique pra trás, a ABI podedemorar a morrer

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 51: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Conteúdo

1 IntroduçãoParavirtualization, full-virtualization, etc.

2 Linux-based virtualizationKVMMudanças no kernel

3 Trabalhando upstream

4 Conclusão

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 52: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Futuro

Mais paravirtualizaçãoMais performance

zero-copy I/O (disco, rede)PCI passthroughVideo: SPICE

Integração com o qemu upstreamkvm-lite?O que vai acontecer com o Xen?

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 53: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Olhando para cimaO mundo não é só feito de kernel

libvirt: API pra gerenciar VMs (Xen, KVM, outros)virt-manager: GUIoVirt: interface de gerenciamento

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 54: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusã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 RusselKernelNewbies 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

Page 55: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Perguntas?

Eduardo Habkost Virtualização e kernel, vistos por dentro

Page 56: Virtualização e Kernel, vistos por dentro

IntroduçãoLinux-based virt

UpstreamConclusão

Obrigado

Eduardo Habkost Virtualização e kernel, vistos por dentro