Virtualizace

Vadym Yanovskyy, vadim.janovskij@mail.muni.cz

Obsah

Virtualizace

Virtualizace je ve své podstatě iluze, ve které vytváříme řadu kopií nějakého zdroje (např. pamětí, procesoru, disku) a každý uživatel dostane k dispozici jednu nebo více těchto kopií. Protože kopie vznikají pouze jako koncepty, hovoříme proto o virtuálních objektech – máme virtuální paměť, virtuální disk a virtuální procesor. V konečném důsledku jsme schopni poskytnout uživateli celý virtuální počítač, který se skládá z virtuálních komponent. Uživatel má absolutní kontrolu nad celým virtuálním počítačem, ve skutečnosti však sdílí konkrétní fyzické zdroje s dalšími uživateli.

Proč virtualizovat?

Úrovně virtualizace

Kontejnerová virtualizace

Virtualizace na úrovní operačního systému. V rámci jednoho operačního systému se vytváří vzájemně oddělená prostředí - kontejnery. Umožňuje například na jednom stroji provozovat několik webových serverů, aniž by bylo nutné mít pro každý z nich nainstalovaný kompletní systém.

Výhody:

Nevýhody:

Příklady:

Emulace

Emulace jako jediná ze zmiňovaných technik umožňuje provozovat na hostujícím systému virtuální systém jiné architektury. Abychom toho dosáhli, musíme všechny operace prováděné v hostovaném systému interpretovat, což má za následek snížení výkonu. Díky tomu se také emulace značně odlišuje od ostatních virtualizačních technik a bývá mnohdy vyčleňována do samostatné kategorie.

Emulace může být založená na interpretací, statickým překladů nebo dynamickém překladu. Při interpretaci emulátor prochází kód programu po instrukcích a podle toho mění stav hostovaného systému. Pro každou instrukci provádí její načtení, dekódovaní a zavolaní odpovídající obslužné operace. Takové zpracování každé instrukce zvlášť je neefektivní. Statický překlad naopak nejprve zpracuje celý program a bez dalších úprav ho provede. Dynamický překlad se na rozdíl od statického provádí až za běhu. Načte se blok instrukcí, ty se zpracují a provedou. Dynamický překlad je nejvíce rozšířenou metodou. Je nejefektivnější a používá ho například emulátor Qemu. Oproti nativnímu prostředí hostitele se však stále uvádí zpomalení virtuálu 2 až 3 násobné.

Výhody:

Nevýhody:

Příklady:

Paravirtualizace

Pokud se některé komponenty virtuálního a fyzického počítače shodují (např. hostující systém bude mít stejný procesor), pak můžeme použít tzv. paravirtualizaci. Paravirtualizace provádí jen částečnou abstrakci na úrovní virtuálního počítače a nabízí virtuální prostředí podobné fyzickému, na kterém virtuální počítač provozujeme. Hostovaný systém ví, že běží ve virtuálním prostředí, a dokáže efektivně komunikovat s hypervisorem (všechny přístupy k hardware jsou převedeny na volání hypervisoru). Základem pro tuto efektivní komunikaci je však speciálně upravené jádro hostujícího systému, což komplikuje její nasazení u operačních systému s uzavřeným zdrojovým kódem. Částečně se však již dá dosáhnout i za použití speciálních ovladačů.

Výhody:

Nevýhody:

Příklady:

Plná virtualizace

Pokud důsledně virtualizujeme všechny součásti počítače, hovoříme o tzv. plné virtualizaci. Plná virtualizace vyžaduje, aby hostovaný i hostující systém měl stejnou architekturu. Pro každý hostovaný systém se totiž vytváří identický obraz fyzické architektury. V takovémto případě hostovaný operační systém má k dispozici stejnou instrukční sadu a stejné prostředky jako na stroji fyzickém a nemůže žádným způsobem poznat, že běží ve virtualním prostředí a sdílí přístup k hardwarům s dalšími stroji.

Protože při plné virtualizaci dochází k úplnému oddělení fyzické a programové vrstvy, ovlivňuje tím snížení výkonu. Hypervisor totiž zde emuluje fyzické vybavení a většinu operací provádí ve vlastním software, namísto aby je přímo vykonával hardware.

Výhody:

Nevýhody:

Příklady:

Kernel-based Virtual Machine (KVM)

KVM je nástroj pro plnou virtualizaci, který je součástí linuxového jádra od verze 2.6.20. Podporuje jen architekturu x86 (Intel a AMD). Koncepce virtualizace KVM je založena na principu přeměny linuxového jádra na virtualizační vrstvu a nahráním modulu do jádra. Každý virtuální stroj má svůj vlastní virtualizovaný hardware: síťovou kartu, úložiště, gra ckou kartu, atd. Je potřeba, aby procesor podporoval hardwarovou virtualizaci, jinak využití KVM není možné. Zdali má procesor podporu hardwarové virtualizace lze zjistit poměrně snadno výpisem z /proc/cpuinfo.

# grep -E ’vmx|svm’ /proc/cpuinfo vmx je flag udávající podporu u procesoru Intel, smv udává podporu u procesoru AMD-V.

Pří vykonání I/O operaci využívá KVM funkcionalitu zmíněného emulátorů Qemu. Každý I/O volání hostujícího operačního systému hypervisor zachytí a emuluje pomocí Qemu procesu. To znamená, že některé moduly Qemu jsou také součástí linuxového jádra.

Knihovna Libvirt

Libvirt je knihovna umožňující ovládat různé virtualizační platformy a využijeme ji při práci s KVM. Vytváří abstraktní vrstvu mezi virtualizační platformou a uživatelským rozhraním za účelem usnadnění správy strojů. Jejím cílem je poskytovat všeobecné aplikační programové rozhraní pro správu virtuálních strojů. Při zpracování příchozích požadavku Libvirt komunikuje s každým dostupným hypervisorem.

V terminologii Libvirt jsou fyzické stroje pojmenovány jako uzel a hosté jsou pojmenováni jako domény. Název uzel byl zvolen protože Libvirt podporuje migraci systému mezi uzly. Pro účely manipulace se stroji, jejich kon gurací a kon guraci sítě se budeme připojovat k Libvirt daemonu3 pomocí nástroje virsh. Kon gurační soubory Libvirt jsou psané značkovacím jazykem XML.

Literatura