Kernel-based Virtual Machine
Kernel-based Virtual Machine, czyli Maszyna Wirtualna bazująca na Jądrze to środowisko 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ępnia 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 wirtualnej maszyny (VM) sprzęt może być emulowany, parawirtualizowany, lub dostępny (pass trought) przepustowo. Do 32 urządzeń PCI na gościa. Im mniejszy stopień programowej emulacji tym obciążenie 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 migracja z AMD na Intela i odwrotnie). Przerwa w pracy gościa (konieczna na końcową synchoronizację migrowanych stanów: pamięci i rejestrów), 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 restrykcje 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.
Do izolacji, inicjalizowanego ze świata dostępu do goscia, używana jest też NAT czyli tłumaczenie sieciowe. Jest to domyślne ustawinie w LSD KVM [5]. Wirtualne NIC w KVM to e1000, ne2k_pci, pcnet, rtl8139[6] i virtio. Można dla gościa używającego NAT podłaczyć by był dostępny ze swiata przez przekierowanie portów.
W przepustowym trybie sieci 'macvtap do ethN' używane są słabo zwirtualizowane karty sieciowe. Ograniczenia w strowniku (słaba wirtualność) wymaga oddzielenych ethN urządzeń dla gośći, co wymaga by w systemie gospodarza istniały fizyczne dodatkow porty sieciowe. Przy zastosowaniu macvtap do ethN ruch sieciowy z gościa wychodzi bezpośrednio do sieci, gość jest dostępny z sieci i monitorując sieć (np przez Wireshark) widać virtualną maszynę gościa jako niezależny sieciowy komputer.
porównanie [7]
KVM nie obsługuje trybu parawirtualizacji Xena.
Zobacz też
- ↑ kvm.modules sprawdza: 'if [ $(grep -c svm /croc/cpuinfo) -ne 0 ];' z RHEL v 6.3
- ↑ 5.2. KVM limitations[1]
- ↑ Virtual Machine Manager
- ↑ 0 w eth0 itp jest zapisem umownym
- ↑ RHEL v6.3
- ↑ ma problemy z mostowaniem zalecana jest tu virtio
- ↑ http://www.linux-kvm.org/page/FAQ#What_is_the_difference_between_KVM_and_Xen.3F