2017 m. liepos 1 d.

Virtualizacijos raida x86 architektūros kompiuterio sistemoje [1 dalis]

Virtualizacija viena iš esminių technologijų kompiuterijos infrastruktūrai valdyti, naudojama nuo vidutinio ar smulkaus verslo kompiuterių tinklų iki debesų kompiuterijos milžinų. Jos indėlis į debesų kompiuterijos raidą neginčijamas. Virtualios infrastruktūros taikymas ženkliai sumažina finansines išlaidas infrastruktūros palaikymui, didina informacinių technologijų produktyvumą, padeda formuoti lankstesnę ir patikimesnę kompiuterijos infrastruktūrą visoms organizacijoms.
Šiandienos centralizuotą kompiuterijos infrastruktūra – dažnai vadinama debesų kompiuterija – sulipdyta iš x86 architektūros kompiuterių, būtų sunku įsivaizduoti be virtualizacijos technologijų. Todėl šiame blogo įraše nusprendžiau pradėti virtualizacijos raidos apžvalgą x86 architektūros kompiuterių sistemose. Dėl savo apimties nagrinėjama virtualizacijos tema bus padalyta į keturias dalis:
  1. Virtualizacijos raida x86 architektūros kompiuterio sistemoje
  2. Kompiuterių platformos virtualizacijos metodai
  3. Virtualizacijos nauda ir taikymo pavyzdžiai
  4. Populiariausi visiškos virtualizacijos sprendimai
Virtualizacijos apžvalgoje visas dėmesys skirtas x86 platformos aparatinės įrangos virtualizacijai, kadangi šio tipo sistemos plačiai taikomos, lengvai prieinamos, pasižymi žema kaina ir itin didele skaičiavimų sparta. Tai kompiuterių architektūra dominuojanti ne tik asmeninių kompiuterių rinkoje, serverių sistemose bet ir superkompiuteriuose. Galiausiai x86 platformos virtualizacija tiesiogiai paveikė debesų kompiuterijos raidą.


Kaip matyti iš paveikslo, remiantis top500.org duomenimis, 500 galingiausių superkompiuterių veikia su x86 architektūros sistemos viduriais. Įdomu tai, jog x86 šeimos procesoriai buvo sukurti kaip kompaktiškų sistemų dariniai, jų pradinė panaudojimo paskirtis buvo visiškai priešinga centriniams {mainframes} ir superkompiuteriams.
Iš tiesų, x86 architektūros visiška virtualizacija ne visad buvo taip lengvai prieinama kaip nūdien. XXI amžiaus pradžioje tik keletas programinės įrangos kūrėjų sugebėjo pakankamai efektyviai virtualizuoti x86 platformą. Ilgą laiką kompiuterijos centralizavimo procesą (debesis) stabdė šių sprendimų (programinės įrangos) kaina, nepakankamai išvystytas pasaulinis kompiuterių tinklas ir galiausiai santykinai lėtos x86 kompiuterių sistemos.
Kita vertus, kompiuterių sistemų centralizavimas nieko naujo, pirmieji kompiuteriai buvo per daug dideli ir brangūs, jog po viena pastatyti kiekvienam norinčiam juo pasinaudoti. Todėl IBM kompanija dar 1972 metais pristatė "System/370" centrinį kompiuterį {mainframe} su "VM/370" operacine sistema. Ši aparatiniu lygmeniu palaikė visišką sistemos virtualizaciją. Kiekvienam OS vartotojui buvo sukuriama atskira kompiuterio imitacija – virtuali mašina, jos galimybės prilygo fizinio kompiuterio galimybėms. IBM "VM/370" OS padėjo pagrindus virtualizacijai ir leido daugeliui vartotojų patogiai dalintis, tuo metu ypač brangia, kompiuterio sistema.

IBM S/370 centrinio kompiuterio pultas {console}

