Virtualizace obecně
Při pojmu virtualizace si jistě správně představíte možnost
běhu jednoho či více „falešných“ systémů na jednom fyzickém počítači. Této
jednoduché představě však odpovídají dva odlišné a někdy i chybně pojmenovávané
přístupy: emulace a virtualizace. Ty se liší ve způsobu, jakým je umožněn chod
hostovaného systému. Z vnějšího pohledu se může zdát vše stejné,
v DOSboxu běží Wolfenstein 3D stejně jako třeba v dosovém režimu
Windows 98 nainstalovaných ve VirtualBoxu, v čem je tedy rozdíl?
Virtualizace není emulace
Při emulaci ve skutečnosti neběží kód původního
Wolfensteinu, ale za chodu je podle něho vytvářen nový kód, který může běžet
přímo na vašem systému. Nově vytvořený kód se snaží provádět strojové instrukce
vaší architektury, které jsou ekvivalentní s instrukcemi původního programu.
Naproti tomu při virtualizaci se vytváří umělé běhové prostředí (hardware nebo
třeba jen operační systém), které umožní spustit přímo původní program.
Z toho plynou vlastnosti obou přístupů: při emulaci vzniká daleko větší
provozní režie, takže nelze dosahovat tak vysokých výkonů, na druhou stranu je
ale možné simulovat (na rozdíl od virtualizace) i hardwarově úplně odlišné
architektury, kupříkladu známe emulátory starých osmibitových herních konzolí
nebo moderních chytrých telefonů.
Virtualizace pracuje ale trochu jinak. S podobnými
přístupy se ale na úrovni různých dílčích systémů v počítačích setkáváme
už velmi dlouho. Příkladem mohou být stránkovací soubor používaný při
nedostatku operační paměti, diskové pole skládající se ve skutečnosti
z více disků nebo třeba virtuální optická mechanika pracující
s bitovými kopiemi CD (DVD) uloženými na pevném disku. Dalo by se tedy
říci, že se jedná o zaběhnutý způsob, jak odstranit některé nevýhody
standardního řešení nebo přidat další výhody. Dalším krokem se tak logicky
stává virtualizace celých systémů, se kterou se sice na domácích počítačích
nesetkáváme zatím tak často, nicméně i zde si získává své místo.
Jaké výhody tedy může virtualizovaný systém přinést nebo
jaké nedostatky odstranit? V serverovém segmentu není virtualizace žádnou
novinkou, virtuální stroje se používají například za účelem efektivnějšího
využití hardware nebo kvůli izolaci od fyzického hardware pro snadnou
přenositelnost, tyto výhody ale v domácím prostředí nejsou tak důležité.
Zmíněná izolovanost se ale využít dá velmi dobře, například pro experimentování
s neznámými nebo nedůvěryhodnými programy, na pokusy s alternativními
operačními systémy, na spuštění programů určených pro jiné OS, na testování při
vývoji aplikací a podobně.
Trocha teorie
Izolace je vlastně i jedna ze základních myšlenek
virtualizace, virtuální stroje nesmějí mít možnost nekontrolovatelně ovlivňovat
hostující systém ani sebe navzájem, je-li jich v provozu více. Vlastně o vnějších
podmínkách nemusí mít ani tušení (ano, správně vám to připomíná filmový
Matrix). Tyto a následující myšlenky nejsou ale žádnou novinkou, virtualizací
se zabývali provozovatelé počítačových systémů již mnohem dříve – již
v roce 1974 publikovali Gerald J. Popek a Robert P. Goldberg práci „Formal
Requirements for Virtualizable Third Generation Architectures“ (Formální
požadavky virtualizace architektur třetí generace). Tyto požadavky jsou platné
stále a dají se vyjádřit takto:
- Věrnost chování
Program běžící ve virtuálním prostředí se musí chovat v podstatě totožně
(až na nepříliš odlišnou rychlost zpracování), jako by běžel běžně přímo na
ekvivalentním stroji. - Kontrola zdrojů
Virtualizační nástroj musí mít kompletní kontrolu nad všemi virtuálními
prostředky a zdroji. - Efektivita
Většinový podíl instrukcí hostovaných systémů musí být prováděn bez zásahu
virtualizačního nástroje.
Abychom pochopili, jak virtualizace pracuje, je nutné se
nejprve trochu pustit do teorie. Instrukční sada se skládá z instrukcí,
které se dají dělit do dvou základních skupin: ty které je možné spustit pouze
v privilegovaném režimu a na ostatní spustitelné pouze v neprivilegovaném.
První z nich může zpracovávat pouze jádro operačního systému, pokud se
pokusí privilegovanou instrukci spustit jiný program, je okamžitě řízení
zachyceno a předáno zpět operačnímu systému. Toho se využívá i při klasické
virtualizaci. Hostovaný operační systém běží sice jako ostatní programy
v neprivilegovaném režimu, ale přesto se snaží tyto privilegované
instrukce zachytit, při pokusu o jejich pracování je však předáno řízení
hostujícímu operačnímu systému nebo hypervizoru (hypervizor je virtualizační prostředí
běžící přímo na fyzickém stroji bez klasického operačního systému) a ten se
postará o jejich zpracování.
V domácích počítačích je vhodnější způsob vlevo, kdy virtualizační vrstva běží pod klasickým OS, zatímco na serverech častěji běží hypervizor přímo na HW. Zdroj: VMware
Problémem ale je, že u instrukční sady architektury x86 se
některé instrukce chovají jinak, jsou-li spuštěny v privilegovaném nebo
neprivilegovaném režimu. Kvůli tomu není možné výše zmíněné techniky použít a
architektura x86 proto není klasicky virtualizovatelná. Řešení samozřejmě
existuje, spočívá v binárním překladu, kdy jsou odchytávány všechny
potenciálně nebezpečné instrukce a nahrazovány bezpečným kódem. To samozřejmě
přináší zpomalení, ale díky různým pokročilým technikám a používání cache pro
přeložený kód, se dá vliv na výkon velmi snížit.
HW asistovaná virtualizace
HW asistovaná virtualizace
Z důvodu problémů s klasickou virtualizací vznikla hadwareově asistovaná
virtualizace, v procesorech Intel jde o rozšíření VT-x (známé dříve jako „Vanderpool“)
a v procesorech AMD jde o AMD-V (neboli „Pacifica“). Zjednodušeně lze
říci, že se tím přidává k privilegovanému a neprivilegovanému režimu ještě
další vrstva, která umožní, aby hostovaný operační systém mohl běžet
v privilegovaném režimu, ale přesto byl pod kontrolou virtualizačního
prostředí. Vzhledem k tomu, že již před příchodem těchto rozšíření
fungovaly dobře vyladěné virtualizační systémy na bázi binárního překladu, tak
tato rozšíření nemusí znamenat automatické výrazné zvýšení výkonu, ale
podstatným způsobem zjednodušují vývoj a chování virtualizačních systémů.
Než se k této technice dostanu blíže, tak zmíním ještě
rychle další dva typy virtualizace. Paravirtualizace má za cíl vytvořit pro
virtuální systémy prostředí velmi podobné tomu fyzickému, k hardware se
pak přistupuje přímo pomocí speciálního aplikačního rozhraní. Výhodou je to, že
může být celý systém jednodušší a výkonnější, ale obrovskou nevýhodou je, že
hostovaný operační systém musí být upraven pro práci s tímto API, což
okamžitě vylučuje možnost použití proprietárních operačních systémů. Dalším
velmi podobným způsobem je virtualizace samotného operačního systému, kdy jedno
jádro OS samo vytváří a řídí více nezávislých uživatelských prostorů. Výhody a
nevýhody jsou velmi podobné, téměř žádné ztráty výkonu, nevýhodou je zde však nutnost
speciálního OS.
Intel VT-x a AMD-V
Zpět ale k HW asistované virtualizaci. Již z názvu
je patrné, že je nutná určitá podpora ze strany samotného hardware. U Intelu je
to VT-x, Intel používá podporu virtualizace ve svých procesorech i
k jejich marketingovému dělení, takže seznam procesorů s podporou
virtualizace je lepší hledat přímo u zdroje.
AMD podporuje svou virtualizační sadu mimo některých Sempronů ve všech
procesorech do patice AM2 a novější (tedy včetně Athlonů do AM2 založených na
architektuře K8). Dalším efektem těchto rozšíření je také to, že je pomocí
některých virtualizačních platforem možné virtualizovat 64b operační systémy i na
počítačích se 32b OS, pokud 64b zpracování kódu podporuje procesor.
Intel EPT a AMD/RVI
Obě tato rozšíření ale pomáhají pouze s vlastním
zpracováním kódu, vývoj jde ale kupředu a procesory už podporují i další generaci
rozšíření pro hardwarově asistovanou virtualizaci, nová rozšíření obsahují
AMD/RVI (Rapid Virtualization Indexing neboli dříve Nested Page Tables) a Intel
EPT (Extended Page Tables). Tyto technologie jsou přítomné v procesorech u
Phenom II (i Athlon II) a v procesorech rodiny Nehalem u Intelu.
Jejich význam spočívá v usnadnění práce s operační
pamětí, snižují při stránkování režijní náklady při dvojím překladu adresního
prostoru, kdy dochází k prvnímu překladu z virtuálních adres každého
procesu do adres fyzických, které jsou však ve virtualizovaných systémech také
virtuálními adresami, takže je nutné je ještě přeložit podruhé. Tyto
technologie umožní, aby hostované operační systémy mohly do vlastní paměti
přistupovat přímo.
Intel VT-d a AMD-Vi
Součástí druhé generace rozšíření pro HW asistovanou
virtualizaci je i AMD-Vi (dříve IOMMU – I/O Memory Management Unit) a Intel
VT-d (Virtualization Technology for Directed I/O), ty umožňují
z virtualizovaného prostředí přístup fyzickým k periferním zařízením
bez nutnosti jejich emulace. Měly by tedy umožnit přístup k hardware prostřednictvím
ovladačů přímo z hostovaného operačního systému. Záměrně píšu „měly by“,
protože je také nutná podpora základních desek a samozřejmě i virtualizačního software
a na to si budeme muset ještě počkat.
Testy výkonu
První sada testů proběhla naprosto běžně přímo na počítači, další dvě sady na dalších Windows 7 uvnitř VirtualBoxu, a to se zapnutým VT-x a dále i s EPT. VirtualBox sice nabízí i podporu běhu na procesorech bez HW podpory virtualizace, ale vzhledem k tomu, že většina procesorů už má alespoň podporu pro základní VT-x / AMD-V, jsem se rozhodl test v režimu bez HW asistované virtualizace vypustit. Důvodem bylo také to, abych mohl pro lepší porovnání výsledků použít stejné operační systémy – 64b. VirtualBox totiž umožňuje běh 64b systémů pouze s podporou HW virtualizace.
Testovací prostředí:
- AMD Phenom II X3 720 BE
- 2× 2 GB Kingston HyperX LoVo DDR3-1800
- MSI 870A-G54
- Windows 7 Enterprise 64b
- VirtualBox 3.2.10
- virtualizovaný systém měl přiřazena všechna tři jádra a 1536 MB RAM
Zde se vše chová dle očekávání, přímo na železe se provedl samozřejmě test nejrychleji (ostatně jako ve všech dalších testech).
U dalších testů mě ale čekalo překvapení, v režim s VT-x a EPT podával o něco nižší výkony než se samotným VT-x. Výkonový zisk asi není tak výrazný, aby ve všech případech dokázal vyvážit další režii, nebo prostě VirtualBox neumí tuto technologii ještě dokonale využít.
Že se nejednalo v minulém případě o chybu potvrdily i další testy. Dokonce je vidět i mírně horší škálování proti testu s jedním vláknem.
Cinebench v podstatě opakuje výsledky s tím rozdílem, že se ani jeden z testů s virtualizací nedokáže tak blízko přiblížit výkonu fyzického stroje.
I při testu převodu videa je samotné VT-x o něco málo rychlejší než druhý virtualizační test, ale rozdíl je dost malý.
V benchmarku programu Paint.NET se zase ukázalo, že EPT dokáže výkon zvýšit, ne ale o výrazný rozdíl.
Dále jsem vyzkoušel vestavěné testy programu Everest v5.30. Na nich je vidět, že jim ve většině případů virtualizace nedělala problémy a některé testy se velmi blížily výkonu na fyzickém počítači.
Testy rychlosti čtení a zápisu z/do operační paměti a její latence jsem provedl také, ale ve virtuálním stroji podávaly výsledky s příliš velkým rozptylem, než aby se daly považovat za nějak relevantní. Stejně tak i testy rychlosti pevného disku měly příliš vysoký rozptyl výsledků. U nich je ale příčina jasná. Mimo zpomalení běžnými vlivy hraje roli i způsob alokace obrazu disku virtuálního systému, který může být navíc na fyzickém disku ještě fragmentován.
Výsledek
Pokud by se dala všem výše uvedeným testům stejná váha, tak vyjde průměrný výkonový propad u obou režimů virtualizace stejně a to 93%. Průměrná sedmiprocentní ztráta výkonu mi přijde jako přijatelná daň za to, jaké výhody může virtualizace poskytnout (no, do provozních ztrát je nutné započítat ještě navíc obsazenou operační paměť).
Jak je vidět, tak výkon samotného zpracování instrukcí procesoru je dostatečný, to ale neznamená, že už nás nebude čekat v oblasti virtualizace nic nového. Významnou změnu by mohla přinést právě možnost přímo pracovat s ostatním hardware a periferiemi, protože například kvůli emulované grafické kartě je dojem z práce s virtuálním systémem o něco horší než spočtených 93 %.
Přesto stojí za to práci s virtuálními systémy alespoň vyzkoušet, zvláště když je k dispozici hned několik freeware nástrojů k virtualizaci. Já použil VirtualBox, ale freeware je rovněž VMware Player, který je zjednodušenou verzí placeného VMware Workstation. A pokud máte Windows 7 Professional nebo Ultimate můžete také využít Microsoft Virtual PC a XP mode, kde je součástí i licence na virtualizované Windows XP.