Você está na página 1de 56

Virtualizao e kernel, vistos por dentro

Eduardo Habkost ehabkost@redhat.com

Tchelinux Porto Alegre 2008

Nvel: Avanado Escopo: Cdigo e processo de desenvolvimento do kernel Pr-requisitos: Noes bsicas sobre o kernel Linux e seu processo de desenvolvimento

Introduo Linux-based virt Upstream Concluso

Contedo

Introduo Paravirtualization, full-virtualization, etc. Linux-based virtualization KVM Mudanas no kernel Trabalhando upstream Concluso

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Paravirtualization, full-virtualization, etc.

Contedo

Introduo Paravirtualization, full-virtualization, etc. Linux-based virtualization KVM Mudanas no kernel Trabalhando upstream Concluso

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Paravirtualization, full-virtualization, etc.

Full-virtualization
Parece de verdade!

Parece uma mquina 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


Fcil para o hardware = fcil para o software Operao de I/O pula para o host

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Paravirtualization, full-virtualization, etc.

Paravirtualizao
Eu sei que de mentira

Kernel do guest modicado Xen lguest VMI (VMWare) User-mode Linux (por que no?) Comunicao com o hypervisor atravs de hypercalls

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Paravirtualization, full-virtualization, etc.

Paravirtualized drivers
Um agente inltrado

Ainda parece mquina 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 (genrico), drivers do VMWare

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

KVM Mudanas no kernel

Contedo

Introduo Paravirtualization, full-virtualization, etc. Linux-based virtualization KVM Mudanas no kernel Trabalhando upstream Concluso

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

KVM Mudanas no kernel

Linux-based virtualization

Bare metal:

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

KVM Mudanas no kernel

Linux-based virtualization

Xen (teoria):

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

KVM Mudanas no kernel

Linux-based virtualization

Xen (prtica):

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

KVM Mudanas no kernel

Linux-based virtualization

KVM:

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

KVM Mudanas no kernel

Contedo

Introduo Paravirtualization, full-virtualization, etc. Linux-based virtualization KVM Mudanas no kernel Trabalhando upstream Concluso

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

KVM Mudanas no kernel

KVM
Kernel-based Virtual Machine

Full-virtualization Precisa de suporte na CPU Aproveita:


scheduler proteo entre processos; permisses gerenciamento de energia drivers gerenciamento de memria

Context switches a menos Kernel: virtualizao da CPU, exposta via /dev/kvm Userspace (qemu modicado): I/O, UI, poltica
Eduardo Habkost Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

KVM Mudanas no kernel

Contedo

Introduo Paravirtualization, full-virtualization, etc. Linux-based virtualization KVM Mudanas no kernel Trabalhando upstream Concluso

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

KVM Mudanas no kernel

Mudanas no kernel

KVM lguest: simples, paravirtualizao paravirt_ops Unicao x86 VirtIO

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

KVM Mudanas no kernel

paravirt_ops

Paravirtualizao Antes: recompilao do kernel do guest para suportar paravirt Agora: mesma imagem do kernel, vrios guests Truques para substituir cdigo on-the-y (parecido com SMP alternatives) Incio: 2.6.20 (i386), lguest Hoje: x86 (32 e 64-bits), ia64 Usurios hoje: lguest, VMI, Xen, KVM (paravirt. drivers)

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

KVM Mudanas no kernel

Unicao x86

i386, x86_64 -> x86 Muito cdigo parecido e duplicado Muito cdigo i386 usado silenciosamente em x86_64: fcil de cometer erros Features novas precisavam ser reimplementadas (ex.: paravirt_ops) Ainda existem arquivos *_32.c e *_64.c a unicar

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

KVM Mudanas no kernel

VirtIO

Padro 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 Soluo de paravirtualized drivers para o KVM Tambm existe esforo para suportar no Xen

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Contedo

Introduo Paravirtualization, full-virtualization, etc. Linux-based virtualization KVM Mudanas no kernel Trabalhando upstream Concluso

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Trabalhando upstream

Enviar seu cdigo upstream d trabalho O kernel um alvo mvel Mas vale a pena. Seno voc vai ter que escolher:
Fica preso a uma verso pr-histrica do kernel; ou Tem ainda mais trabalho, podendo ser tarde demais

O Xen um bom exemplo didtico

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Trabalhando upstream

Enviar seu cdigo upstream d trabalho O kernel um alvo mvel Mas vale a pena. Seno voc vai ter que escolher:
Fica preso a uma verso pr-histrica do kernel; ou Tem ainda mais trabalho, podendo ser tarde demais

O Xen um bom exemplo didtico

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Trabalhando upstream

Enviar seu cdigo upstream d trabalho O kernel um alvo mvel Mas vale a pena. Seno voc vai ter que escolher:
Fica preso a uma verso pr-histrica do kernel; ou Tem ainda mais trabalho, podendo ser tarde demais

O Xen um bom exemplo didtico

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Trabalhando upstream

Enviar seu cdigo upstream d trabalho O kernel um alvo mvel Mas vale a pena. Seno voc vai ter que escolher:
Fica preso a uma verso pr-histrica do kernel; ou Tem ainda mais trabalho, podendo ser tarde demais

O Xen um bom exemplo didtico

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Trabalhando upstream

Enviar seu cdigo upstream d trabalho O kernel um alvo mvel Mas vale a pena. Seno voc vai ter que escolher:
Fica preso a uma verso pr-histrica do kernel; ou Tem ainda mais trabalho, podendo ser tarde demais

O Xen um bom exemplo didtico

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Trabalhando upstream

Enviar seu cdigo upstream d trabalho O kernel um alvo mvel Mas vale a pena. Seno voc vai ter que escolher:
Fica preso a uma verso pr-histrica do kernel; ou Tem ainda mais trabalho, podendo ser tarde demais

O Xen um bom exemplo didtico

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Uma histria sobre trabalho upstream


rvore do kernel separada com suporte ao Xen, 2.6.18

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Uma histria sobre trabalho upstream


No boa o suciente para envio upstream

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Uma histria sobre trabalho upstream


E da?

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Uma histria sobre trabalho upstream


Novo kernel: 2.6.19

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Uma histria sobre trabalho upstream


Algumas distribuies adaptam o cdigo para o 2.6.19

o chamado forward-port

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Uma histria sobre trabalho upstream


XenSource continua usando o 2.6.18...

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Uma histria sobre trabalho upstream


Novo kernel: 2.6.20

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Uma histria sobre trabalho upstream


Distribuies fazem forward-port para o 2.6.20

Um pouco mais complicado: paravirt_ops comea a entrar


Eduardo Habkost Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Uma histria sobre trabalho upstream


XenSource continua usando o 2.6.18...

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Uma histria sobre trabalho upstream


Novo kernel: 2.6.21

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Uma histria sobre trabalho upstream


2.6.21: Forward-port realmente complicado

paravirt_ops usado em muitos pontos do cdigo tambm modicados pelo patch do Xen
Eduardo Habkost Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Uma histria sobre trabalho upstream


Novo kernel: 2.6.22

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Uma histria sobre trabalho upstream


Quatro verses do kernel sem Xen ocial

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Uma histria sobre trabalho upstream


E a XenSource ainda no kernel 2.6.18

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Uma histria sobre trabalho upstream


Nem todo mundo chega a portar para 2.6.22

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Uma histria sobre trabalho upstream


2.6.23

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Uma histria sobre trabalho upstream


Forward-port mostra-se um trabalho sem m

Tem que ter alguma outra soluo


Eduardo Habkost Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Uma histria sobre trabalho upstream


E a XenSource continua tendo que manter sua rvore do 2.6.18

Com correes de bugs, segurana, suporte a hardware


Eduardo Habkost Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Nem tudo est perdido


A partir do 2.6.26, algum suporte para o Xen entrou

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Nem tudo est perdido


2.6.27 est um pouco melhor

Mas ainda falta muita coisa


Eduardo Habkost Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Nem tudo est perdido

O trabalho para incluir todas as features do Xen do 2.6.18 grande Ningum sabe quando isso vai estar pronto... Emulando o hypervisor Xen usando o KVM: Xenner

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Nem tudo est perdido

O trabalho para incluir todas as features do Xen do 2.6.18 grande Ningum sabe quando isso vai estar pronto... Emulando o hypervisor Xen usando o KVM: Xenner

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Nem tudo est perdido

O trabalho para incluir todas as features do Xen do 2.6.18 grande Ningum sabe quando isso vai estar pronto... Emulando o hypervisor Xen usando o KVM: Xenner

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Nem tudo est perdido

O trabalho para incluir todas as features do Xen do 2.6.18 grande Ningum sabe quando isso vai estar pronto... Emulando o hypervisor Xen usando o KVM: Xenner

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Xenner

Usa /dev/kvm Excelente candidato para usar um futuro kvm-lite Utiliza parte do cdigo userspace Xen Mesmo que o Xen tradicional que pra trs, a ABI pode demorar a morrer

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Contedo

Introduo Paravirtualization, full-virtualization, etc. Linux-based virtualization KVM Mudanas no kernel Trabalhando upstream Concluso

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Futuro

Mais paravirtualizao Mais performance


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

Integrao com o qemu upstream kvm-lite? O que vai acontecer com o Xen?

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Olhando para cima


O mundo no s feito de kernel

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

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Referncias
Esta apresentao: 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/ Unicao x86: http://www.glommer.net/blogs/?p=265
Eduardo Habkost Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Perguntas?

Eduardo Habkost

Virtualizao e kernel, vistos por dentro

Introduo Linux-based virt Upstream Concluso

Obrigado

Eduardo Habkost

Virtualizao e kernel, vistos por dentro