Tačiau didelė paklausa elektroniniams prietaisams vertė gamintojus nuolatos ieškoti pigesnių ir našesnių gamybos technologinių procesų, taip mažinant elektronikos kainas iki visiems prieinamos prekės. Nuolatinis mokslo ir technologijos progresas, integrinių grandynų gamybos įsisavinimas, privertė kompiuterių matmenis trauktis fiziškai, o skaičiavimų spartą didino eksponentiškai.
Netrukus, laisvą nišą įžvelgė asmeninių kompiuterių pionieriai Steve Jobs ir Steve Wozniak, 1976 metais įkūrė pirmąją asmeninių kompiuterių (AK) Apple kompaniją tėvų namo garaže. Netrukus AK rinką atrado ir IBM kompanija, tuometinis vadinamųjų centrinių kompiuterių {mainframe} gigantas, 1981 metais pristatė savo pirmąjį asmeninį kompiuterį ir vieną įtakingiausią jų istorijoje – IBM PC. Šis nuo pat pradžios sėkmingai konkuravo su Apple ir netrukus dominavo asmeninių kompiuterių rinkoje.

Asmeninis kompiuteris IBM PC 5150

Kartu su IBM asmeninių kompiuterių tipo sistemomis įsigalėjo ir x86 architektūros mikro-procesoriai. IBM PC dėka x86 architektūra tapo ne tik Intel kompanijos sėkmingiausia procesorių šeima, bet ir de facto standartu kompiuterių sistemose iki šių dienų.
Reikia pažymėti, jog plačiai paplitę AMD ir Intel 64-bitų procesoriai, ir jų programinė įranga, dažnai kiek apgaulingai žymimi x64 arba amd64 terminais, tačiau priklauso tai pačiai x86 architektūrai. Rekomenduojama naudoti x86-64 ir x86_64 žymėjimus, jie turi užuomina apie išplėstą x86 architektūrą iki 64-bitų sistemos.
Skaičiavimams IBM PC naudojo Intel 8088 mikro-procesorių – modifikuota ir pigesnė 8086 atmaina. Nors 8088 nebuvo labai spartus procesorius, veikė tik 5 Mhz dažniu, bet buvo ekonomiškas kainos atžvilgiu. Galiausiai jo užteko, jog IBM ne tik įsilietų, bet ir padėtų sukurti asmeninių kompiuterių rinką ir raidą. Taigi, skirtingai nei IBM centrinės {mainframes} kompiuterių sistemos, x86 architektūra nuo pat pradžių nebuvo pritaikyta virtualizacijai, bet skirta pavienėms kompaktiškoms skaičiavimų sistemoms.
Intel 8088 mikro-procesorius – modifikuota ir pigesnė Intel 8086 procesoriaus atmaina.

Nepaisant trukdžių x86 platformos virtualizacijai, Intel ir AMD kompanijų procesorių technologinis progresas buvo itin spartus, todėl po gero dešimtmečio, 1998 metais, susibūrė pirmieji x86 virtualizacijos entuziastai – VMware programinės įrangos kompanija.
VMware siūlomi sprendimai duomenų centrams leido virtualizuoti ir suglaudinti kompiuterijos infrastruktūrą. Nors infrastruktūros virtualizacija buvo nemaža investicija, VMware teigimu, jų produktai leido daugiau sutaupyti nei išleisti, o jeigu išlaidos, vis dėlto apylygės, galima argumentuoti kitais virtualizacijos suteikiamais privalumais, pvz.: lankstesnis centralizuotos sistemos administravimas ar saugumo užtikrinimas.


Visuotinai priimtos x86 architektūros kompiuterių sistemoms toliau sparčiai plėtojantis, dažno el. pašto ir žiniatinklio servisus aptarnaujančio serverio vidutinė apkrova nebesiekdavo 10 proc. centrinio procesoriaus galimybių. Akivaizdu, kompiuterijos resursai turintys dideles prastovas yra neefektyviai išnaudotos investicijos. Galiausiai buvo pasiekta ta riba, kai daugelio serverių virtualizavimas ir konsolidavimas ant kelių fizinių mašinų tapo ženkliai pigesnis ir efektyvesnis infrastruktūros įgyvendinimo ir administravimo modelis.
Netrukus, 2006 metais, Intel ir AMD kompanijoms nebeliko nieko kito kaip tik duoti tai ko rinka jau kurį laiką atvirai prašė – aparatinio lygmens palaikymą x86 platformos virtualizacijai. Taigi, šiuo metu, x86 platformos visiška virtualizacija realizuojama keliais būdais: programinės įrangos {software-based} ir aparatinės įrangos {hardware-assisted} pagalba. Toliau trumpai su jomis ir susipažinsime.

Programine įranga paremta virtualizacija


Pirmieji sprendimai virtualizuoti x86 platformą turėjo įveikti pačios architektūros apribojimus. Skirtingai nei galingi centriniai {mainframe} kompiuteriai, x86 procesoriai buvo skirti kompaktiškoms sistemoms, vadinasi jų architektūra iš prigimties nebuvo numatyta virtualizacijai.
Kadangi fiziškai keisti x86 procesorių architektūrą bet kas negalėjo, virtualizacijos pionieriams, siekiant visiškos x86 sistemos virtualizacijos, apribojimus teko apeiti per programinę įrangą. Deja programinis virtualizacijos sprendimas {software-based virtualization} turi didelių nuostolių virtualizuotų mašinų našumui, lyginant su aparatinio lygmens sparta.
Dalis virtualizacijos novatorių siūlė alternatyvą didelių sąnaudų programinės įrangos sprendimams – tik dalinę sistemos išteklių virtualizaciją – paravirtualizaciją (apie ją antroje virtualizacijos straipsnio dalyje). Tačiau tai taip pat turėjo savo trūkumus, pvz., reikalavo modifikuoti OS branduolį, o tai ne visada įmanoma.
Norint geriau suprasti su kokiais iššūkiais susidūrė visiškos virtualizacijos kūrėjai, reikia trumpai apžvelgti x86 architektūros kompiuterių raidą virtualizacijos kontekste.
Intel 80286 centrinio procesoriaus lustas
Projektuodama 80286 ir 80386 procesorius Intel kompanija gerokai išplėtė x86 sistemų galimybes, padėjo tvirtą pagrindą x86 architektūrai, leidusį jai tapti de facto standartu asmeninių kompiuterių rinkoje. Visi svarbiausi išplėtimai susiję su įdiegtu apsaugotuoju režimu {protected-mode}, tai lig šiol naudojamas x86 procesoriaus darbinis režimas šiuolaikinėse operacinėse sistemose (pvz., MS Windows ir Linux). Intel 80286 procesorius suteikė galimybę x86 architektūrai sukurti daugelio vartotojų {multi-user} ir daugelio užduočių {multi-tasking} operacinę sistemą, tuo atžvilgiu leido konkuruoti su labiau pažengusiomis Unix OS platformomis. Nors 80286 atvėrė kelią į serverių rinką, visiška x86 sistemos virtualizacija buvo dar neįsivaizduojamai toli to meto x86 mikroprocesorių inžinieriams.
Vadinamasis saugusis procesoriaus darbinis režimas {protected-mode} į x86 architektūrą įdiegė keturis privilegijų lygmenis, hierarchiškai sunumeruotais nuo 0 (didžiausios privilegijos) iki 3 (mažiausios privilegijos). Šie skirtingų privilegijų lygmenys, dažnai grafiškai atvaizduojami ir vadinami žiedais {rings}, turi skirtingas prieigos teises prie sistemos išteklių, tokių kaip: darbinė atmintis, įvesties/išvesties įrenginiai ir privilegijuotos instrukcijos. Operacinei sistemai bendradarbiaujant su centriniu procesoriumi programinės įrangos kodas padalytas į skirtingus lygmenis, tai supaprastina visos sistemos valdymą, padidina saugumą ir stabilumą.
Dauguma modernių OS, tokių kaip MS Windows ir Linux, naudojama tik du privilegijų žiedus; viena vertus konteksto perjungimas tarp žiedų sukelia didelius našumo nuostolius, antra vertus, skirtingos architektūros aparatinės platformos taiko skirtingą žiedų skaičių, todėl daugelio platformų OS dėl suderinamumo supaprastina saugumo modelį iki kelių privilegijuotų lygmenų – branduolio {kernel mode} ir vartotojo {user mode} režimų.
Privilegijų lygmenys-žiedai x86 architektūros procesoriui dirbant saugiuoju režimu {protected mode}

Įprastai x86 platformos OS branduolio {kernel} ir tvarkyklių {drivers} programinis kodas vykdomos nuliniame žiede (kernel/supervisor mode), jame vykdomas kodas tiesiogiai sąveikauja su aparatine kompiuterio įranga – turi tiesioginę prieigą prie visų sistemos išteklių be apribojimų. Vartotojų taikomosios programos ir dalis OS kodo vykdomos 3 žiede {user mode}. Šis privilegijų lygmuo neturi daug teisų, norint prieigos prie sistemos išteklių programos naudojasi sisteminiais kvietiniais {system call}, kuriuos aptarnauja OS branduolys, ir priklausomai nuo situacijos atliks tarpininko vaidmenį arba atmes užklausą. Daroma prielaida, jog programinis kodas vykdomas nuliniame žiede (Ring 0) neturi klaidų, todėl sistema dirba stabiliai ir saugiai. Tuo tarpu programinės įrangos klaidos taikomųjų programų lygmenyje (Ring 3), dėl sumažintų privilegijų, neįtakoja visos sistemos darbo.
Vadinasi virtualizacija susiduria su problema realizuojant virtualias mašinas (VM). Jei VM veiks taikomųjų programų lygmenyje (Ring 3), jų OS branduolys (guest OS) negalės pasiekti sistemos išteklių ir vykdyti privilegijuotas instrukcijas. Kita vertus, jei virtualios mašinos veiks nuliniame lygmenyje (Ring 0), vienos virtualios mašinos veiksmai gali paveikti kitų mašinų būsenas ar net visos sistemos būseną. Pavyzdžiui jei VM siunčia instrukcija ją išjungti, ši komanda paveiks visas virtualias mašinas, nes jos tinkamai neapdorojus išsijungs fizinė mašina. Panašios problemos kyla ir su darbinės atminties bei įvesties/išvesties įrenginiais, jei VM veiksmai nėra tinkamai apdorojami. Vienos virtualios mašinos poveikis kitoms literatūroje vadinamas VM pervėrimų (pierce the virtual machine).
Šių x86 architektūros virtualizacijos problemų sprendimo metodas programiškai turi dideles sąnaudas be tinkamo aparatinio lygmens virtualizacijos palaikymo. Visiškoji/klasikinė x86 platformos virtualizaciją programiniu būdu įgyvendinama taikant tris pagrindinius principus:
  • Privilegijuotų instrukcijų virtualizacija (nesudaro didelių našumo nuostolių VM);
  • Pagrindinės atminties virtualizacija (didžiausios virtualizacijos sąnaudos; veiksnys labiausiai įtakojantis VM našumą);
  • Įrenginių ir I/O virtualizacija (sukelia ryškų įvesties/išvesties įrenginių vėlinimą).

Aparatine įranga paremta virtualizacija


Pirmasis aparatinio lygmens virtualizacijos {hardware-assisted virtualization} palaikymas x86 platformai įdiegtas 1985 metais su Intel 80386 procesoriumi. Iš tiesų, tai nebuvo visiškosios virtualizacijos palaikymas, bet x86 architektūros suderinamumo, tarp senosios ir naujosios (post-80286), padidinimas. Po esminio x86 architektūros atnaujinimo su Intel 80286 procesoriumi, tarp naujojo (protected-mode) ir senojo (real-mode) darbinio režimo, atsirado per didelis x86 architektūrinis plyšys, dėl kurio 8086 mikroprocesoriui parašytas kodas be modifikacijų negalėjo veikti naujajame (protected-mode) režime. Siekiant išspręsti nesuderinamumo problemas vėlesnis Intel 80386 procesorius papildytas nauju – virtual 8086 mode – darbiniu režimu, kurio funkcionalumo daugeliu atveju užteko senosios programinės įrangos vykdymui.
Aparatinio lygmens virtualizacijos palaikymas leido naujiems Intel 80386, bei vėlesniems x86 architektūros procesoriams, imituoti 8086 procesoriaus pirminį darbo režimą {real-mode} techniškai neperjungiant pačio procesoriaus į senąjį darbinį režimą. Suderinamumo virtualizacija (virtual 8086 mode) galima iškviesti tiesiai iš apsaugotojo darbo režimo {protected-mode} ir sena programinį kodą vykdyti lygiagrečiai.
Įgyvendinant 8086 virtualų režimą, operacinė sistema turi specialią programinę įrangą – virtualizacijos monitorių, kuris su virtual 8086 mode funkcija gali sukurti saugią virtualią aplinką ir vykdyti net kelias 8086 procesoriaus programas vienu metu (multi-tasking). Pažymėtina, jog programos sukurtos įprastam 8086 režimui {real-mode}, suprojektuotos tik pavieniam darbui pagrindinėje atmintyje (single-tasking), tačiau virtualus 8086 režimas iškviečiama iš apsaugotojo darbinio režimo {protected-mode} ir programinį kodą vykdo taikomųjų programų lygmenyje (Ring 3), todėl susidaro daugiaprogramės (multi-tasking) sistemos iliuzija.
Vadinasi, pirmosios virtualizacijos palaikymas x86 procesorių architektūroje įgalino daugumą programinės įrangos parašytos pirmiesiems x86 procesoriams (pvz., MS-DOS) veikti lygiagrečiai ne tik tarpusavyje, bet ir su nauja programine įranga, paremta saugiuoju procesoriaus darbiniu režimu (pvz., MS-DOS + Windows 95).

Intel 80386 centrinio procesoriaus lustas

Sekančio aparatinio virtualizacijos palaikymo x86 procesoriams teko laukti keletą dešimtmečių, kol Intel ir AMD kompanijos ilgai kartu vėlinusios, bet galiausiai atskirai, 2005 ir 2006 metais, pristatė gan paprastus x86 architektūros išplėtimus (VT-x ir AMD-V).
Nors šie aparatinio lygmens plėtiniai palengvino x86 architektūros virtualizacijos programinės įrangos kūrimą, ženklaus našumo padidėjimo jie nedavė, lyginant su tuometiniais programinės įrangos virtualizacijos sprendimais. Tačiau vėlesni x86 architektūros virtualizacijos palaikymo išplėtimai skirti atmintinės valdymui bei tiesioginės prieigos prie fizinės mašinos išvesties/įvesties įrenginiu suteikė daugiau pasiekiamumo ir priartino virtualių mašinų našumą prie aparatinio lygmens.

Plačiau apie aparatinio lygmens palaikymą visiškai virtualizacijai x86 architektūros kompiuterių sistemose, paravirtualizacija, bei skirtingų virtualizacijos metodų taikymą ir naudą bus rašoma kitose virtualizacijos apžvalgos dalyse.

Verta pastebėti, jog išplėstas techninės įrangos palaikymas x86 architektūros virtualizacijai ir nuolatos besivystantis didelio pralaidumo pasaulinis kompiuterių tinklas lėmė itin sparčią debesų kompiuterijos plėtrą.

Papildomai ir detaliau apie visiškos virtualizacijos veikimą ir jos iššūkius x86 architektūroje galima pasiskaityti šiuose straipsniuose:



Straipsnių serija skirta kompiuterių platformos virtualizacijai apžvelgti:

Komentarų nėra:

Rašyti komentarą