ArvutisĂŒsteemide simulaatorid: kĂ”igile tuntud ĂŒleplatvormiline simulaator ja kellelegi tundmatu potentsiaalne ja rajad

Artiklis, mille teises osas rÀÀgin arvutisimulaatoritest, jÀtkan lihtsas tutvustavas vormis selgitamist arvutisimulaatorite kohta, nimelt tÀisplatvormilisest simuleerimisest, millega tavaline kasutaja kÔige sagedamini kokku puutub, samuti taktile mudelist ja radadest, mis on arendajate seas laialdasemalt levinud.

ArvutisĂŒsteemide simulaatorid: kĂ”igile tuntud ĂŒleplatvormiline simulaator ja kellelegi tundmatu potentsiaalne ja rajad

Uues esimeses osas RÀÀkisin, mis on simulaatorid ĂŒldiselt, samuti modelleerimise tasemetest. NĂŒĂŒd soovitan pĂ”hjalikumale sĂŒvenemisele ning rÀÀgin tĂ€isplatvormilisest simuleerimisest, kuidas rajada radu, mida nende radadega hiljem teha, ning taktilisest mikroarhitektuuri emuleerimisest.

TĂ€isplatvormiline simulaator (full platform simulator), vĂ”i "Üks pole sĂ”dalane".

Kui on vaja uurida ĂŒhe konkreetse seadme toimimist, nĂ€iteks vĂ”rkaart, vĂ”i kirjutada sellele seadmele pĂŒsivara vĂ”i draiver, saab seda seadet simuleerida eraldi. Kuid kui teised infrastruktuurist eraldisseadmed pole vĂ€ga mugavad, on vajalik sellise draiveri kĂ€ivitamiseks keskpink, mĂ€lu, juurdepÀÀs andmeside bussile ja palju muud. Lisaks on vaja tööks draiveri jaoks ka operatsioonisĂŒsteemi (OS) ja vĂ”rgu steki. Tootmiseks vĂ”ib olla vajalik ka eraldi paketi generaator ja vastuste vastuvĂ”tu server.

TĂ€isplatvormiline simulaator loob keskkonna, et kĂ€ivitada tĂ€is tarkvarastakku, mis hĂ”lmab kĂ”ike alates BIOS-ist ja laadijast kuni operatsioonisĂŒsteemi ja erinevate alamsĂŒsteemideni, nagu sama vĂ”rgusteek, draiverid, kasutaja taseme rakendused. Selleks on selles sisseehitatud tarkvamudelid enamusest arvuti seadmetest: protsessor ja mĂ€lu, ketas, sisend-vĂ€ljund seadmed (klaviatuur, hiir, ekraan), samuti see sama vĂ”rkaart.

Allpool on Intel'i x58 kiibistikku plokkdiagramm. TÀielikul platvormisimulaatoril, mis pÔhineb sellel kiibistikul, on enamiku loetletud seadmete rakendamine vajalik, sealhulgas ka neid, mis asuvad IOH (sisendi/vÀljundi sÔlmes) ja ICH (sisendi/vÀljundi kontrolleri sÔlmes), mis ei ole plokkdiagrammil detailiselt joonistatud. Kuigi praktika nÀitab, et pole sugugi vÀhe seadmeid, mida see tarkvara, mida plaanime kÀivitada, ei kasuta. Selliste seadmete mudeleid ei pruugi olla vaja luua.

ArvutisĂŒsteemide simulaatorid: kĂ”igile tuntud ĂŒleplatvormiline simulaator ja kellelegi tundmatu potentsiaalne ja rajad

KĂ”ige sagedamini rakendatakse tĂ€ielikke platvormisimulaatoreid protsessori kĂ€su (ISA) tasemel (vt. eelmist artiklit). See vĂ”imaldab suhelda suhteliselt kiiresti ja odavalt simulaatori loomisega. ISA tase on ka hea selle poolest, et jÀÀb enam-vĂ€hem pĂŒsivaks, erinevalt nĂ€iteks API/ABI tasemest, mis muutub tihedamini. Lisaks vĂ”imaldab kĂ€sutamise tasemel kĂ€ivitada nn muutmata binaarsed tarkvarad, st juba kompileeritud koodi kĂ€ivitamine ilma muudatusteta, tĂ€pselt nii, nagu seda kasutatakse reaalses riistvaras. TeisisĂ”nu, saab teha kĂ”vaketta koopia ('dump'), mÀÀrata selle kujutiseks platvormisimulaatori mudelis ja - voilĂ ! - OS ja muud programmid laaditakse simulaatorisse ilma tĂ€iendavate toiminguteta.

Simulaatorite jÔudlus

ArvutisĂŒsteemide simulaatorid: kĂ”igile tuntud ĂŒleplatvormiline simulaator ja kellelegi tundmatu potentsiaalne ja rajad

Nagu juba eespool mainitud, on kogu sĂŒsteemi simuleerimise protsess, st kĂ”igi seadmete, ĂŒsna aeglane ettevĂ”tmine. Kui rakendada seda ka vĂ€ga detailsel tasemel, nĂ€iteks mikroarhitektuuril vĂ”i loogiliselt, siis tĂ€itmine muutub ÀÀrmiselt aeglaseks. KĂŒll aga on kĂ€su tase sobiv valik ja vĂ”imaldab OSid ja programme töötada kasutaja mugavaks suhtlemiseks piisava kiirusena.

Siin on Ă”ige puudutada simulaatorite jĂ”udluse teemat. Seda mÔÔdetakse tavaliselt IPS (kĂ€skluste sekundis), tĂ€psemalt MIPS (miljonit IPS), st protsessori kĂ€skluste arv, mida simulaator tĂ€idab ĂŒhe sekundi jooksul. Samas sĂ”ltub simuleerimise kiirus ka sĂŒsteemi jĂ”udlusest, millel simuleerimine ise kĂ€ib. SeetĂ”ttu vĂ”ib olla Ă”iglasem rÀÀkida simulaatori 'aeglustumisest' originaalsĂŒsteemi vĂ”rreldes.

Turulised tĂ€ielikud platvormsimulaatorid, nagu QEMU, VirtualBox vĂ”i VmWare Workstation, pakuvad head jĂ”udlust. Kasutaja ei pruugi isegi mĂ€rgata, et töö kĂ€ib simulaatoris. See juhtub tĂ€nu protsessorites rakendatud spetsiaalsele virtualiseerimisvĂ”imele, binaarse tĂ”lke algoritmidele ja muudele huvitavatele asjadele. See on kĂ”ik eraldi artikli teema, kuid kui lĂŒhidalt öelda, siis virtualiseerimine on kaasaegsete protsessorite riistvaraline vĂ”ime, mis vĂ”imaldab simulaatoritel mitte simuleerida instruktsioone, vaid anda need otse reaalsesse protsessorisse, kui simulaatori ja protsessori arhitektuurid on sarnased. Binaarne tĂ”lge on kĂŒlalismasina koodi tĂ”lkimine hostkoodiks ja selle tĂ€itmine reaalses protsessoris. Selle tulemusel on simuleerimine vaid veidi aeglasem, 5-10 korda, ja tihti töötab see sama kiirusel nagu reaalne sĂŒsteem. Siiski mĂ”jutab seda vĂ€ga palju tegureid. NĂ€iteks, kui me soovime simuleerida sĂŒsteemi mitme kĂŒmne protsessoriga, siis kiirus langeb kohe mitmekĂŒmne korra. Teisest kĂŒljest toetavad viimaste versioonide Simics tĂŒĂŒpi simulaatorid mitme protsessoriga hostarvutit ja jaotavad tĂ”husalt simuleeritud tuumad reaalse protsessori tuumadele.

Kui rÀÀkida mikroarhitektuuri simuleerimise kiirusest, siis see on tavaliselt mitme jÀrgu, ligikaudu 1000-10000 korda aeglasem kui tavalise arvuti tÀitmine, ilma simuleerimiseta. Ja loogiliste elementide tasemel teostused on veelgi aeglasemad. SeetÔttu kasutatakse sellise taseme emulaatorina FPGA-d, mis vÔimaldab oluliselt suurendada jÔudlust.

