SlideShare a Scribd company logo
Linux KVM - wparcie dla wirtualizacji w
kontekście serwerów ARM
Plan
● Terminologia i koncepcja wirtualizacji
● QEMU
● Czym jest KVM ?
● Architektura ARMv8 i wsparcie dla wirtualizacji
○ poziomy uprzywilejowania
○ dodatkowy tryb pracy CPU
○ podwójna translacja MMU
○ wirtualny kontroler przerwań i timer
● Emulacja I/O
○ wirtualizacja
○ parawirtualizacja
○ VHOST
Terminologia
Wirtualizacja - technika pozwalająca na jednoczesne uruchamianie wielu systemów
operacyjnych na tej samej platformie sprzętowej
Hipernadzorca (ang. hypervisor) - kawałek kodu realizujący powyższe założenia i
zarządzający zasobami sprzętowymi
Host OS - system operacyjny na którym działa hipernadzorca
Guest OS - system operacyjny który działa na wirtualnej maszynie
QEMU (ang. Quick Emulator) - szybki emulator różnych architektur oraz urządzeń I/O +
interfejs użytkownika do uruchamiania i konfiguracji maszyny wirtualnej
Koncepcja hypervisor’a i co ma do tego KVM ?
Brak
wirtualizacji -
jeden OS
Hypervisor - dodatkowy
warstwa zarządzająca
sprzętem
QEMU + KVM jako
implementacja hypervisora
HypervisorOS kernel
App App
Hardware
OS kernel
App App
Hardware Hardware
Linux kernel KVM
QEMU
OS kernel
App App
OS kernel
App App
QEMU
OS kernel
App App
App
QEMU
● wykorzystuje KVM jako akcelerator
(wirtualizacja natywnej architektury)
● może działać autonomicznie (bez KVM)
● odpowiedzialny za interakcję z KVM
○ vm_fd = open(“/dev/kvm”);
○ ioctl(vm_fd, ...);
QEMU process == VM
host kernel
User space
KVM
Kernel space
Hardware
○ mmap() pamięci RAM wirtualnej maszyny
○ emulacja urządzeń I/O (wirtualizacja i
parawirtualizacja)
● qemu -name <vm_name> -machine virt,accel=kvm
-cpu <cpu_type> -m <RAM_size> -smp <cpu_nr> ...
Guest OS
I/O
emulation
ioctl()
QEMU Process
Czym jest KVM (Kernel-based Virtual Machine) ?
● kvm.ko moduł kernela, który
wykorzystuje dostępne i stabilne
podsystemy kernela
○ MMU
○ synchronizacja
○ scheduling
○ przerwania itd
● zarządza zasobami sprzętowymi
● wymaga sprzętowego wsparcia
● zmienia kontekst procesora
host/guest tzw. world switch
Guest OS
I/O emulation
host kernel
User space
Kernel space
KVM
Hardware
Czym jest KVM ? c.d.
● zapewnia obsługę wyjątków wirtualnej maszyny (trap) tj.:
○ przerwania
○ dostęp do rejestrów
○ I/O
● udostępnia urządzenie /dev/kvm, za pomocą którego możliwe jest poznanie
dostępnych urządzeń/funkcjonalności i ich konfiguracja np.:
○ typ kontrolera przerwań
○ ilość procesorów (SMP)
● współpracuje z emulatorami np. QEMU, kvmtool
○ emulacja pozostałych rzeczy np. dostęp do dysku virtio-blk
ARMv8 poziomy uprzywilejowania
Powodem zmiany EL może być:
● przerwanie, page faults
● instrukcja SVC (przejście do EL1)
● instrukcja HVC (przejście do EL2)
● instrukcja SMC (przejście do EL3)
● ERET (przejście poziom niżej)
EL - Exception Level
ARMv8 poziomy uprzywilejowania c.d.
KVM i architektura ARMv8.0
Guest
Userspace
Guest Kernel
Guest
Userspace
Hypervisor
Guest Kernel
Host Userspace
Linux host kernel Guest Kernel
Guest
Userspace
Switching code
KVM
KVM i architektura ARMv8 c.d.
● Poziom EL2 ma tylko jeden bazowy
rejestr tablicy translacji TTBR1_EL2
● Wymagane ogromne zmiany żeby
uruchomić kernel na EL2
● EL2 zawiera mały “kawałek” kodu
zmieniające kontekst host - guest tzw.
“world switch”
KVM i architektura ARMv8.1 (VHE)
Host Userspace
Linux host kernel
Guest Kernel
Guest
Userspace
KVM
Rozszerzenie dla wirtualizacji:
● wsparcie dla TTBR0_EL2 i
TTBR1_EL2 !!!
● host kernel może pracować na
EL2
● host kernel nie musi przechodzić z
EL2 do EL1
● zmiana kontekstu na tym samym
poziomie EL2
● modyfikacja kernela VM ?
● emulacja wybranych instrukcji ?
Jak zwirtualizować CPU (tzw. vCPU) ?
● emulacja?
○ procesor wchodzi w tryb guest i działa w
trybie natywnym
○ wychodzi do trybu host gdy potrzebuje
pomocy
○ każdy vCPU może być osobnym wątkiem
● użycie nowego trybu CPU - guest
** Wymaga od procesora wsparcia dla wirtualizacji
(Intel VT-x, ARM’s Virt. extensions) !!!
Start
Enter
Guest
Guest execution
Handle reason
(kern. mode)
Exit to Hyp
for some reason
Handle reason
(user. mode)
Jak zwirtualizować CPU (tzw. vCPU) ? c.d.
QEMU process
host kernel
User space
KVM
Exception handling
vCPU
pthread 0
exit enter
I/O
emulation
● vCPU to wątek
● możemy użyć taskset,
numactl, ps...
vCPU
pthread 1
exit enter
I/O
emulation
exit enter
Kernel space
Jak zwirtualizować CPU (tzw. vCPU) ? c.d.
Host Userspace
Linux host kernel
Guest Kernel
Guest
Userspace
Switching code
KVM
QEMU
ioctl(KVM_RUN)
enter/exit
While no
heavy exit -
or-
no error
Exit to QEMU
1. Heavy Exit - MMIO
2. Runtime KVM error
Set exit reason
KVM interrupted
Enable interrupts
Check pend interrupts,
timers. Update & inject
into guest
Disable interrupts
About to enter Guest
Check for
pending
signals
Enter guest, this is where
you world switch - Enter/
and return on Exit here
Enable Interrupts
Host interrupts happen
here
Update vCPU/KVM with
Guest HW state
Handle Exit could be
- 2nd stage MMU fault
- Hype call
- System reg access…
- KVM error can’t decode
Return from QEMU with updated CPU state
Jak zwirtualizować CPU (tzw. vCPU) ? c.d.
Konkluzje:
● narzut na wirtualizację to czas
kiedy CPU spędza w trybie host i
obsługuje wyjątki
● im mniej wychodzimy do
hypervisora tym lepiej
● wyjście do userspace’u (tzw.
heavy exit) jest najgorszym z
możliwych scenariuszy jeżeli
chodzi o wydajność
Guest Mode
KVM
HYP
KVM
HYP
KVM
Host
KVM
Host
QEMU
Run vCPU
QEMU
Exit Handle
Ultra-light
Exit
Light-weight
Exit
Guest enter Guest exit
Heavy Exit
MMU - pojedyncza translacja
MMU - podwójna translacja
Kontroler przerwań (VGIC)
Kontroler przerwań (VGIC) c.d.
● przerwania nadal są obsługiwane
przez kernel host
● dostęp do rejestrów i/f CPU nie
powodują wyjątku
● dostęp do rejestrów dystrybutora
nadal powoduje wyjątek (in-kernel
emulation)
● host jest w stanie wygenerować
przerwanie programując wirtualny i/f
CPU
● przerwanie jest generowane s/w na
żądanie emulowanego urządzenia I/O
QEMU process
host kernel
User space
KVM
Exception handling
vCPU
pthread 0
exit enter
VGIC
I/O
emulation
exit enter
Kernel space
reg 1
reg 0
reg 2
Dist. regs
VTimer
● operacje na rejestrach timera są krytyczne dla wydajności
● fizyczny timer dostępny tylko dla hosta
● wirtualny timer (vtimer) przeznaczony dla VM
● dostęp do rejestrów vtimera nie powoduje wyjątków : )
○ przerwanie vtimera nadal powoduje wyjątek i world
switch
○ optymalizacja - KVM sprawdza rejestry vtimera i
wstrzykuje przerwanie do VM
● wciąż potrzebna emulacja vtimera w kernelu : (
VTimer c.d.
QEMU process
host kernel
User space
KVM
Exception handling
vCPU
pthread 0
exit enter
VGIC
I/O
emulation
exit enter
Kernel space
IRQ injection
VTimer
QEMU process
Emulacja I/O - pełna wirtualizacja
Guest kernel
host kernel
User space
Kernel space
KVM
MMIO MMIO
e1000
IRQ
I/O emulation
e1000
machine state
IRQFD
TAP dev
reg 1
reg 0
reg 3
reg 2
RX/TX
● istniejący sterownik
● kompatybilność wstecz
● każdy zapis/odczyt rejestru
to trap i wyjście do
userspace-u
● skomplikowana maszyna
stanu w QEMU
● IRQFD
QEMU process
I/O emulation
Virtio - parawirtualizacja
● typowy sterownik dla VM
● konieczne wsparcie dla
VIRTIO w kernelu
● protokół zaprojektowany dla
potrzeb wirtualizacji
● vring - współdzielona pamięć
● eventfd - komunikacja w dwie
strony
● prostsza implementacja niż
emulacja zachowania HW
Guest kernel
virtio-net virtio-net
virtio-defined protocol
virtio-defined
registers
vring
host kernel
KVM TAP dev
MMIO MMIOIRQ EVENTFD RX/TX
User space
Kernel space
QEMU process
MMIO
VHOST
● QEMU jako funkcja kontrolna
● QEMU przekierowuje data plane
● przepływ pakietów VM<->kernel
● pomijamy warstwę QEMU<-
>TAP
● qemu -netdev type=tap,id=net0,vhost=on -device
virtio-net-pci,netdev=net0
Guest kernel
host kernel
KVM
I/O emulation
virtio-net vhost-net
control plane
/dev/vhost-net
virtio-defined
registers
TAP dev
vhost-net
EVENTFD
VRING User space
Kernel space
IRQ MMIO ioctl
Q/A
Dziękuję za uwagę
Pytania ?
Kontakt: Tomasz Nowicki
tn@semihalf.com

More Related Content

More from Semihalf

Uwaga na buga! GDB w służbie programisty. Barcamp Semihalf S09:E01
Uwaga na buga! GDB w służbie programisty.  Barcamp Semihalf S09:E01Uwaga na buga! GDB w służbie programisty.  Barcamp Semihalf S09:E01
Uwaga na buga! GDB w służbie programisty. Barcamp Semihalf S09:E01
Semihalf
 
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018
Semihalf
 
Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018
Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018
Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018
Semihalf
 
Programuj wbrew regułom - Bug Legends Quiz Show. Semihalf Barcamp 25/04/2018
Programuj wbrew regułom - Bug Legends Quiz Show. Semihalf Barcamp 25/04/2018Programuj wbrew regułom - Bug Legends Quiz Show. Semihalf Barcamp 25/04/2018
Programuj wbrew regułom - Bug Legends Quiz Show. Semihalf Barcamp 25/04/2018
Semihalf
 
CPU GHOST BUSTING. Semihalf Barcamp Special.
CPU GHOST BUSTING. Semihalf Barcamp Special. CPU GHOST BUSTING. Semihalf Barcamp Special.
CPU GHOST BUSTING. Semihalf Barcamp Special.
Semihalf
 
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKZłam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
Semihalf
 
Wirtualizacja urządzeń PCI (SR-IOV).
Wirtualizacja urządzeń PCI (SR-IOV).Wirtualizacja urządzeń PCI (SR-IOV).
Wirtualizacja urządzeń PCI (SR-IOV).
Semihalf
 
Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.
Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.
Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.
Semihalf
 
Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.
Semihalf
 
Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.
Semihalf
 
Architektura mikrokontrolera pisana słowem.
Architektura mikrokontrolera pisana słowem.Architektura mikrokontrolera pisana słowem.
Architektura mikrokontrolera pisana słowem.
Semihalf
 
Bootloadery i programy bare metal.
Bootloadery i programy bare metal.Bootloadery i programy bare metal.
Bootloadery i programy bare metal.
Semihalf
 
Jak napisać własny RTOS!
Jak napisać własny RTOS!Jak napisać własny RTOS!
Jak napisać własny RTOS!
Semihalf
 
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
Semihalf
 
Czym są heterogeniczne systemy mikroprocesorowe?
Czym są heterogeniczne systemy mikroprocesorowe?Czym są heterogeniczne systemy mikroprocesorowe?
Czym są heterogeniczne systemy mikroprocesorowe?
Semihalf
 
SmartNIC - wprowadzenie do inteligentnych interfejsów sieciowych.
SmartNIC - wprowadzenie do inteligentnych interfejsów sieciowych.SmartNIC - wprowadzenie do inteligentnych interfejsów sieciowych.
SmartNIC - wprowadzenie do inteligentnych interfejsów sieciowych.
Semihalf
 
Stosy sieciowe w przestrzeni użytkownika.
Stosy sieciowe w przestrzeni użytkownika.Stosy sieciowe w przestrzeni użytkownika.
Stosy sieciowe w przestrzeni użytkownika.
Semihalf
 
Wirtualizacja sieci na przykładzie OpenContrail vRouter.
Wirtualizacja sieci na przykładzie OpenContrail vRouter.Wirtualizacja sieci na przykładzie OpenContrail vRouter.
Wirtualizacja sieci na przykładzie OpenContrail vRouter.
Semihalf
 
DTrace, czyli jak zobaczyć to czego nie widać.
DTrace, czyli jak zobaczyć to czego nie widać.DTrace, czyli jak zobaczyć to czego nie widać.
DTrace, czyli jak zobaczyć to czego nie widać.
Semihalf
 
Efekt motyla w kodzie maszynowym.
Efekt motyla w kodzie maszynowym.Efekt motyla w kodzie maszynowym.
Efekt motyla w kodzie maszynowym.
Semihalf
 

More from Semihalf (20)

Uwaga na buga! GDB w służbie programisty. Barcamp Semihalf S09:E01
Uwaga na buga! GDB w służbie programisty.  Barcamp Semihalf S09:E01Uwaga na buga! GDB w służbie programisty.  Barcamp Semihalf S09:E01
Uwaga na buga! GDB w służbie programisty. Barcamp Semihalf S09:E01
 
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018
Oczyszczacz powietrza i stos sieciowy? Czas na test! Semihalf Barcamp 13/06/2018
 
Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018
Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018
Programuj wbrew regułom. Barcamp Semihalf S08:E02 29/05/2018
 
Programuj wbrew regułom - Bug Legends Quiz Show. Semihalf Barcamp 25/04/2018
Programuj wbrew regułom - Bug Legends Quiz Show. Semihalf Barcamp 25/04/2018Programuj wbrew regułom - Bug Legends Quiz Show. Semihalf Barcamp 25/04/2018
Programuj wbrew regułom - Bug Legends Quiz Show. Semihalf Barcamp 25/04/2018
 
CPU GHOST BUSTING. Semihalf Barcamp Special.
CPU GHOST BUSTING. Semihalf Barcamp Special. CPU GHOST BUSTING. Semihalf Barcamp Special.
CPU GHOST BUSTING. Semihalf Barcamp Special.
 
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKZłam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
 
Wirtualizacja urządzeń PCI (SR-IOV).
Wirtualizacja urządzeń PCI (SR-IOV).Wirtualizacja urządzeń PCI (SR-IOV).
Wirtualizacja urządzeń PCI (SR-IOV).
 
Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.
Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.
Software Defined Networks (SDN) na przykładzie rozwiązania OpenContrail.
 
Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.
 
Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.
 
Architektura mikrokontrolera pisana słowem.
Architektura mikrokontrolera pisana słowem.Architektura mikrokontrolera pisana słowem.
Architektura mikrokontrolera pisana słowem.
 
Bootloadery i programy bare metal.
Bootloadery i programy bare metal.Bootloadery i programy bare metal.
Bootloadery i programy bare metal.
 
Jak napisać własny RTOS!
Jak napisać własny RTOS!Jak napisać własny RTOS!
Jak napisać własny RTOS!
 
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
Masz wiadomość! Komunikacja wieloprocesorowa w praktyce.
 
Czym są heterogeniczne systemy mikroprocesorowe?
Czym są heterogeniczne systemy mikroprocesorowe?Czym są heterogeniczne systemy mikroprocesorowe?
Czym są heterogeniczne systemy mikroprocesorowe?
 
SmartNIC - wprowadzenie do inteligentnych interfejsów sieciowych.
SmartNIC - wprowadzenie do inteligentnych interfejsów sieciowych.SmartNIC - wprowadzenie do inteligentnych interfejsów sieciowych.
SmartNIC - wprowadzenie do inteligentnych interfejsów sieciowych.
 
Stosy sieciowe w przestrzeni użytkownika.
Stosy sieciowe w przestrzeni użytkownika.Stosy sieciowe w przestrzeni użytkownika.
Stosy sieciowe w przestrzeni użytkownika.
 
Wirtualizacja sieci na przykładzie OpenContrail vRouter.
Wirtualizacja sieci na przykładzie OpenContrail vRouter.Wirtualizacja sieci na przykładzie OpenContrail vRouter.
Wirtualizacja sieci na przykładzie OpenContrail vRouter.
 
DTrace, czyli jak zobaczyć to czego nie widać.
DTrace, czyli jak zobaczyć to czego nie widać.DTrace, czyli jak zobaczyć to czego nie widać.
DTrace, czyli jak zobaczyć to czego nie widać.
 
Efekt motyla w kodzie maszynowym.
Efekt motyla w kodzie maszynowym.Efekt motyla w kodzie maszynowym.
Efekt motyla w kodzie maszynowym.
 

Linux KVM - wsparcie dla wirtualizacji w kontekście serwerów ARM.

  • 1.
  • 2. Linux KVM - wparcie dla wirtualizacji w kontekście serwerów ARM
  • 3. Plan ● Terminologia i koncepcja wirtualizacji ● QEMU ● Czym jest KVM ? ● Architektura ARMv8 i wsparcie dla wirtualizacji ○ poziomy uprzywilejowania ○ dodatkowy tryb pracy CPU ○ podwójna translacja MMU ○ wirtualny kontroler przerwań i timer ● Emulacja I/O ○ wirtualizacja ○ parawirtualizacja ○ VHOST
  • 4. Terminologia Wirtualizacja - technika pozwalająca na jednoczesne uruchamianie wielu systemów operacyjnych na tej samej platformie sprzętowej Hipernadzorca (ang. hypervisor) - kawałek kodu realizujący powyższe założenia i zarządzający zasobami sprzętowymi Host OS - system operacyjny na którym działa hipernadzorca Guest OS - system operacyjny który działa na wirtualnej maszynie QEMU (ang. Quick Emulator) - szybki emulator różnych architektur oraz urządzeń I/O + interfejs użytkownika do uruchamiania i konfiguracji maszyny wirtualnej
  • 5. Koncepcja hypervisor’a i co ma do tego KVM ? Brak wirtualizacji - jeden OS Hypervisor - dodatkowy warstwa zarządzająca sprzętem QEMU + KVM jako implementacja hypervisora HypervisorOS kernel App App Hardware OS kernel App App Hardware Hardware Linux kernel KVM QEMU OS kernel App App OS kernel App App QEMU OS kernel App App App
  • 6. QEMU ● wykorzystuje KVM jako akcelerator (wirtualizacja natywnej architektury) ● może działać autonomicznie (bez KVM) ● odpowiedzialny za interakcję z KVM ○ vm_fd = open(“/dev/kvm”); ○ ioctl(vm_fd, ...); QEMU process == VM host kernel User space KVM Kernel space Hardware ○ mmap() pamięci RAM wirtualnej maszyny ○ emulacja urządzeń I/O (wirtualizacja i parawirtualizacja) ● qemu -name <vm_name> -machine virt,accel=kvm -cpu <cpu_type> -m <RAM_size> -smp <cpu_nr> ... Guest OS I/O emulation ioctl()
  • 7. QEMU Process Czym jest KVM (Kernel-based Virtual Machine) ? ● kvm.ko moduł kernela, który wykorzystuje dostępne i stabilne podsystemy kernela ○ MMU ○ synchronizacja ○ scheduling ○ przerwania itd ● zarządza zasobami sprzętowymi ● wymaga sprzętowego wsparcia ● zmienia kontekst procesora host/guest tzw. world switch Guest OS I/O emulation host kernel User space Kernel space KVM Hardware
  • 8. Czym jest KVM ? c.d. ● zapewnia obsługę wyjątków wirtualnej maszyny (trap) tj.: ○ przerwania ○ dostęp do rejestrów ○ I/O ● udostępnia urządzenie /dev/kvm, za pomocą którego możliwe jest poznanie dostępnych urządzeń/funkcjonalności i ich konfiguracja np.: ○ typ kontrolera przerwań ○ ilość procesorów (SMP) ● współpracuje z emulatorami np. QEMU, kvmtool ○ emulacja pozostałych rzeczy np. dostęp do dysku virtio-blk
  • 9. ARMv8 poziomy uprzywilejowania Powodem zmiany EL może być: ● przerwanie, page faults ● instrukcja SVC (przejście do EL1) ● instrukcja HVC (przejście do EL2) ● instrukcja SMC (przejście do EL3) ● ERET (przejście poziom niżej) EL - Exception Level
  • 11. KVM i architektura ARMv8.0 Guest Userspace Guest Kernel Guest Userspace Hypervisor Guest Kernel Host Userspace Linux host kernel Guest Kernel Guest Userspace Switching code KVM
  • 12. KVM i architektura ARMv8 c.d. ● Poziom EL2 ma tylko jeden bazowy rejestr tablicy translacji TTBR1_EL2 ● Wymagane ogromne zmiany żeby uruchomić kernel na EL2 ● EL2 zawiera mały “kawałek” kodu zmieniające kontekst host - guest tzw. “world switch”
  • 13. KVM i architektura ARMv8.1 (VHE) Host Userspace Linux host kernel Guest Kernel Guest Userspace KVM Rozszerzenie dla wirtualizacji: ● wsparcie dla TTBR0_EL2 i TTBR1_EL2 !!! ● host kernel może pracować na EL2 ● host kernel nie musi przechodzić z EL2 do EL1 ● zmiana kontekstu na tym samym poziomie EL2
  • 14. ● modyfikacja kernela VM ? ● emulacja wybranych instrukcji ? Jak zwirtualizować CPU (tzw. vCPU) ? ● emulacja? ○ procesor wchodzi w tryb guest i działa w trybie natywnym ○ wychodzi do trybu host gdy potrzebuje pomocy ○ każdy vCPU może być osobnym wątkiem ● użycie nowego trybu CPU - guest ** Wymaga od procesora wsparcia dla wirtualizacji (Intel VT-x, ARM’s Virt. extensions) !!! Start Enter Guest Guest execution Handle reason (kern. mode) Exit to Hyp for some reason Handle reason (user. mode)
  • 15. Jak zwirtualizować CPU (tzw. vCPU) ? c.d. QEMU process host kernel User space KVM Exception handling vCPU pthread 0 exit enter I/O emulation ● vCPU to wątek ● możemy użyć taskset, numactl, ps... vCPU pthread 1 exit enter I/O emulation exit enter Kernel space
  • 16. Jak zwirtualizować CPU (tzw. vCPU) ? c.d. Host Userspace Linux host kernel Guest Kernel Guest Userspace Switching code KVM QEMU ioctl(KVM_RUN) enter/exit While no heavy exit - or- no error Exit to QEMU 1. Heavy Exit - MMIO 2. Runtime KVM error Set exit reason KVM interrupted Enable interrupts Check pend interrupts, timers. Update & inject into guest Disable interrupts About to enter Guest Check for pending signals Enter guest, this is where you world switch - Enter/ and return on Exit here Enable Interrupts Host interrupts happen here Update vCPU/KVM with Guest HW state Handle Exit could be - 2nd stage MMU fault - Hype call - System reg access… - KVM error can’t decode Return from QEMU with updated CPU state
  • 17. Jak zwirtualizować CPU (tzw. vCPU) ? c.d. Konkluzje: ● narzut na wirtualizację to czas kiedy CPU spędza w trybie host i obsługuje wyjątki ● im mniej wychodzimy do hypervisora tym lepiej ● wyjście do userspace’u (tzw. heavy exit) jest najgorszym z możliwych scenariuszy jeżeli chodzi o wydajność Guest Mode KVM HYP KVM HYP KVM Host KVM Host QEMU Run vCPU QEMU Exit Handle Ultra-light Exit Light-weight Exit Guest enter Guest exit Heavy Exit
  • 18. MMU - pojedyncza translacja
  • 19. MMU - podwójna translacja
  • 21. Kontroler przerwań (VGIC) c.d. ● przerwania nadal są obsługiwane przez kernel host ● dostęp do rejestrów i/f CPU nie powodują wyjątku ● dostęp do rejestrów dystrybutora nadal powoduje wyjątek (in-kernel emulation) ● host jest w stanie wygenerować przerwanie programując wirtualny i/f CPU ● przerwanie jest generowane s/w na żądanie emulowanego urządzenia I/O QEMU process host kernel User space KVM Exception handling vCPU pthread 0 exit enter VGIC I/O emulation exit enter Kernel space reg 1 reg 0 reg 2 Dist. regs
  • 22. VTimer ● operacje na rejestrach timera są krytyczne dla wydajności ● fizyczny timer dostępny tylko dla hosta ● wirtualny timer (vtimer) przeznaczony dla VM ● dostęp do rejestrów vtimera nie powoduje wyjątków : ) ○ przerwanie vtimera nadal powoduje wyjątek i world switch ○ optymalizacja - KVM sprawdza rejestry vtimera i wstrzykuje przerwanie do VM ● wciąż potrzebna emulacja vtimera w kernelu : (
  • 23. VTimer c.d. QEMU process host kernel User space KVM Exception handling vCPU pthread 0 exit enter VGIC I/O emulation exit enter Kernel space IRQ injection VTimer
  • 24. QEMU process Emulacja I/O - pełna wirtualizacja Guest kernel host kernel User space Kernel space KVM MMIO MMIO e1000 IRQ I/O emulation e1000 machine state IRQFD TAP dev reg 1 reg 0 reg 3 reg 2 RX/TX ● istniejący sterownik ● kompatybilność wstecz ● każdy zapis/odczyt rejestru to trap i wyjście do userspace-u ● skomplikowana maszyna stanu w QEMU ● IRQFD
  • 25. QEMU process I/O emulation Virtio - parawirtualizacja ● typowy sterownik dla VM ● konieczne wsparcie dla VIRTIO w kernelu ● protokół zaprojektowany dla potrzeb wirtualizacji ● vring - współdzielona pamięć ● eventfd - komunikacja w dwie strony ● prostsza implementacja niż emulacja zachowania HW Guest kernel virtio-net virtio-net virtio-defined protocol virtio-defined registers vring host kernel KVM TAP dev MMIO MMIOIRQ EVENTFD RX/TX User space Kernel space
  • 26. QEMU process MMIO VHOST ● QEMU jako funkcja kontrolna ● QEMU przekierowuje data plane ● przepływ pakietów VM<->kernel ● pomijamy warstwę QEMU<- >TAP ● qemu -netdev type=tap,id=net0,vhost=on -device virtio-net-pci,netdev=net0 Guest kernel host kernel KVM I/O emulation virtio-net vhost-net control plane /dev/vhost-net virtio-defined registers TAP dev vhost-net EVENTFD VRING User space Kernel space IRQ MMIO ioctl
  • 27. Q/A Dziękuję za uwagę Pytania ? Kontakt: Tomasz Nowicki tn@semihalf.com