Ogólne zasady działania QEMU-KVM

Ogólne zasady działania QEMU-KVM

Moje obecne zrozumienie:

1) KVM

KVM (Kernel-based Virtual Machine) – hipernadzorca (VMM – Virtual Machine Manager), działający jako moduł w systemie operacyjnym Linux. Hipernadzorca potrzebny jest do uruchamiania oprogramowania w nieistniejącej (wirtualnej) przestrzeni, przy jednoczesnym ukrywaniu przed tym oprogramowaniem rzeczywistego fizycznego sprzętu, na którym to oprogramowanie działa. Hipernadzorca działa jako 'pośrednik' pomiędzy fizycznym sprzętem (hostem) a wirtualnym systemem operacyjnym (gościem).

Ponieważ KVM jest standardowym modułem jądra Linux, otrzymuje od jądra wszystkie niezbędne zasoby (zarządzanie pamięcią, scheduler itp.). W konsekwencji, wszystkie te korzyści trafiają również do gości (ponieważ goście działają na hipernadzorze, który działa w/na jądrze systemu operacyjnego Linux).

KVM jest bardzo szybki, ale sam w sobie nie wystarcza do uruchomienia wirtualnego systemu operacyjnego, ponieważ do tego potrzebna jest emulacja I/O. Do I/O (procesor, dyski, sieć, wideo, PCI, USB, porty szeregowe itd.) KVM korzysta z QEMU.

2) QEMU

QEMU (Quick Emulator) – emulator różnych urządzeń, który umożliwia uruchamianie systemów operacyjnych zaprojektowanych dla jednej architektury na innej (na przykład, ARM –> x86). Oprócz procesora, QEMU emuluje różne urządzenia peryferyjne: karty sieciowe, HDD, karty wideo, PCI, USB itd.

Działa to w ten sposób:

Instrukcje/binarne kody (na przykład, ARM) są konwertowane do pośredniego kodu niezależnego od platformy przy użyciu konwertera TCG (Tiny Code Generator), a następnie ten pośredni kod binarny jest konwertowany już na docelowe instrukcje/kod (na przykład, x86).

ARM –> kod_pozytywny –> x86

W istocie, możesz uruchamiać maszyny wirtualne na QEMU na każdym hoście, nawet na starych modelach procesorów, które nie wspierają Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). Jednak w takim przypadku, będzie to działać dość wolno, ze względu na to, że wykonywany kod binarny musi być kompilowany w locie dwukrotnie przy pomocy TCG (TCG to kompilator Just-in-Time).

To znaczy, sam QEMU jest super, ale działa bardzo wolno.

3) Pierścienie ochrony

Ogólne zasady działania QEMU-KVM

Binarne kody programów na procesorach nie działają bez celu, lecz znajdują się na różnych poziomach (pierścieniach / Protection rings) z różnymi poziomami dostępu do danych, od najbardziej uprzywilejowanego (Ring 0) do najbardziej ograniczonego, wyregulowanego i 'zabezpieczonego' (Ring 3).

System operacyjny (jądro OS) działa w trybie Ring 0 (tryb jądra) i może wykonywać dowolne operacje na wszelkich danych i urządzeniach. Aplikacje użytkownika działają w trybie Ring 3 (tryb użytkownika) i nie mają prawa robić, co chcą, a zamiast tego muszą za każdym razem prosić o dostęp do wykonania danej operacji (w ten sposób aplikacje użytkownika mają dostęp tylko do własnych danych i nie mogą "wtrącać się" w "cudzą piaskownicę"). Ring 1 i 2 są przeznaczone do użytku przez sterowniki.

Przed wynalezieniem Intel VT-x / AMD SVM, hipernadzorcy działali w Ring 0, a goście w Ring 1. Ponieważ Ring 1 nie ma wystarczających uprawnień do normalnego działania systemu operacyjnego, przy każdym wywołaniu uprawnionym od systemu gościa, hipernadzorca musiał w locie modyfikować to wywołanie i wykonywać je w Ring 0 (w sposób przypominający działanie QEMU). Tzn. binarny kod gościa NIE był wykonywany bezpośrednio na procesorze, a za każdym razem przechodził kilka pośrednich modyfikacji.

Koszty operacyjne były znaczne i stanowiło to duży problem, dlatego producenci procesorów, niezależnie od siebie, wprowadzili rozszerzony zestaw instrukcji (Intel VT-x / AMD SVM), które umożliwiają wykonywanie kodu systemów operacyjnych gości BEZPOŚREDNIO na procesorze hosta (ominając wszelkie kosztowne pośrednie etapy, jak to miało miejsce wcześniej).

Wraz z wprowadzeniem Intel VT-x / AMD SVM, stworzono nowy specjalny poziom Ring -1 (minus jeden). I teraz na nim działa hipernadzorca, a goście działają w Ring 0 i uzyskują przywilej dostępu do CPU.

Tzn. w końcu:

  • host działa w Ring 0
  • goście działają w Ring 0
  • hipernadzorca działa w Ring -1

4) QEMU-KVM

KVM daje gościom dostęp do Ring 0 i wykorzystuje QEMU do emulacji I/O (procesor, dyski, sieć, wideo, PCI, USB, porty szeregowe itp., które "widzą" i z którymi pracują goście).

Stąd QEMU-KVM (lub KVM-QEMU) 🙂

CREDITS
Obrazek przyciągający uwagę
Obrazek Pierścieni Ochronnych

P.S. Tekst tego artykułu został pierwotnie opublikowany na kanale Telegram @RU_Voip jako odpowiedź na pytanie jednego z uczestników kanału.

Napisz w komentarzach, w których miejscach mylę się w temacie lub jeśli jest coś, co warto dodać.

Dziękuję!

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster