Kernel-based Virtual Machine
KVM, Kernel-based Virtual Machine, czyli Maszyna Wirtualna bazująca na Jądrze srodowisko wirtualizacyjne dla systemów linuksowych.
Wyróżnia się system gospodarza i gościa. Gospodarz to os kontrolujący sprzęt - "goły metal". Gość to os wewnątrz gospodarza, któremu gospodarz udostępina sprzęt.
Środowisko KVM (gospodarz/e) umożliwia tworzenie sieci maszyn wirtualnych (goście). Każda maszyna wirtualna posiada prywatny zwirtualizowany sprzęt: bios, kartę sieciową, dysk twardy, kartę graficzną, dzwiękową, porty I/O itd. Dla wirtulnej maszyny (VM) sprzet może być emulowany, parawirtualizowany, lub dostepny (pass trought) przepustowo. Do 32 urządzeń PCI na gościa. Im mniejszy stopień programowej emulacji tym obciązenie procesora jest mniejsze, wydajność VM jest większa, jednocześnie może maleć kontrola przez OS gospodarza co może zmniejszać bezpieczństwo systemu. KVM wykorzystuje sprzętowe technologie wirtualizacyjne. Dla AMD-V lub Intel VT-x) warunek sprzętowej wirtualizacji jest spełniony wtedy gdy /proc/cpuinfo zawiera odpowienio znacznik svn lub vmx[1].
Pod maszynami wirtualnymi możliwa jest instalacja i wspólne działanie naraz dowolnej ilości systemów Linux, Windows i innych. KVM umożliwia przepełnianie (overcommit) zasobów: pamięci i CPU[2]. KVM umozliwia zatrzymanie, zapisanie stanu (snapshot), klonowanie lub przenoszenie (migrację) pracującego cały czas gościa do innego gospodarza. Przenoszenie narazie tylko działa gdy oba gospodarze, przenoszonego gościa, mają podobne procesory (nie działa migruje się z AMD na Intela i odwrotnie). Przerwa w pracy gościa (konnieczna na końcową synchoronizację migrowanych stanów OS), np. 30 ms i jest trudno wykrywalna przez OS gościa. Może to być np. wykorzystane do przenosznia ciągle pracującego Windowsa z Polski za ocean żeby ominąć (bez rozbadania systemu) sztuczne terytorialnie restryckcje w dostępie do zasobów sieciowych. Możliwa jest też wielokrotna wirtualna podróż w czasie do stanu pracy wirtualnego komputera zamrożonego z przeszłości. Inne środowiska wirtualizacji mogą mieć podobne możliwości.
Zarządzanie KVM może się odbywać przez klikanie w virt-manager[3] lub z palca przez virsh.
historia
KVM historycznie pochodził od w pełni wirtualizowanego rozwiązania dla systemu Linux na sprzęcie x86. Zawiera moduł jądra (nazwany kvm.ko) i komponent przestrzeni użytkownika (zmodyfikowaną wersję Qemu). Komponent KVM pojawił się w jądrze Linuksa wraz z wersją 2.6.20.
sieć
W KVM sieć może być w trybie VEPA, mostowym, prywatym lub przepustowym. Urządzenia sieciowe konfigurowane są jako macvtap do eth0[4] , most miedzy vibro0-nic i macvetap lub virtualną sieć między vnet0 i macvetap. Głównie do komunikacji inicjalizowanej z VM do świata używana jest też NAT czyli tłumaczenie sieciowe i jest ustawiniem domyślnym w LSD KVM [5]. Wirtualne NIC w KVM to e1000, ne2k_pci, pcnet, rtl8139[6] i vitrio. W przepustowym trybie sieci współdzielona jest niewirtualna karta sieciowa.
porównaie
KVM nie obsługuje trybu parawirtualizacji Xena.