Objavljeno: 26.9.2006 11:31 | Avtor: Matej Šmid | Monitor September 2006

Navidezno ali resnično?

Novi Intelovi in AMDjevi procesorji strojno podpirajo virtualizacijo, nekaj torej, kar so veliki računalniki podpirali že v šestdesetih letih prejšnjega stoletja. Pa je nova podpora res enakovredna tej "zaresni" virtualizaciji in ali res kaj pripomore pri programski virtualizaciji (Vmware...), kot jo poznamo danes?

Zakaj se sploh zateči k virtualizaciji oziroma navideznim računalnikom? Navidezni računalnik prinaša dve prednosti: popoln nadzor nad gostujočimi operacijskimi sistemi in programi v njih ter (skoraj) brezplačno ponovljivost; prednost realnega računalnika pa je boljša odzivnost in hitrejše izvajanje operacijskih sistemov in njihovih programskih aplikacij. Zakaj torej navidezno? Nekateri programi preprosto ne morejo sobivati, še posebej, če so napisani za tako različne operacijske sisteme, kot sta Windows in Linux. Če mora torej vsak teči v svojem računalniku, to pomeni, da potrebujemo v realnem svetu toliko fizičnih računalnikov (navadno računalniških strežnikov), kolikor je aplikacij, to pa je nemalokrat zelo potratno in drago za vzdrževanje. Nasprotno nam virtualizacija računalnikov omogoča izvedbo velikega števila strežnikov v enem samem fizičnem računalniškem strežniku. Vzdrževanje je tako lahko cenejše in enostavnejše (ključni razlog, zakaj je virtualizacija že pred desetletji sploh zaživela), ni pa nujno, da je tak sistem tudi bolj zanesljiv, saj se ob strojni okvari gostitelja vsi navidezni računalniki "sesujejo v prah" ali pa ob preobremenitvi gostiteljskega strežnika odzivni časi navideznih računalnikov postanejo neprijetno dolgi. Kako je torej strojna oprema pripravljena na virtualizacijo?

Osnovni koncept podpore delovanju navideznih računalnikov (VT-x in SVM): Vsak navidezni računalnik ima lahko enega ali več navideznih procesorjev (NP), ki so preslikave logičnih procesorjev. Vsak lahko poganja svoj operacijski sistem.

Nenehna virtualizacija

Virtualizacija je odgovor na vprašanje, kako lahko zaporedni računalnik z eno samo procesno enoto hkrati izvaja veliko ločenih operacijskih sistemov, nekako tako kot lahko en operacijski sistem ločeno izvaja več programov, kar imenujemo večopravilnost.

V začetkih računalništva je lahko en računalnik hkrati izvajal le po en program hkrati, izvajanje pa je bilo zelo drago. Zato so računalniški strokovnjaki izumili paketno obdelavo. Medtem ko je računalnik veselo mlel podatke, je imel za izvajanje že pripravljenih več naslednjih programov v optimalnem zaporedju; navadno tako, da so se krajši programi izvedli prej, na rezultate daljših pa je bilo treba počakati tudi do naslednjega dne. Toda silno zahtevni programi, ki so tekli po več dni, so lahko, denimo, ogrozili izvajanje programa za izračunavanje plač v računalniškem centru. Porodila se je zamisel, da bi programe v istem računalniku izvajali navidezno vzporedno, tako da bi procesorski čas razdelili na časovne rezine, v katerih bi procesna enota po načelu delitve časa (time sharing) po vnaprej določenih prednostih po delih izvajala različne programe. Pri tem je bilo treba pri preklopih med programi zagotoviti shranitev vrednosti procesorskih registrov oziroma konteksta procesne enote. V začetku je bila strojna podpora skromna (podpora skladu, angl. stack), pozneje so procesorji dobili kompleksne strojne ukaze za shranitev pretežnega dela ali celotnega konteksta (že Pentiumi so lahko večino konteksta v sklad shranili z ukazom PUSHAD) in celo večkratne nabore programskih registrov (shranjevanje v procesorski sklad torej ni potrebno); to v sodobnih procesorjih zasledimo tudi danes.

Naslednja razvojna stopnja je uvedba navideznega pomnilnika, s katero je bila odpravljena potreba po prilagajanju programov za izvajanje v določenem delu fizičnega pomnilnika, ki je v sedemdesetih in osemdesetih letih grenila življenje številnim programerjem v računalniških centrih. A to ni tako daljna preteklost, če vemo, da so še v operacijskem sistemu DOS morali biti vsi izvedljivi programi v strojni kodi pripravljeni tako, da jih je lahko DOS samodejno prilagodil za izvajanje v poljubnem kosu fizičnega pomnilnika. V Oknih, ki uporabljajo navidezni pomnilnik, to ni več potrebno, saj je vsakemu programu (oz. procesu - program ima lahko več procesov) ob zagonu dodeljen enak segment dozdevno neskončnega navideznega pomnilnika, ki se lahko s pomočjo tehnologije ostranjevanja (paging) širi tudi na disk, kadar fizičnega pomnilnika ni dovolj. Preračunavanja pomnilniških naslovov v navideznem pomnilniku v naslove v fizičnem pomnilniku samodejno izvaja enota za upravljanje pomnilnika (Memory Managment Unit, MMU), ki je pri AMDjevih procesorjih del procesorja, pri Intelovih pa del osnovnega vezja. Pomembna naloga MMU je tudi zaščita pomnilnika, s katero prepreči, da bi programi imeli samovoljno dostop do navideznega pomnilnika drugih programov.

Omenimo še, da je razvoj MMU sicer potekal postopno in da je bila MMU v začetku samostojna računalniška enota, skoraj tako zapletena kot sam procesor. Uporabniki osebnih računalnikov smo zelo izpopolnjeno različico MMU dobili že s procesorjem 80286, MMU v skoraj današnji obliki pa že s 80386. Ne smemo pozabiti, da je MMU 80286 prinesel tudi zametke podpori navideznim računalnikom, kot jih poznamo danes.

Je virtualizacija samo "modna muha"?

Nova tehnologija veliko obeta, že danes pa kaže, da se virtualizacija pospešeno "prijemlje" v strežniškem svetu. Močan strežnik z več navideznimi stroji je enostavno veliko laže nadzorovati in upravljati, kot bo to kdaj mogoče s kopico samostojnih in neodvisnih strežnikov. Še posebej je treba izpostaviti skalabilnost oziroma možnost hitrega dodajanja novih strežnikov, ki je v navideznem svetu stvar le nekaj minut dela. Izredno enostavna je tudi selitev (delujočih!) operacijskih sistemov iz enega fizičnega računalnika na drugega, česar uporabniki tako preseljenega računalnika sploh ne opazijo (oz. opazijo največ eno sekundni zamik delovanja). Take selitve lahko prepustimo celo avtomatiki, ki jih izvršuje glede na obremenjenost strojne opreme. Ker so današnje rešitve VMM še vedno zgolj programske in zato vendarle dokaj počasne, je pričakovati, da se bo z zgoraj opisanimi strojnimi nadgradnjami procesorjev, ki jih vsebujejo vsi novejši Intelovi in AMDjevi procesorji, priljubljenost teh rešitev še povečala.

Po drugi strani pa ni pričakovati, da bo virtualizacija na tako nizkem nivoju v bližnji prihodnosti našla svoje mesto tudi v osebnih računalnikih oziroma delovnih postajah (razen razvijalcev in nekaterih nišnih uporabnikov paketov, kot je VMWare Workstation). Intel na svojih predstavitvah sicer rad razlaga o "virtualiziranih" domačih računalnikih, ki bodo hkrati poganjali igre in predvajali filme DVD, vendar je to zaenkrat videti bolj pobožna želja kot bližnja prihodnost. Bolj je za pričakovati vzpon t.i. aplikacijskih virtualizacij, kot jih danes omogočajo rešitve Altiris (o tem smo že pisali) in Softricity. Slednje je pred kratkim kupil Microsoft...

Navidezni stroji

Pri listanju po dokumentaciji starejših Intelovih procesorjev zasledimo tudi pojem "Virtual 8086 mode" (navidezni način 8086), ki dejansko pomeni strojno podporo virtualizaciji "dosovskega" računalnika in programov v njem. Ker je razvoj programske opreme potekal počasneje od razvoja mikroprocesorjev, je navidezni način 8086 zares zaživel šele z 80386 in 80486. Toda z njim smo v svetu pecejev dejansko že dobili prve navidezne računalnike.

Windows 95 je omogočal vzporedno izvajanje več navideznih računalnikov z operacijskim sistemom DOS, ni pa imel celovite strojne podpore, ki bi omogočila izvajanje splošnih navideznih računalnikov s poljubnim večopravilnim operacijskim sistemom, kot sta Windows ali Linux. To je prinesla šele tretja razvojna stopnja, ki je temeljila na zapleteni programski opremi brez dodatne podpore v strojni opremi. Njen osnovni del je nadzornik navideznih računalnikov (VMM, Virtual Machine Monitor), ki ga namestimo v gostiteljski računalnik. Naloga VMM je podpora delovanju navideznih računalnikov, v katere namestimo gostujočo programsko opremo, ki je sestavljena iz operacijskega sistema in programov.

Danes med programskimi paketi VMM za vzpostavitev gostiteljskega strežnika vlada velika pestrost. Na prvem mestu so gotovo rešitve VMWare (VMWare ESX Server, zastonjski VMWare Server, VMWare Workstation 5.5 ...), sledijo mu Microsoftove rešitve (Microsoft Virtual Server 2005 in Microsoft VirtualPC 2004), Virtouzza (Virtouzzo Windows 3.5 in Virtouzzo Linux 2.6), Xena (Xen Virtual Machine Monitor 3.0) in še nekaj rešitev drugih izdelovalcev, ki so izdelali gostiteljske strežnike tudi za nepecejevske strojne osnove. Po drugi strani smo danes ravno na prehodu med tretjo in četrto razvojno stopnjo navideznih računalnikov, ko so ustvarjalci programske opreme za virtualizacijo ugotovili, da bi lahko gostiteljske navidezne strežnike bistveno pohitrili z ustrezno strojno podporo. Zamisel so podprli tako v Intelu kot v AMD.

Intel je pripravil tri tehnologije za strojno podporo virtualizaciji, ki so nastajale pod razvojnim imenom Vanderpool: VT-x za arhitekturo IA-32 oziroma 32-bitno arhitekturo, skupaj s 64-bitnimi arhitekturami, izvedenimi iz nje (nekateri Xeoni), VT-i za popolnoma 64-bitno itaniumovsko arhitekturo IA-64 in VT-d za podporo virtualizaciji vhodno/izhodnih naprav in krmilnika DMA. Dopolnitev v IA-32 je bistveno več, arhitektura IA-64 pa je doživela le manjše spremembe, saj je strojna podpora navideznim računalnikom IA-32 vgrajena že od samega začetka. Pri obeh arhitekturah je uporabljena tudi tehnologija VT-d.

V AMD so pod razvojnim imenom Pacifica za svoje nove 64-bitne procesorje pripravili tehnologijo SVM (Secure Virtual Machine, varni navidezni stroj) in v svoje procesorje vgradili novo enoto za upravljanje pomnilniškega prostora vhodno/izhodnih naprav, IOMMU (Input/Output Memory Management Unit). Naloga slednje je omogočanje preslikav naslovov posameznih vhodno/izhodnih naprav, obenem pa tudi njihova vitrualizacija. V osnovi gre v obeh primerih za podobne razširitve, kot so jih za IA-32 pripravili v Intelu.

Virtualizacija četrtega rodu: APx je program, OS je operacijski sistem, DMA je krmilnik neposrednih pomnilniških prenosov (Direct Memory Access controler).

Intelova VT-x in VT-i

Osnova VT-x je nov način delovanja procesorja, VMX (Virtual Machine Extensions,VMX), ki se deli na dva podnačina: korensko (root) delovanje VMX in nekorensko delovanje VMX. Procesor izvaja VMM med korenskim delovanjem VMX (VMX root operation), programsko opremo v gostujočih navideznih računalnikih pa med nekorenskim delovanjem VMX (VMX non-root operation). Prehod iz nekorenskega delovanja VMX v korensko delovanje VMX so v Intelu poimenovali izhod VM (izhod iz navideznega stroja, Virtual Machine exit), nasprotni prehod pa vhod VM (vhod v navidezni stroj, VM entry). Procesna enota se pri korenskem delovanju VMX obnaša podobno kot takrat, ko ni v načinu VMX, le da dovoljuje tudi uporabo novih strojnih ukazov VMX (VMX instructions), hkrati pa je omejen nabor vrednosti, ki jih lahko vnesemo v nekatere nadzorne registre. Pri nekorenskem delovanju VMX je delovanje procesorja omejeno tako, da zadošča zahtevam VMM. Nekateri strojni ukazi in dogodki v tem načinu povzročijo izhod VM in s tem sprožijo VMM, ta pa ob upoštevanju svoje varnostne politike izvede ustrezne akcije. Programi v navideznem računalniku hkrati nimajo možnosti ugotoviti, da se izvajajo v načinu VMX. To velja celo za kodo, ki se izvaja v načinu delovanja z najvišjo trenutno stopnjo privilegijev CPL 0 (Current Privilege Level). To dejansko pomeni, da ima "nadnajvišje" privilegije le VMM pri korenskem delovanju VMX.

Zdaj lahko v grobem opišemo življenjski cikel VMM ob uporabi strojne podpore VMX. Prehod v način delovanja VMX sproži strojni ukaz VMXON. VMM začne oziroma nadaljuje izvajanje navideznega računalnika z ukazoma VMLAUNCH in VMRESUME, nadzor pa spet prevzame vsakokrat, ko pride do izhoda VM. Do slednjega pride tudi na podlagi procesorskih prekinitev (interrupts) v okviru dodeljevanja procesorskih časovnih rezin posameznim navideznim računalnikom. Ob koncu svojega delovanja VMM sproži strojni ukaz VMXOFF, s katerim procesor zapusti način VMX.

Pri prehodih med nekorenskim in korenskim delovanjem VMX procesor preklaplja med konteksti s posebno nadzorno strukturo (VMCS, Virtual Machine Control Structure) za vsak logični procesor fizičnega računalnika. Lokacija VMCS v fizičnem pomnilniku je določena s 64-bitnim kazalcem, ki ga v procesor vnesemo ali iz njega preberemo s posebnim parom strojnih ukazov. Zanimivo, da potrebujemo tudi za vpis ali spremembo podatkov v VMCS posebne strojne ukaze: VMREAD, VMWRITE in VMCLEAR. Od podrobnosti velja omeniti le še to, da lahko nenavzočnost strojne podpore načina VMX v svojem procesorju preverimo z izpisom vrednosti registra CPUID, ker mora biti vrednost bita 5 enaka 1.

Itaniumova tehnologija VT-i je zelo podobna VT-x, a je kljub temu še nekoliko bolj izpopolnjena, saj vsebuje tudi procesorski abstrakcijski nivo (PAL, Procesor Abstraction Layer), ki omogoča izvajanje kode drugih procesorjev - predvsem Intelovih, z arhitekturo IA-32. Namesto VMCS in ustreznega kazalca na VMCS ima Itanium strukturi VPD (opisnik navideznega procesorja, Virtual procesor Descriptor) in stanje navideznega procesorja (VPS, Virtual Procesor State). Kljub vsemu pa razlik ni toliko, da bi jih morali posebej omenjati.

Primerjava med programsko in strojno virtualizacijo vhodno/izhodnih naprav (oz. enot)

AMD SVM

Logika v ozadju AMDjeve tehnologije SVM je zelo podobna Intelovi, čeprav hitro opazimo manjše razlike. Način delovanja SVM vklopimo s postavitvijo vrednosti enega izmed bitov v registru EFER MSR na 1. Takrat lahko uporabljamo nove strojne ukaze SVM (VMRUN, VMLOAD, VMSAVE, VMMCALL, STGI, CLGI, INVLPGA), katerih način delovanja je podoben kot pri Intelovih strojnih ukazih VMX. Tako kot pri Intelovi VT-i poznamo nadzorno strukturo navideznega računalnika, ki se tokrat imenuje VMCB (nadzorno polje navideznega stroja, Virtual Machine Control Block). Vsebuje seznam strojnih ukazov in dogodkov, ki jih mora VMM prestreči. Z različnimi nadzornimi biti je v VMCB določeno tudi okolje navideznega računalnika in programske akcije, ki jih je treba izvesti pred vstopom v neki navidezni računalnik (pri Intelu je to vhod VM). VMCB hrani tudi kontekst za vsak navidezni računalnik.

Virtualizacija vhodno/izhodnih naprav: VT-d in IOMMU

Bistveni mehanizmi, ki jih tako Intelov VT-d kot AMDjev IOMMU ponujata VMM, so trije: omogočata neposredno preslikavo poljubnega naslova vhodno/izhodne naprave na poljubno lokacijo v vhodno/izhodni naslovni prostor poljubnega navideznega računalnika. Zagotavljata virtualizacijo krmilnika DMA (Direct Memory Access controller, krmilnik za neposredne pomnilniške prenose), in sicer z virtualizacijo naslovov njegovih registrov v pomnilniški prostor posameznega navideznega računalnika. S strojno podporo zagotavljata nadzor VMM nad napakami pri prenosih DMA, ki jih izvajajo navidezni računalniki. Osnova za vse preslikave so preslikovalne tabele.

Način delovanja VMX

Kaj lahko pričakujemo?

Izdelovalci današnjih programskih "nadzornikov" ali MMUjev si od nove strojne podpore na ravni procesorja obetajo predvsem višjo hitrost delovanja, uporabniki pa poleg tega še večjo stabilnost. Množica programskih zvijač, ki so danes bržkone ena bolje varovanih skrivnosti tega posla, bo namreč nadomeščena z veliko manj ključnimi ukazi procesorju, ki bo sam preklapljal med stanji, ki jih bodo od njega zahtevali različni hkrati delujoči sistemi.

Da to vendarle ni tako trivialno, kot se morda bere, kaže dejstvo, da tudi pol leta po prvi predstavitvi novih procesorjev na trgu še ni ustreznih virtualizacijskih paketov največjih ponudnikov (VMWare, Microsoft), ki bi jih znali izkoristiti. S tem da so razvijalci nove procesorje zagotovo lahko preizkušali že precej pred uradno predstavitvijo. Trenutno je na voljo le različica odprtokodnega Xena, ki se virtualizacije loteva tudi s strojno podporo. Ena ključnih prednosti te različice je, da lahko na linuxovski Xen po novem namestimo tudi več okenskih odjemalcev oziroma operacijskih sistemov; tega popolnoma programski Xen ni zmogel.

Med razlogi za to, da večji izdelovalci niso hitreje "zapopadli" strojne podpore virtualizaciji, je gotovo tudi nezdružljivost AMDjeve in Intelove rešitve oziroma potreba po hkratnem razvoju dveh različnih rešitev. In, ne nazadnje, tovrstna virtualizacija še vedno ostaja bolj ali manj le na ravni virtualizacije procesorskih ukazov, medtem ko mora celoten MMU znati virtualizirati tudi pomnilnik in v celoti tudi vhodno izhodne naprave (diske).

Naroči se na redna tedenska ali mesečna obvestila o novih prispevkih na naši spletni strani!

Komentirajo lahko le prijavljeni uporabniki

 
  • Polja označena z * je potrebno obvezno izpolniti
  • Pošlji