Virtualizace

Jakub Hrozek, xhrozek1 -at- fi -dot- muni -dot- cz

Obsah

Proč virtualizace

Virtualizace se používá z mnoha různých důvodů, například:

Pro každý druh využití virtualizační technologie se může hodit jiná virtualizační technika, různá virtualizační řešení mívají různý výkon, odlišnou kvalitu nástrojů pro správu systému nebo dostupnost komerční podpory a certifikací.

Typy virtualizace

Kontejnerová virtualizace

Většina virtualizačních technik popsaných v tomto dokumentu se snaží virtualizovat celý operační systém včetně jádra. Oproti tomu, kontejnerová virtualizace je technika, při které běží pouze jeden OS, soustředíme se na vytvoření odděleného prostředí pro aplikace.
Výhody: Nevýhody: Příklady:

Softwarová virtualizace

Celá hardwarová platforma, na které běží virtualizovaný systém se softwarově emuluje. Výhodou je možnost emulace nedostupného HW, např. jiných architektur, nevýhodou velmi nízký výkon.
Příklad: QEMU (bez modulů jako KVM-Qemu nebo KQEMU)

Paravirtualizace

Paravirtualizací se rozumí technika virtualizace, kdy se prostředí pro virtualizovaný stroj neemuluje plně, ale předává se abstrakce reálného prostředí. Předpokládá se spolupráce virtualizovaného stroje, podmínkou pro paravirtualizaci je tedy upravený kód jak guesta tak hosta.

Výhodou paravirtualizace je vysoký výkon - to je dáno skutečností, že se skutečný a virtuální HW tolik neliší. Nevýhodou je nemožnost virtualizovat úplně odlišný hardware (například jinou architekturu procesoru) a skutečnost, že je třeba upravit kód virtualizovaného systému, to znemožňuje paravirtualizovat systémy, k jejichž zdrojovým kódům nemáme přístup.

Plná virtualizace

Plná virtualizace vyžaduje podporu ze strany HW. Instrukce se liší u AMD i u Intelu, proto i virtualizační nástroje, které je využívají, mají oddělený kód pro tyto architektury. U procesorů Intel bývá tato technologie nazývána Vanderpool, její přítomnost indikuje příznak vmx, u AMD se nazývá Pacifica, příznak svm.

Výhodou je, že není třeba žádné modifikace virtualizovaného OS. Nevýhodou je nutnost emulovat kompletní hardware virtualizovaného stroje a tedy o něco nižší výkon oproti paravirtualizaci.

Příklady: KVM, Xen

Příklady technologií

V této sekci uvedu několik příkladů virtualizačních technologií dostupných pod OS Linux, spolu s ukázkami instalace guest OS, použití nástrojů pro správu, a typického využití jednotlivých technologií.

User Mode Linux

User Mode Linux (UML) je virtualizační techika, při které guest OS běží jako uživatelský proces na host OS. Plánování virtualizovaných strojů nebo přidělování paměti se tedy řídí stejnými pravidly, jaké platí pro ostatní procesy v systému. Použitím UML může být např. vývoj jádra nebo jaderných modulů - protože kernel host OS je pouze běžný proces, je možné použít user-space ladící nástroje, jako například gdb. Pro provoz guest systémů není třeba modifikovat jádro host OS. Proces virtualizovaného jádra nemá žádný přístup k fyzickému HW, např. disky jsou řešeny pouze jako soubory na disku host OS.

UML je od verze 2.6 součástí jádra, k sestavení UML kernelu nejsou tedy třeba žádné patche apod. Na úrovní zdrojových kódů kernelu je UML vedeno jako další architektura, proces sestavení jádra je stejný jako u nativního, pouze je třeba cross-kompilovat pro architekturu UM:

Příklady použití

$ make defconfig ARCH=um # výchozí konfigurace pro UML jádra
$ make menuconfig ARCH=um # přizpůsobení konfigurace
$ make ARCH=um # kompilace jádra pro architekturu um
$ ./vmlinux ubd0=cesta/k/disku umid="název stroje" # spuštění stroje

Ke správě guest OS je kromě nástrojů pro správu procesů možné použít speciální management konzoli - uml_mconsole, pomocí které je možné např. připojovat se na konzoli virtuálních strojů, guest OS pozastavit, restartovat, zastavit,.. Je také možné připojit souborový systém z host OS, pomocí speciálního souborového systému hostfs

Xen

Xen je Open-Source hypervisor, vyvíjený převážně firmou XenSource (nyní Citrix). Architekturu celého systému ilustruje obrázek.

+------+    +----+  +----+
| App  |    |App |  |App |
+------+    +----+  +----+
+------+    +----+  +----+
|      |    |    |  |    |
| Dom0 |    |DomU|  |DomU|
|      |    |    |  |    |
+------+    +----+  +----+
        +----------------------+
        |    Xen Hypervisor    |
        +----------------------+
+------------------------------+
|         Hardware             |
+------------------------------+
Nad samotným hardwarem běží tzv. hypervisor, který se stará o přidělování prostředků. Nad hypervisorem běží virtualizované systémy (nazývané domény), jedna z domén bývá privilegovaná (Domain-0, má přímý přístup k fyzickému HW), ostatní představují virtualizované stroje (Domain-U). Správa guest OS probíhá z Dom-0 prostřednictvím démona xend a nástroje xm. Ty komunikují s hypervisorem pomocí specializovaných volání nazývaných hypercall (asi jako userspace komunikuje s jádrem pomocí syscall)

Xen umožňuje provoz guest OS jak s využitím paravirtualizace (Linux, BSD, OpenSolaris, Windows - nepodporované) tak i plné virtualizace, kdy emuluje HW zařízení pomocí Qemu. Xen nabízí slušný výkon, benchmarky uvádějí při použití paravirtualizace ztrátu výkonu 2-3%. Jako disk je možné použít buď přímo oddíl na disku nebo jen soubor (viz. parametr disk v dokumentaci), spojení s virtualizovaným systémem je možné buď pomocí xm console (pouze text) nebo VNC (i graficky, tj. i runlevel 5).

Nevýhodou Xenu je, že jeho kód nebyl začleněn do jádra Linuxu, verze, kterou vyvinul XenSource pro svůj samostatný produkt je založena na jádře 2.6.18, distributoři, kteří chtějí používat nová jádra jsou nuceni kód sami forward-portovat. Kód hypervisoru je navíc poměrně komplikovaný (obsahuje např. vlastní power management), což stěžuje jeho zařazení,

Příklady použití

Konfigurace virtuálních strojů se nachází v adresáři /etc/xen. Výchozí parametry pro virtuální stroje jsou uvedeny v souboru /etc/xen/xmdomain.cfg Pokročilejší funkce lze nalézt v dokumentaci (viz. [3]), jedná se například o připojování blokových zařízení nebo síťových rozhraní z Dom-0, migraci domény, dump její paměti apod.

KVM

KVM je virtualizační řešení původně vyvinuté firmou Qumranet (dnes Red Hat). Poskytuje pouze plnou virtualizaci, takže ke svému běhu potřebuje odpovídající HW. Je integrováno přímo do jádra Linuxu - tomuto byl od začátku podřízen vývoj i na úkor výkonu. Výhodou oproti Xenu je jednoduchost řešení a neexistence samostatného hypervisoru, jako hypervisor se používá kernel Linuxu.

KVM je implementováno jako jaderný modul, kvůli odlišnostem v instrukčních sadách AMD a Intelu existují dva moduly - kvm-amd.ko a kvm-intel.ko. Ty pak poskytují zařízení /dev/kvm, se kterým je možné komunikovat pomocí ioctl volání - těmito se virtuální stroje vytvářejí, ovládají, .. Pro emulaci zařízení v guest OS KVM používá Qemu.

+-----+      +-----------+
| App |      |    App    |
+-----+      +-----------+
+-----+      +-----------+
|     |      |  GuestOS  |
|     |      +-----------+
|     |      |   Qemu    |
|     |      +-----------+
|     +------------------------+
|         Linux+KVM            |
+------------------------------+
+------------------------------+
|         Hardware             |
+------------------------------+

Pomocí utility xenner je možné používat paravirtualizované guest OS vytvořené pro běh pod Xenem pomocí KVM.

Příklady použití

Tyto příklady používají přímo rozhraní qemu-kvm, i Qumranet ale doporučuje používat libvirt/virsh.

libvirt

Každá z uvedených virtualizačních technik má svůj vlastní soubor nástrojů pro správu, nabízí jiné API a jiné funkce. Je proto poměrně těžké napsat sadu skriptů, pomocí kterých by se daly ovládat různé virtualizační technologie nebo front-end, který by byl přenositelný mezi jednotlivými virtualizačními backendy. Tyto problémy se snaží řešit projekt libvirt, který poskytuje rozhraní pro různé virtualizační technologie:

Díky poskytovanému API je nad libvirt postaveno několik dalších projektů, které je možné použít pro správu virtuálních strojů nad podporovanými backendy - např. nástroj virt-manager, který poskytuje grafické rozhraní v gtk nebo skripty pro snadnou instalaci (virt-install) a klonování (virt-clone) virtuálních strojů.

Příklady použití

virt-p2v

Nástroj virt-p2v slouží ke konverzi fyzického serveru na virtuální. Jedná se o LiveCD, které je nutné spustit na stroji, který chceme virtualizovat, nástroj konvertuje systém na virtuální a přenese jej pomocí ssh na cílový hypervisor. Virt-p2v je postaven nad knihovnou libvirt, takže podporuje tytéž virtualizační technologie. Dokumentaci i více informací lze nalézt na stránce projektu.

Literatura

  1. Archív referátů
  2. Xenner
  3. Red Hat Virtualization Guide
  4. Manuálové stránky příkazu xm
  5. Domovská stránka projektu virt-manager
  6. Domovská stránka projektu virt-p2v
  7. User Mode Linux HOWTO
  8. User Mode Linux wiki
  9. Několik předpřipravených FS obrazů pro UML
  10. Popis architektury KVM
  11. KVM Introduction, Ottawa Linux Symposium 2007 Whitepaper
  12. Get In The Zone - A Solaris Zones tutorial
  13. ONLamp.com - FreeBSD Jails
  14. KVM HOWTO repository