Výkonná virtualizace na domácím počítači

0

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.

Výkonná virtualizace na domácím počítači

Ohodnoťte tento článek!