Kernel-based Virtual Machine

Z Wikipedii, wolnej encyklopedii
Kernel-based Virtual Machine
Logo Kernel-based Virtual Machine
Logo programu
Ilustracja
Autor Open Virtualization Alliance (OVA)
Język programowania C
Platforma sprzętowa Linux
Rodzaj Hipernadzorca
Licencja GNU General Public License i GNU Lesser General Public License
Strona internetowa

Kernel-based Virtual Machine (maszyna wirtualna bazująca na jądrze) – środowisko wirtualizacyjne dla systemów linuksowych.

Wyróżnia się system gospodarza i gościa. Gospodarz to system operacyjny (OS) kontrolujący sprzęt, czyli tzw. „goły metal” (ang. bare metal). Gość to OS wewnątrz gospodarza, któremu gospodarz udostępnia sprzęt.

Środowisko KVM (gospodarz lub gospodarze) umożliwia tworzenie sieci maszyn wirtualnych (goście). Każda maszyna wirtualna posiada prywatny zwirtualizowany sprzęt: bios, kartę sieciową, dysk twardy, kartę graficzną, dźwiękową, porty I/O itd. Dla wirtualnej maszyny (VM) sprzęt może być emulowany, parawirtualizowany, lub dostępny przelotowo (pass through). Może przypadać 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ć bezpieczeń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 odpowiednio znacznik svm lub vmx[1].

Pod maszynami wirtualnymi możliwa jest instalacja i wspólne działanie naraz dowolnej liczby systemów Linux, Windows i innych. KVM umożliwia przepełnianie (overcommit) zasobów: pamięci i CPU[2]. KVM umożliwia zatrzymanie, zapisanie stanu (snapshot), klonowanie lub przenoszenie (migrację) pracującego cały czas gościa do innego gospodarza. Przenoszenie działa, gdy obaj 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ą synchronizację migrowanych stanów pamięci i rejestrów), jest prawie natychmiastowa, wynosi np. 30 ms i jest prawie niewykrywalna przez OS gościa. Może to być np. wykorzystane do przenoszenia ciągle pracującego Windowsa z Polski za ocean żeby ominąć (bez wyłączania 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 interfejs graficzny w virt-manager[3] lub z poziomu wiersza poleceń przez virsh.

Historia[edytuj | edytuj kod]

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ć[edytuj | edytuj kod]

W KVM sieć może być w trybie VEPA, mostowym, prywatnym lub przepustowym. Urządzenia sieciowe konfigurowane są jako macvtap do eth0[4], most między vibro0-nic i macvetap lub wirtualną sieć między vnet0 i macvetap.

Do izolacji inicjalizowanego ze świata dostępu do gościa, używana jest też NAT, czyli translacja adresów IP. Jest to domyślne ustawienie 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łączyć by był dostępny z zewnątrz przez przekierowanie portów.

W przepustowym trybie sieci 'macvtap do ethN' używane są słabo zwirtualizowane karty sieciowe. Ograniczenia w sterowniku (słaba wirtualność) wymaga oddzielnych ethN urządzeń dla gości, co wymaga by w systemie gospodarza istniały fizyczne dodatkowe 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ć wirtualną maszynę gościa jako niezależny sieciowy komputer.

Porównanie[7][edytuj | edytuj kod]

KVM nie obsługuje trybu parawirtualizacji Xena.

Zobacz też[edytuj | edytuj kod]

Przypisy[edytuj | edytuj kod]

  1. kvm.modules sprawdza: 'if [ $(grep -c svm /proc/cpuinfo) -ne 0 ];' z RHEL v 6.3
  2. 5.2. KVM limitations
  3. Virtual Machine Manager Home [online], virt-manager.org [dostęp 2017-11-24] (ang.).
  4. 0 w eth0 itp. jest zapisem umownym
  5. RHEL v6.3
  6. ma problemy z mostkowaniem zalecana jest tu virtio
  7. Faq - Kvm [online], www.linux-kvm.org [dostęp 2017-11-24] (ang.).

Linki zewnętrzne[edytuj | edytuj kod]