Reklama

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

Čím dál tím častěji se setkáváme s virtualizací, ze serverů se pomalu dostává i na desktopy, kde už tedy také můžete výhody virtualizace využít. Do procesorů se dostaly další instrukční sady pro její podporu, tak si vysvětlíme, k čemu jsou užitečné a proč tam vlastně jsou.

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ů.

Reklama

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.

Průměr: 4.5 (22 hlasy)

Komentáře

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

V ramci virtualizace se nekdy lze dockat zajimavych prekvapeni. Napriklad benchmark CPUTest v davne dobe ve virtualizovanem OS (Vmware 1.x?) vykazoval vyssi score nez pri nativnim behu v hostitelskem OS. Mozna to melo souvislost s pojmem o case (pri mereni) v ramci Guesta. Takze prvni perpetuum mobile bylo asi virtualni. ;-)

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

Na Virtualizaci jsem prakticky odkazan, jinak prakticky nelze provozovat Cad/Cae Ideas pod Win Vista/7...
poznatky:
-Microsoft XP mode je k nicemu
-Nejvice se osvedcil VirtualBox
-Zahodte karty ATI... ve virtualizaccnich softwarech jsou s nimy jenom problemy
-Muzete mit v notebooku jakykoli procesor, ale pokud HW akceleraci virtualizace nepodporuje zakladni deska, tak si to stejne moc neuzijete... Pripad prakticky vsech NB HP Pavillion s Centrino 2.

Atd... Atp...

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

Je škoda, že testy výkonu jsou zaměřeny v podstatě pouze na CPU. Výkonnostní propad virtualizace se přitom mnohem více projevuje v přístupu k pevnému disku a síti (a samozřejmě v 3D grafice, ale to je ještě stále taková spíše experimentální záležitost). Jinak jako úvod pro nezasvěceného člověka je to pěkný článek.

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

"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."

To je úplný nesmysl. Emulátor naopak umožňuje spouštět přímo kód pro cizí platformu, která je na počítači emulována. Tedy vezmu hru např. pro nějaký ten osmibit, spustím emulátor a v něm spustím onu hru. To co jste tady napsal vy by znamenalo, že vezmu Wolfenstaina ve verzi pro PC, spustím emulátor, v něm spustím Wolfenstaina a ten emulátor mi bude kód toho Wolfenstaina realtime překládat pro ten osmibit a na něm to pak poběží (teď se samozřejmě nebavíme o tom, jestli by to výkonově stíhalo nebo ne).

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

Ja pochopil autora tak, ze instrukce emulovane platformy jsou prekladany do instrukci hostitelske platformy (jejich vysledek je pak shodny s vysledkem puvodnich instrukci). Preklad se provadi bud za behu (asi vetsina emulatoru), nebo predem (slozitejsi/vykonnejsi).

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

Pokud byste takto emuloval program, který např. vezme obsahy dvou registrů procesoru, sečte je a výsledek uloží zase do registru, tak byste nejspíš triumfoval. Ale tohle nemá nic společného s emulací jiné platformy ;-).

Sám jsem autorem emulátoru osmibitového ZX Spectra. Tam máte osmibitový procesor, 64 kB paměti, od adresy 16384 se nachází obrazová paměť, která je zákaznickým obvodem ULA cyklicky čtena s frekvencí 8 MHz a posílána do televizoru. Tohle vše je třeba emulovat programově. Když si vezmete kus kódu, který třeba vykreslí pomocí bodů kružnici tak, aby se na emulované obrazovce ZX Spectra (256x192 bodů) vykreslila se středem např. 50,50 a s poloměrem 25 bodů, jaký asi bude mít smysl překládat program ve strojovém kódu procesoru Zilog Z80 do kódu x86, když ten s emulovanou platformou nemá nic společného ? A to nemluvím o efektech, kterých se dosahuje díky znalosti toho, kolik instrukčních cyklů která instrukce trvá, např. speciální borderové efekty atd. ?

Naopak, k problému je třeba přistoupit tak, že programově bude emulován čip Z80, který bude načítat z rovněž emulované paměti Z80 kód, dekóduje instrukce a podle toho provede nějakou změnu. Půjde tedy o programový modul, který bude mít vlastní paměť a bude pracovat jako konečněstavový stroj.

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

Muj prispevek byl minen jinak. V dobe 8bitovych pocitacu jsem s pocitaci zacinal (byt na druhe strane barikady s C=16 MC6502), takze o principu jejich fungovani vcelku predstavu mam. Konkretne v tom mem zacinala graficka pamet od adresy 0x2000. ;-)

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

Výborně! :-) Pak bychom se měli shodnout minimálně na tom, že emulace není překlad z jazyka do jazyka ať už z jakéhokoliv úhlu pohledu chcete.

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

S tim nemam problem. Ten pojem preklad byl minen spis obrazne.

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

Ano, to jsem tam nenapsal úplně šťastně. A vzhledem k tomu, že jste podle svých slov oba vytvářeli emulátory, máte s touto tematikou větší zkušenosti než já. Moje myšlenka byla taková, že při emulaci není spouštěn kód původního programu na fyzickém hardware, což je snad pravda. (Na rozdíl od virtualizace, kde je právě cílem spouštět původní kód, tedy jeho většinu, přímo na hardware.)

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

DOSBox lze prepnout mezi interpretaci a dynamickym prekladem kodu
volba CPU.core = dynamic prepne emulaci do modu dynamickeho prekladu
http://www.dosbox.com/wiki/Dosbox.conf#core_.3D_simple_.7C_normal.7C_dyn...
popisovany emulator ZX Spectra je emulace (simulace) cele platformy, podobne jako napr. MAME

Re: VirtualBox versus XP mode

Zajímalo by mě porovnání třeba VirtualBoxu s XP módem v W7.
Právě s XP módem máme velmi špatné zkušenosti. Na každém hardwaru se chová jinak, ale v zásedě na všem jede neuvěřitelně pomalu (tak že se nedá použít).

Re: VirtualBox versus XP mode

VirtualBox je proti XP modu krasne pouzitelny.

Re: VirtualBox versus XP mode

Na to k cemu je XPmode koncipovan (provoz starsich business XP-only aplikaci) by mel stacit. V takovem pripade je poskytnuti licence pro virtualni WXP vcelku cenne. Pro reseni na VirtualBoxu by asi byla nutna samostatna retail licence. Novou mozna uz dnes ani nelze sehnat a downgrade dalsi retail W7Pro->XP pro VirtualBox uz skoro zavani rekurzi ;-).