Hermir tölvukerfa: kunnuglegur hermir á fullum vettvangi og óþekktur réttsælis og ummerki

Í seinni hluta greinarinnar um tölvukerfaherma mun ég halda áfram að tala í einföldu kynningarformi um tölvuherma, nefnilega um uppgerðina á fullum vettvangi, sem hinn almenni notandi lendir oftast í, sem og um klukku-fyrir. -klukkulíkan og ummerki, sem eru algengari í þróunarhópum.

Hermir tölvukerfa: kunnuglegur hermir á fullum vettvangi og óþekktur réttsælis og ummerki

В fyrsti hluti Ég talaði um hvað hermir eru almennt, sem og um stig hermunar. Nú, byggt á þeirri þekkingu, legg ég til að kafa aðeins dýpra og tala um uppgerð á öllum vettvangi, hvernig á að safna ummerkjum, hvað á að gera við þau síðar, sem og um klukku-fyrir-klukku örarkitektúrlega eftirlíkingu.

Full pallur hermir, eða "Einn á sviði er ekki stríðsmaður"

Ef þú vilt kanna virkni eins tiltekins tækis, til dæmis netkorts, eða skrifa fastbúnað eða rekla fyrir þetta tæki, þá er hægt að líkja eftir slíku tæki sérstaklega. Hins vegar er ekki mjög þægilegt að nota það í einangrun frá öðrum innviðum. Til að keyra samsvarandi rekil þarftu miðlægan örgjörva, minni, aðgang að gagnastrætó o.s.frv. Að auki þarf ökumaðurinn stýrikerfi (OS) og netstafla til að virka. Að auki gæti verið þörf á sérstakri pakkaframleiðanda og svarþjóni.

Hermir á öllum vettvangi skapar umhverfi til að keyra heilan hugbúnaðarstafla, sem inniheldur allt frá BIOS og ræsiforritinu til stýrikerfisins sjálfs og ýmis undirkerfi þess, eins og sama netstafla, rekla og forrit á notendastigi. Til að gera þetta útfærir það hugbúnaðarlíkön flestra tölvutækja: örgjörva og minni, diskur, inntaks-/úttakstæki (lyklaborð, mús, skjár), auk sama netkortsins.

Hér að neðan er blokkarmynd af x58 flísinni frá Intel. Tölvuhermir á öllum vettvangi á þessu flísarsetti krefst útfærslu flestra tækjanna sem skráð eru, þar á meðal tækjanna sem eru inni í IOH (Input/Output Hub) og ICH (Input/Output Controller Hub), sem eru ekki sýnd í smáatriðum á blokkarmyndinni . Þó, eins og æfingin sýnir, eru ekki mörg tæki sem eru ekki notuð af hugbúnaðinum sem við ætlum að keyra. Ekki þarf að búa til líkön af slíkum tækjum.

Hermir tölvukerfa: kunnuglegur hermir á fullum vettvangi og óþekktur réttsælis og ummerki

Oftast eru hermir á fullum vettvangi innleiddir á kennslustigi örgjörva (ISA, sjá hér að neðan). fyrri grein). Þetta gerir þér kleift að búa til sjálfan hermir tiltölulega fljótt og ódýrt. ISA-stigið er líka gott vegna þess að það helst meira og minna stöðugt, ólíkt til dæmis API/ABI-stiginu sem breytist oftar. Að auki gerir innleiðing á kennslustigi þér kleift að keyra svokallaðan óbreyttan tvíundarhugbúnað, það er að keyra þegar samansettan kóða án nokkurra breytinga, nákvæmlega eins og hann er notaður á raunverulegum vélbúnaði. Með öðrum orðum, þú getur búið til afrit („dump“) af harða disknum þínum, tilgreint það sem mynd fyrir líkan í hermi á fullum vettvangi, og voila! - Stýrikerfið og önnur forrit eru hlaðin í herminn án frekari aðgerða.

Afköst hermir

Hermir tölvukerfa: kunnuglegur hermir á fullum vettvangi og óþekktur réttsælis og ummerki

Eins og kom fram hér að ofan er ferlið við að líkja eftir öllu kerfinu, það er öllum tækjum þess, frekar hægt. Ef þú útfærir allt þetta líka á mjög nákvæmu stigi, til dæmis, örarkitektúrískt eða rökrétt, þá mun framkvæmdin verða mjög hæg. En kennslustigið er viðeigandi val og gerir stýrikerfinu og forritunum kleift að keyra á nægjanlegum hraða til að notandinn geti haft samskipti við þau á þægilegan hátt.

Hér væri við hæfi að snerta viðfangsefnið um frammistöðu hermir. Það er venjulega mælt í IPS (leiðbeiningum á sekúndu), nánar tiltekið í MIPS (milljónir IPS), það er fjöldi örgjörvaleiðbeininga sem hermir framkvæmir á einni sekúndu. Á sama tíma fer hraði uppgerðarinnar einnig eftir afköstum kerfisins sem uppgerðin sjálf keyrir á. Þess vegna gæti verið réttara að tala um „hægingu“ hermirsins samanborið við upprunalega kerfið.

Algengustu full-pallur hermir á markaðnum, eins og QEMU, VirtualBox eða VmWare Workstation, hafa góða frammistöðu. Það er kannski ekki einu sinni áberandi fyrir notandann að vinna sé í gangi í herminum. Þetta gerist þökk sé sérstökum sýndarvæðingargetu sem er útfærð í örgjörvum, tvíundir þýðingaralgrím og annað áhugavert. Þetta er allt efni fyrir sérstaka grein, en í stuttu máli, sýndarvæðing er vélbúnaðareiginleiki nútíma örgjörva sem gerir hermum kleift að líkja ekki eftir leiðbeiningum, heldur senda þær til framkvæmdar beint til raunverulegs örgjörva, ef, auðvitað, arkitektúr hermir og örgjörvi eru svipaðir. Tvöfaldur þýðing er þýðing á kóða gestavélar yfir í hýsilkóða og framkvæmd í kjölfarið á raunverulegum örgjörva. Þess vegna er uppgerðin aðeins hægari, 5-10 sinnum, og keyrir oft á sama hraða og raunverulegt kerfi. Þó þetta sé undir áhrifum frá mörgum þáttum. Til dæmis, ef við viljum líkja eftir kerfi með nokkrum tugum örgjörva, þá mun hraðinn lækka strax um þetta nokkrum tugum sinnum. Á hinn bóginn styðja hermir eins og Simics í nýjustu útgáfum fjölgjörva vélbúnaðar og samsíða í raun hermuðum kjarna við kjarna raunverulegs örgjörva.

Ef við tölum um hraða örarkitektúrfræðilegrar uppgerðar, þá er hann venjulega nokkrar stærðargráður, um það bil 1000-10000 sinnum hægari en framkvæmd á venjulegri tölvu, án eftirlíkingar. Og útfærslur á stigi rökréttra þátta eru hægari um nokkrar stærðargráður. Þess vegna er FPGA notað sem keppinautur á þessu stigi, sem getur aukið árangur verulega.

Grafið hér að neðan sýnir áætlaða háð hermihraða á smáatriðum líkansins.

Hermir tölvukerfa: kunnuglegur hermir á fullum vettvangi og óþekktur réttsælis og ummerki

Slag-fyrir-takt uppgerð

Þrátt fyrir lágan framkvæmdarhraða eru örarkitektúrhermir nokkuð algengir. Hermun á innri blokkum örgjörvans er nauðsynleg til að líkja nákvæmlega eftir framkvæmdartíma hverrar leiðbeiningar. Misskilningur gæti komið upp hér - þegar allt kemur til alls, það virðist, hvers vegna ekki einfaldlega að forrita framkvæmdartímann fyrir hverja fyrirmæli. En slíkur hermir mun vera mjög ónákvæmur, þar sem framkvæmdartími sömu leiðbeiningar getur verið mismunandi frá símtali til símtals.

Einfaldasta dæmið er minnisaðgangsleiðbeiningar. Ef umbeðin minnisstaður er tiltækur í skyndiminni, þá verður framkvæmdartíminn í lágmarki. Ef þessar upplýsingar eru ekki í skyndiminni („skyndiminni miss“) mun þetta lengja framkvæmdartíma leiðbeiningarinnar til muna. Þannig er skyndiminnislíkan nauðsynlegt fyrir nákvæma uppgerð. Hins vegar er málið ekki bundið við skyndiminni líkanið. Örgjörvinn mun ekki einfaldlega bíða eftir að gögn séu sótt úr minni þegar þau eru ekki í skyndiminni. Þess í stað mun það byrja að framkvæma næstu leiðbeiningar og velja þær sem eru ekki háðar niðurstöðu lestrar úr minni. Þetta er svokölluð „out of order“ execution (OOO, out of order execution), nauðsynleg til að lágmarka aðgerðalausan tíma örgjörva. Líkan á samsvarandi örgjörvablokkum mun hjálpa til við að taka allt þetta með í reikninginn þegar þú reiknar út framkvæmdartíma leiðbeininga. Meðal þessara leiðbeininga, sem framkvæmdar eru á meðan beðið er eftir niðurstöðu lestrar úr minni, getur skilyrt stökkaðgerð átt sér stað. Ef niðurstaða ástandsins er óþekkt í augnablikinu, þá hættir örgjörvinn ekki að keyra, heldur gerir hann „giska“, framkvæmir viðeigandi grein og heldur áfram að framkvæma fyrirbyggjandi leiðbeiningar frá breytingapunkti. Slík blokk, sem kallast útibússpá, verður einnig að vera útfærð í örarkitektúrhermi.

Myndin hér að neðan sýnir helstu blokkir örgjörvans, það er ekki nauðsynlegt að vita það, það er aðeins sýnt til að sýna hversu flókið örarkitektúr útfærslan er.

Hermir tölvukerfa: kunnuglegur hermir á fullum vettvangi og óþekktur réttsælis og ummerki

Rekstur allra þessara blokka í alvöru örgjörva er samstilltur með sérstökum klukkumerkjum og það sama gerist í líkaninu. Slíkur örarkitektúrhermir er kallaður hringrás nákvæmur. Megintilgangur þess er að spá nákvæmlega fyrir um frammistöðu örgjörvans sem verið er að þróa og/eða reikna út framkvæmdartíma tiltekins forrits, td viðmið. Ef gildin eru lægri en krafist er, þá verður nauðsynlegt að breyta reikniritum og örgjörvablokkum eða fínstilla forritið.

Eins og sýnt er hér að ofan er klukka-fyrir-klukka uppgerð mjög hæg, þannig að hún er aðeins notuð þegar þú rannsakar ákveðin augnablik í rekstri forrits, þar sem nauðsynlegt er að finna út raunverulegan hraða framkvæmdar forritsins og meta framtíðarframmistöðu tækisins sem verið er að líkja eftir frumgerð.

Í þessu tilviki er hagnýtur hermir notaður til að líkja eftir keyrslutíma forritsins. Hvernig gerist þessi samsetning notkunar í raun og veru? Í fyrsta lagi er hagnýtur hermir ræstur þar sem stýrikerfið og allt sem þarf til að keyra forritið sem verið er að rannsaka er hlaðið upp á. Þegar öllu er á botninn hvolft höfum við ekki áhuga á stýrikerfinu sjálfu, né á fyrstu stigum ræsingar forritsins, uppsetningu þess osfrv. Hins vegar getum við heldur ekki sleppt þessum hlutum og haldið strax áfram að keyra forritið frá miðjunni. Þess vegna eru öll þessi bráðabirgðaskref keyrð á virkum hermi. Eftir að forritið hefur verið keyrt fram að því augnabliki sem vekur áhuga okkar eru tveir möguleikar mögulegir. Þú getur skipt út líkaninu fyrir klukku-fyrir-lotu líkan og haldið áfram framkvæmd. Hermihamurinn sem notar keyranlegan kóða (þ.e. venjulegar samsettar forritaskrár) er kallaður framkvæmdardrifinn uppgerð. Þetta er algengasti hermivalkosturinn. Önnur nálgun er líka möguleg - rekjadrifin uppgerð.

Rekja-undirstaða uppgerð

Það samanstendur af tveimur þrepum. Með því að nota hagnýtan hermir eða á raunverulegu kerfi er skrá yfir forritsaðgerðir safnað og skrifað í skrá. Þessi log er kallaður trace. Það fer eftir því hvað er verið að skoða getur rakningin innihaldið keyranlegar leiðbeiningar, minnisföng, gáttanúmer og truflunarupplýsingar.

Næsta skref er að „spila“ ummerki, þegar klukku-fyrir-klukku hermir les ummerkin og framkvæmir allar leiðbeiningar sem eru skrifaðar í það. Í lokin fáum við framkvæmdartíma þessa hluta forritsins, sem og ýmsa eiginleika þessa ferlis, til dæmis, hlutfall heimsókna í skyndiminni.

Mikilvægur eiginleiki við að vinna með ummerki er determinism, það er að segja með því að keyra uppgerðina á þann hátt sem lýst er hér að ofan, endurskapum við sömu röð aðgerða aftur og aftur. Þetta gerir það mögulegt, með því að breyta líkanabreytum (skyndiminni, biðminni og biðröðastærðum) og nota mismunandi innri reiknirit eða stilla þau, að kanna hvernig tiltekin færibreyta hefur áhrif á afköst kerfisins og hvaða valkostur gefur bestu niðurstöðurnar. Allt þetta er hægt að gera með frumgerð tækjalíkans áður en raunveruleg frumgerð vélbúnaðar er búin til.

Flækjustig þessarar aðferðar felst í þörfinni á að keyra forritið fyrst og safna ummerkjunum, sem og gríðarstórri stærð rekjaskrárinnar. Kostirnir eru meðal annars sú staðreynd að það er nóg að líkja aðeins eftir þeim hluta tækisins eða pallsins sem vekur áhuga, en uppgerð með framkvæmd krefst venjulega fullkomins líkans.

Svo, í þessari grein skoðuðum við eiginleika uppgerðarinnar á öllum vettvangi, ræddum um hraða útfærslur á mismunandi stigum, klukku-fyrir-lotu uppgerð og ummerki. Í næstu grein mun ég lýsa helstu atburðarásum fyrir notkun herma, bæði í persónulegum tilgangi og frá þróunarsjónarmiði í stórum fyrirtækjum.

Heimild: www.habr.com

Bæta við athugasemd