Allolev graafik nÀitab ligikaudset sÔltuvust simuleerimise kiirusest mudeli detailide arvu jÀrgi.

ArvutisĂŒsteemide simulaatorid: kĂ”igile tuntud ĂŒleplatvormiline simulaator ja kellelegi tundmatu potentsiaalne ja rajad

Taktiline simuleerimine

Kuigi mikroarhitektuuri simulaatorite teostuskiirus on madal, on need siiski ĂŒsna levinud. Protsessori sisemiste plokkide modelleerimine on vajalik, et tĂ€pselt simuleerida iga kĂ€su teostusaega. Siin vĂ”ib tekkida arusaamatus – tundub ju, et vĂ”iks lihtsalt programmeerida iga kĂ€su teostusaega. Kuid selline simulaator töötaks vĂ€ga ebat tĂ€pselt, kuna sama kĂ€su teostusaeg vĂ”ib varieeruda sĂ”ltuvalt kutsest.

Lihtsaim nĂ€ide on mĂ€lu juurdepÀÀsu kĂ€su puhul. Kui nĂ”utud mĂ€lu rakk on vahemĂ€lus saadaval, siis on teostusaeg minimaalne. Kui antud teave vahemĂ€lus puudub ("vahemĂ€lu vimma", cache miss), siis suurendab see kĂ€su teostusaega oluliselt. Seega, et simuleerida tĂ€pselt, on vajalik vahemĂ€lu mudel. Kuid vahemĂ€lu mudel ei ole ainuke asi. Protsessor ei hakka lihtsalt ootama andmete saamist mĂ€lust, kui need ei ole vahemĂ€lus. Selle asemel alustab ta jĂ€rgmiste kĂ€skude tĂ€itmist, valides need, mis ei sĂ”ltu mĂ€lust lugemise tulemusest. See on nn "mittejĂ€rgnev tĂ€itmine" (OOO, out of order execution), mis on vajalik protsessori seisaku aja vĂ€hendamiseks. KĂ”ik see aitab kĂ€su teostusaega arvutada, kui modelleerida vastavaid protsessori plokke. Selliste kĂ€skude seas, mida tĂ€idetakse, kuni oodatakse mĂ€lust lugemise tulemust, vĂ”ib olla ka tingimusliku ĂŒlemineku operatsioon. Kui tingimuse teostamise tulemus ei ole praegu teada, siis protsessor ei peata tĂ€itmist, vaid teeb "eeldamise", tĂ€idab vastava ĂŒlemineku ja jĂ€tkab ennetavalt kĂ€skude tĂ€itmist ĂŒlemineku kohast. Selline plokk, mida nimetatakse branch predictor'iks, peab samuti olema mikroarhitektuuri simulaatoris rakendatud.

Allolev pilt nÀitab protsessori peamisi plokke; selle tundmine ei ole vajalik, see on vaid esitatud mikroarhitektuuri teostuse keerukuse nÀitamiseks.

ArvutisĂŒsteemide simulaatorid: kĂ”igile tuntud ĂŒleplatvormiline simulaator ja kellelegi tundmatu potentsiaalne ja rajad

KĂ”ikide nende plokkide töö reaalsetes protsessorites sĂŒnkroniseeritakse spetsiaalsete taktsignaalidega, sarnaselt toimub see ka mudelis. Sellist mikroarhitektuurilist simulaatorit nimetatakse taktisĂŒnkroonseks (cycle accurate). Selle peamine eesmĂ€rk on tĂ€pselt ennustada arendatava protsessori jĂ”udlust ja/vĂ”i arvutada teatud programmi, nĂ€iteks mingisuguse benchmark'i, tĂ€itmise aega. Kui vÀÀrtused jÀÀvad madalamaks, kui vajalik, tuleb algoritme ja protsessori blokke tĂ€iustada vĂ”i programmi optimeerida.

Nagu eespool nĂ€idatud, on taktisĂŒnkroonne simuleerimine vĂ€ga aeglane, seetĂ”ttu kasutatakse seda ainult teatud programmide töö uurimiseks, kus on oluline teada programmide tegelikku tĂ€itmiskiirus ja hinnata seadme tulevast jĂ”udlust, mille prototĂŒĂŒpi simuleeritakse.

Samas kasutatakse ĂŒlejÀÀnud programmi töö simuleerimiseks funktsionaalset simulaatorit. Kuidas selline kombineeritud kasutamine reaalses elus toimub? Esiteks kĂ€ivitatakse funktsionaalne simulaator, kuhu laaditakse kĂ€itussĂŒsteem (OS) ja kĂ”ik vajalikud kokku, et kĂ€ivitada uuritav programm. Meid ei huvita ei OS ise, ega programmi kĂ€ivitamise algstaadiumid, selle konfigureerimine ja muu. Kuid me ei saa ka neid osi vahele jĂ€tta ja minna otse programmi tĂ€itmise juurde keskelt. SeetĂ”ttu kĂ€iakse kĂ”ik need ettevalmistavad etapid lĂ€bi funktsionaalses simulaatoris. PĂ€rast seda, kui programm on jĂ”udnud meid huvitava hetkeni, on vĂ”imalik kaks varianti. Moodul vĂ”ib asendada taktisĂŒnkroonse ja tĂ€itmist jĂ€tkata. TĂ€itmisreĆŸiimi, kus kasutatakse tĂ€itmisfaili (st tavalised kompileeritud programmifailid), nimetatakse tĂ€itmise pĂ”hiseks simuleerimiseks (execution driven simulation). See on kĂ”ige levinum simuleerimise variant. Samuti on vĂ”imalik teine lĂ€henemine — jĂ€lgede pĂ”hine simuleerimine (trace driven simulation).

JÀlgede pÔhine simuleerimine

See koosneb kahest sammust. Funktsionaalse simulaatori vĂ”i reaalse sĂŒsteemi abil kogutakse ja salvestatakse faili programmide tegevuste logi. Sellist logi nimetatakse jĂ€ljeks (trace). SĂ”ltuvalt uuritavast, vĂ”ib jĂ€lg sisaldada tĂ€idetavaid juhiseid, mĂ€lu aadresse, portide numbreid, teavet katkestuste kohta.

JĂ€rgmine samm on rada „esitus“, kus taktitark simulator loeb rada ja tĂ€idab kĂ”ik kirja pandud juhised. LĂ”puks saame selle koodi saamise aja ning erinevad protsessi omadused, nĂ€iteks vahemĂ€lu tabamuse protsendi.

Oluline aspekt raja töötlemisel on deterministlikkus, st kĂ€ivitades simulatsiooni eespool kirjeldatud viisil, kordame ikka ja jĂ€lle sama tegevuste jĂ€rjekorda. See vĂ”imaldab muuta mudeli parameetreid (vahemĂ€lu, puhvrid ja jĂ€rjekorrad) ning kasutada erinevaid sisemisi algoritme vĂ”i neid kohandada, et uurida, kuidas see vĂ”i teine parameeter mĂ”jutab sĂŒsteemi jĂ”udlust ja milline variant annab parimaid tulemusi. KĂ”ike seda saab teostada seadme prototĂŒĂŒbimudeli abil enne reaalse riistvara prototĂŒĂŒbi loomist.

Selle lÀhenemise keerukus seisneb rakenduse eelnevas kÀivitamises ja raja kogumises, samuti raja faili tohutu suuruses. Plussideks on, et piisab ainult huvi pakkuva seadme vÔi platvormi osa modelleerimisest, samas kui tÀitmise simulatsioon nÔuab tavaliselt tÀisteksti mudelit.

Nii et selles artiklis oleme arutanud tÀisplatvormilise simuleerimise eripÀra, rÀÀkinud erinevatel tasemetel rakenduste kiirusest, taktitark simuleerimisest ja rajadest. JÀrgmisel artiklil kirjeldan simulaatorite pÔhikasutuse stsenaariume, nii isiklikul eesmÀrgil kui ka suurte ettevÔtete arendamise vaatepunktist.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster