Virtual PC / Virtual Server virtualizációs technikák

Micskei Zoli az egyik korábbi bejegyzéssel kapcsolatban egy kisebb kérdéssort tett fel. Úgy ítéltem meg, hogy jobb egy külön cikkben válaszolni. A kérdések (és az azokból fakadó további kérdések) a következők voltak:

  1. Virtual PC / Virtual Server alatt a VMAdditions telepítése módosítja-e az emulált videokártya típust?
  2. A vendég operációs rendszerek ring1-ben futtatása miért okoz teljesítmény növekedést?
  3. Hogy működik a VirtualPC, ha nincs HW-es virtualizáció, és nincs VM Additions telepítve?
  4. Mi a "ring compression" és a "ring deprivileging" közötti különbség? Helyesen használja-e ezeket a fogalmakat a Microsoft?
  5. Mennyiben más a Virtual PC architektúrája, mint a Virtual Server-é? (A Virtual PC architektúrájáról alig van forrás)

Kezdjük a válaszadást a legutolsó kérdéssel. A Virtual PC és a Virtual Server – a virtualizációs technikákat tekintve – azonos felépítésű. Persze sok különbség van közöttük, de ezek a megcélzott felhasználói körhöz tartozó egyéb szolgáltatásokból erednek. Íme az öszefoglalás:

  Virtual Server Virtual PC
Azonos funkciók implementációs különbségei

Több host processzor
Többszálúság
Több CD-ROM meghajtó
NAT csak Host ICS-en keresztül
Korlátlan virtuális hálózat

Csa egy host processzor
Minden VM egy közös végrehajtási szálon fut
Egyetlen CD-ROM meghajtó
NAT támogatás
Hálózat host (loopback) adapterenként

Csak az egyik vagy másik termékben meglévő funkciók

SCSI diszk a virtuális gépekben
COM API
Távfelügyelet (Remote Management)
Szolgáltatásként fut
Virtuális gépek automatikus indítása

Hangkártya a virtuális gépben
Közös mapp (Folder Sharing)
Fogd-és-vidd
Vágólap-megosztás

Az első két kérdésre egy-egy mondattal lehet válaszolni:

  1. A VmAdditions nem módosítja az emulált videókártya típusát, de egy "jó" eszközmeghajtóval cseréli le az eredeti meghajtót. Így válik lehetővé például a menet közbeni ablak átméretezés.
  2. A ring1-ben futtatás önmagában nem okoz teljesítmény növekedést.

A harmadik és negyedik kérdés szorosan összefügg, ez érdemes részletesebben is kifejteni. Lássuk mindenek előtt a fogalmakat.

  • Virtual Machine Monitor (VMM): Az a szoftverkomponens, amely a virtuális gépeket felügyeli és erőforrásokkal látja el. Ez a hardver virtualizációs megoldások szíve-lelke-közepe. A Virtual PC/Server esetén a VMM egy kernel módú rendszerfájl (bal oldali ábra). Valójában azonban helyes a jobb oldali rajz is, mivel a processzor felosztja az idejét és egyszer a gazdagép kernelét futtatjam, egyszer pedig a VMM-et, amely azután kezeli a vendég-gépeket.

image image

  • Ring aliasing. Az a tchnnológia amely során a virtuális gép operációs adott komponsei (tipikusan a kernel) számára más futási szintet prezentál a VMM, mint amilyenen azok ténylegesen futnak. A más minden esetben alacsonyabb privilégium szint (paradox módon magasabb számérték), mint a VMM szintje. A virtuális gépek kerneleinek alacsonyabb privilégium szintre tolását "ring deprivileging"-nek nevezzük. Magyarul ezt jogosultság-szűkítésnek lehetne fordítani. A "Ring aliasing" és a "ring deprivileging" tehát gyakorlatilag szinoním fogalmak.
  • A Ring deprivileging módszer kétféle modellt követhet. A 0/3/3 modell szerint a VMM ring0-ban, a vendéggép kernele és az alkalmazásai pedig ring3 szinten futnak. A 0/1/3 modell szerint a VMM ring0-ban, a vendéggép kernele ring1-ben, a vendéggép alkalmazásai pedig ring3-ban futnak, lásd alábbi táblázat:
  0/3/3 modell 0/1/3 modell
ring3 GuestOS Kernel/GuestOS alkalmazások Guest alkalmazások
ring2    
ring1   GuestOS kernel
ring0 VMM VMM

A privilégium szintek egy szintbe való "összenyomását" nevezik hivatalosan "ring compression"-nek. Vagyis a ring compression elvileg a ring deprivileging egyik alváltozata. A Microsoft azonban a másik modellre is következetesen a ring compression fogalmat használja! Nézőpont kérdése, hogy helyesen-e.
Megjegyzendő, hogy a 0/3/3 esetén a vendéggép kernel elveszíti a védelmet az alkalmazásaival szemben, ezért ez nem követendő módszer. A Virtual Server és PC nem is ezt követi, hanem:

  • A Virtual Server és Virtual PC, függetlenül attól, hogy a vendéggépen telepítették-e a VmAdditions-t a 0/1/3 ring deprivileging módszert alkalmazza.

Már csak egy kérdés maradt: vajon mitő gyorsul a VmAdditions telepítésével az összes Windows-os vendéggép. Nos, azért, mert a VMAdditions telepít egy boot-fázisban induló kernel módú komponenst, amely a kernel betöltődésekor magát a kernelt a memóriában megfoltozza (in-memory patching!), hogy bizonyos kritikus, nagy többletterhelést okozó utasítások helyett a rendszer más, jól virtualizálható utasításokat adjon ki. Értelem szerűen ennek a megoldásnak számos korlátja van:

  • Csak Windows operációs rendszer esetén működik, Linux és egyéb rendszereknél nem. A Linuxok "másodlagos állapolgárok" a Virtual Server alatt, hacsak nincs hardveres virtualizáció támogatás (lásd alább)
  • A Vista/Windows Server 2008 x64-es kiadásai az ilyen megoldásokat nem teszik lehetővé (Rootkitek elleni védekezés). Vagyis az új verziók ezt a módszert már nem alkalmazhatják.

A hardveres virtualizáció bevezetése a fenti táblázatot az alábbiak szerint módosítja

  0/1/3 modell
ring3 Guest alkalmazások
ring2  
ring1  
ring0 GuestOS kernel
ring -1 VMM

Mivel ebben az esetben minden komponens azon a privilégium szinten fut, amelyre tervezték, és minden utasítást változatatás nélkül kiadhat, ezért nincs szükség a ring deprivileging technikára. És mivel a ring deprivileging teljesítmény-veszteséget jelentett, ezzel ez a veszteség is elmarad. A hardveres virtualizáció azért nem jelent teljesítmény-növekedést a működő Windows rendszerek számára, mert azok eleve nem adnak ki "drága" utasításokat. Viszont a memóriában nem átírt alkalmazások (tipikusan Linux) jelentősen felgyorsulnak, ha a processzor a hardveres-virtualizációt támogatja. Emellett teljesítmény-növekedés könyvelhető el a Windows rendszerek telepítése során is, hisz ilyenkor még nincs telepített VMAdditions.

One Response to Virtual PC / Virtual Server virtualizációs technikák

  1. Zoltan says:

    Köszönöm a részletes válaszokat!:)
     
    Az in-memory patching érdekes dolognak tűnik, ez alapján keresve most találtam David Propert előadását, itt van róla még egy kicsit részletesebben szó.
    Ebben az előadásban van még egy rész, ahol a ring compressiont úgy definiálja, hogy "Guest ring-0, 1, 2 code is executed at ring 1", "Guest ring-3 code is executed at ring 3". Ilyen értelemben tényleg összenyomja ez a technika a 0,1,2 ringet a ring 1-be, csak nehezíti az eligazodást, hogy más meg arra használja a ring compression kifejezést, amikor a ring 0-t és ring 3-at nyomjuk össze a ring 3-ba. Mindkettőnek van valahol létjogosultsága, a virtualizáció egy ilyen terület, a szakszavak nem igazán tisztázottak még:)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: