Kompiuterinių sistemų treniruokliai: pažįstamas visos platformos treniruoklis ir nežinomas pagal laikrodžio rodyklę bei pėdsakai

Antroje straipsnio apie kompiuterinių sistemų treniruoklius dalyje toliau paprasta įvadine forma kalbėsiu apie kompiuterinius treniruoklius, būtent apie visos platformos modeliavimą, su kuriuo dažniausiai susiduria paprastas vartotojas, taip pat apie laikrodį. -laikrodžio modelis ir pėdsakai, kurie dažniau pasitaiko kūrėjų ratuose.

Kompiuterinių sistemų treniruokliai: pažįstamas visos platformos treniruoklis ir nežinomas pagal laikrodžio rodyklę bei pėdsakai

В pirmoji dalis Aš kalbėjau apie tai, kas apskritai yra simuliatoriai, taip pat apie modeliavimo lygius. Dabar, remdamasis tomis žiniomis, siūlau pasinerti šiek tiek giliau ir pakalbėti apie visos platformos modeliavimą, kaip rinkti pėdsakus, ką su jais daryti vėliau, taip pat apie mikroarchitektūrinę emuliaciją „laikrodis po laikrodžio“.

Visos platformos simuliatorius arba „Vienas lauke nėra karys“

Jei norite ištirti vieno konkretaus įrenginio, pavyzdžiui, tinklo plokštės, veikimą arba parašyti šio įrenginio programinę-aparatinę įrangą arba tvarkyklę, tokį įrenginį galima imituoti atskirai. Tačiau naudoti jį atskirai nuo likusios infrastruktūros nėra labai patogu. Norėdami paleisti atitinkamą tvarkyklę, jums reikės centrinio procesoriaus, atminties, prieigos prie duomenų magistralės ir kt. Be to, kad tvarkyklė veiktų, reikia operacinės sistemos (OS) ir tinklo dėklo. Be to, gali prireikti atskiro paketų generatoriaus ir atsako serverio.

Visos platformos treniruoklis sukuria aplinką visam programinės įrangos paketui, kuris apima viską nuo BIOS ir įkrovos įkroviklio iki pačios OS ir įvairių jos posistemių, pvz., tą patį tinklo krūvą, tvarkykles ir vartotojo lygio programas, paleisti. Norėdami tai padaryti, jis įdiegia daugumos kompiuterių įrenginių programinius modelius: procesorių ir atmintį, diską, įvesties / išvesties įrenginius (klaviatūrą, pelę, ekraną), taip pat tą pačią tinklo plokštę.

Žemiau yra „Intel“ x58 mikroschemų rinkinio blokinė schema. Visos platformos kompiuterio simuliatorius šiame mikroschemų rinkinyje reikalauja įdiegti daugumą išvardytų įrenginių, įskaitant esančius IOH (įvesties / išvesties šakotuvas) ir ICH (įvesties / išvesties valdiklio šakotuvas), kurie nėra išsamiai pavaizduoti blokinėje diagramoje. . Nors, kaip rodo praktika, nėra daug įrenginių, kurių nenaudoja programinė įranga, kurią ketiname paleisti. Tokių įrenginių modelių kurti nereikia.

Kompiuterinių sistemų treniruokliai: pažįstamas visos platformos treniruoklis ir nežinomas pagal laikrodžio rodyklę bei pėdsakai

Dažniausiai visos platformos treniruokliai diegiami procesoriaus instrukcijų lygiu (ISA, žr. toliau). ankstesnis straipsnis). Tai leidžia palyginti greitai ir nebrangiai sukurti patį treniruoklį. ISA lygis taip pat geras, nes išlieka daugiau ar mažiau pastovus, skirtingai nei, pavyzdžiui, API/ABI lygis, kuris keičiasi dažniau. Be to, diegimas instrukcijų lygiu leidžia paleisti vadinamąją nemodifikuotą dvejetainę programinę įrangą, tai yra, paleisti jau sukompiliuotą kodą be jokių pakeitimų, lygiai taip, kaip jis naudojamas tikroje aparatinėje įrangoje. Kitaip tariant, galite padaryti standžiojo disko kopiją („išrašymą“), nurodyti jį kaip modelio vaizdą visos platformos simuliatoriuje ir galia! – OS ir kitos programos įkeliamos į treniruoklį be jokių papildomų veiksmų.

Simuliatoriaus veikimas

Kompiuterinių sistemų treniruokliai: pažįstamas visos platformos treniruoklis ir nežinomas pagal laikrodžio rodyklę bei pėdsakai

Kaip jau buvo minėta aukščiau, visos sistemos, ty visų jos įrenginių, modeliavimo procesas yra gana lėtas. Jei visa tai įgyvendinsite labai detaliai, pavyzdžiui, mikroarchitektūriniu ar loginiu, vykdymas taps itin lėtas. Tačiau instrukcijų lygis yra tinkamas pasirinkimas, leidžiantis OS ir programoms veikti tokiu greičiu, kad vartotojas galėtų patogiai su jomis bendrauti.

Čia būtų tikslinga paliesti simuliatoriaus atlikimo temą. Paprastai jis matuojamas IPS (instrukcijos per sekundę), tiksliau MIPS (milijonai IPS), tai yra procesoriaus komandų, kurias treniruoklis įvykdo per vieną sekundę, skaičius. Tuo pačiu metu modeliavimo greitis priklauso ir nuo sistemos, kurioje veikia pats modeliavimas, našumo. Todėl gali būti teisingiau kalbėti apie treniruoklio „sulėtėjimą“, palyginti su pradine sistema.

Rinkoje labiausiai paplitę visos platformos simuliatoriai, tokie kaip QEMU, VirtualBox ar VmWare Workstation, pasižymi geru našumu. Vartotojas gali net nepastebėti, kad simuliatoriuje vyksta darbas. Tai vyksta dėl specialių virtualizacijos galimybių, įdiegtų procesoriuose, dvejetainių vertimo algoritmų ir kitų įdomių dalykų. Visa tai yra atskiro straipsnio tema, bet trumpai tariant, virtualizacija yra šiuolaikinių procesorių techninė savybė, leidžianti treniruokliams ne imituoti instrukcijas, o siųsti jas vykdyti tiesiai į tikrą procesorių, jei, žinoma, simuliatorius ir procesorius yra panašūs. Dvejetainis vertimas yra svečio mašinos kodo vertimas į pagrindinio kompiuterio kodą ir tolesnis vykdymas tikrame procesoriuje. Dėl to modeliavimas yra tik šiek tiek lėtesnis, 5-10 kartų, ir dažnai netgi veikia tokiu pačiu greičiu kaip ir tikroji sistema. Nors tam įtakos turi daug veiksnių. Pavyzdžiui, jei norime imituoti sistemą su keliomis dešimtimis procesorių, greitis tuoj pat sumažės keliasdešimt kartų. Kita vertus, simuliatoriai, tokie kaip Simics naujausiose versijose, palaiko kelių procesorių pagrindinę aparatinę įrangą ir efektyviai lygiagrečiai modeliuojamus branduolius su tikro procesoriaus branduoliais.

Jei kalbėtume apie mikroarchitektūrinio modeliavimo greitį, tai dažniausiai jis būna keliomis eilėmis, maždaug 1000-10000 kartų lėtesnis nei vykdant įprastu kompiuteriu, be modeliavimo. Ir įgyvendinimas loginių elementų lygyje yra lėtesnis keliomis eilėmis. Todėl šiame lygyje kaip emuliatorius naudojamas FPGA, kuris gali žymiai padidinti našumą.

Toliau pateiktame grafike parodyta apytikslė modeliavimo greičio priklausomybė nuo modelio detalių.

Kompiuterinių sistemų treniruokliai: pažįstamas visos platformos treniruoklis ir nežinomas pagal laikrodžio rodyklę bei pėdsakai

Beat by beat modeliavimas

Nepaisant mažo vykdymo greičio, mikroarchitektūros treniruokliai yra gana dažni. Norint tiksliai imituoti kiekvienos komandos vykdymo laiką, būtinas vidinių procesoriaus blokų modeliavimas. Čia gali kilti nesusipratimų – juk, atrodytų, kodėl tiesiog neužprogramavus kiekvienos komandos vykdymo laiko. Tačiau toks treniruoklis bus labai netikslus, nes tos pačios instrukcijos vykdymo laikas gali skirtis priklausomai nuo skambučio.

Paprasčiausias pavyzdys yra prieigos prie atminties instrukcija. Jei talpykloje yra prašoma atminties vieta, vykdymo laikas bus minimalus. Jei šios informacijos nėra talpykloje („cache miss“), tai labai padidins komandos vykdymo laiką. Taigi tiksliam modeliavimui reikalingas talpyklos modelis. Tačiau šis klausimas neapsiriboja talpyklos modeliu. Procesorius tiesiog nelauks, kol duomenys bus nuskaityti iš atminties, kai jų nėra talpykloje. Vietoj to jis pradės vykdyti kitas instrukcijas, pasirinkdamas tas, kurios nepriklauso nuo skaitymo iš atminties rezultato. Tai yra vadinamasis „iš eilės“ vykdymas (OOO, iš eilės vykdymas), būtinas norint sumažinti procesoriaus prastovos laiką. Atitinkamų procesoriaus blokų modeliavimas padės į visa tai atsižvelgti skaičiuojant komandų vykdymo laiką. Tarp šių instrukcijų, vykdomų, kol laukiama nuskaitymo iš atminties rezultato, gali įvykti sąlyginė šuolio operacija. Jei sąlygos rezultatas šiuo metu nežinomas, procesorius vėlgi nesustabdo vykdymo, o „atspėja“, atlieka atitinkamą šaką ir toliau aktyviai vykdo instrukcijas nuo perėjimo taško. Toks blokas, vadinamas atšakos prognozuotoju, taip pat turi būti įdiegtas mikroarchitektūriniame treniruoklyje.

Žemiau esančiame paveikslėlyje pavaizduoti pagrindiniai procesoriaus blokai, jų žinoti nebūtina, jis parodytas tik norint parodyti mikroarchitektūrinio įgyvendinimo sudėtingumą.

Kompiuterinių sistemų treniruokliai: pažįstamas visos platformos treniruoklis ir nežinomas pagal laikrodžio rodyklę bei pėdsakai

Visų šių blokų veikimas realiame procesoriuje yra sinchronizuojamas specialiais laikrodžio signalais, taip nutinka ir modelyje. Toks mikroarchitektūrinis treniruoklis vadinamas tiksliu ciklu. Pagrindinis jo tikslas – tiksliai numatyti kuriamo procesoriaus veikimą ir/arba apskaičiuoti konkrečios programos, pavyzdžiui, etalono, vykdymo laiką. Jei reikšmės yra mažesnės nei reikalaujama, reikės modifikuoti algoritmus ir procesoriaus blokus arba optimizuoti programą.

Kaip parodyta aukščiau, laikrodis po laikrodžio modeliavimas yra labai lėtas, todėl naudojamas tik tiriant tam tikrus programos veikimo momentus, kur reikia išsiaiškinti tikrąjį programos vykdymo greitį ir įvertinti įrenginio, kurio veikimą ateityje, veikimą. modeliuojamas prototipas.

Šiuo atveju naudojamas funkcinis simuliatorius, kuris imituoja likusį programos veikimo laiką. Kaip šis naudojimo derinys vyksta iš tikrųjų? Pirmiausia paleidžiamas funkcinis simuliatorius, į kurį įkeliama OS ir viskas, ko reikia tiriamai programai paleisti. Juk mums neįdomi nei pati OS, nei pradiniai programos paleidimo etapai, jos konfigūracija ir pan. Tačiau taip pat negalime praleisti šių dalių ir iškart pereiti prie programos vykdymo nuo vidurio. Todėl visi šie preliminarūs veiksmai atliekami naudojant funkcinį treniruoklį. Po to, kai programa buvo įvykdyta iki mus dominančio momento, galimi du variantai. Galite pakeisti modelį laikrodžio modeliu ir tęsti vykdymą. Modeliavimo režimas, kuris naudoja vykdomąjį kodą (ty įprastus sukompiliuotus programų failus), vadinamas vykdymo modeliavimu. Tai yra labiausiai paplitusi modeliavimo parinktis. Galimas ir kitas būdas – pėdsakų valdomas modeliavimas.

Pėdsakais pagrįstas modeliavimas

Jį sudaro du žingsniai. Naudojant funkcinį treniruoklį arba realioje sistemoje, surenkamas programos veiksmų žurnalas ir įrašomas į failą. Šis žurnalas vadinamas pėdsaku. Priklausomai nuo to, kas tiriama, sekimas gali apimti vykdomąsias komandas, atminties adresus, prievadų numerius ir informaciją apie pertraukimą.

Kitas žingsnis yra „paleisti“ pėdsaką, kai laikrodis po laikrodžio simuliatorius nuskaito pėdsaką ir vykdo visas jame įrašytas instrukcijas. Pabaigoje gauname šios programos dalies vykdymo laiką, taip pat įvairias šio proceso ypatybes, pavyzdžiui, pataisų procentą talpykloje.

Svarbus darbo su pėdsakais bruožas yra determinizmas, tai yra, vykdydami modeliavimą aukščiau aprašytu būdu, vėl ir vėl atkuriame tą pačią veiksmų seką. Tai leidžia, keičiant modelio parametrus (talpyklos, buferio ir eilių dydžius) ir naudojant skirtingus vidinius algoritmus arba juos derinant, ištirti, kaip konkretus parametras veikia sistemos našumą ir kuri parinktis duoda geriausius rezultatus. Visa tai galima padaryti naudojant įrenginio prototipą prieš sukuriant tikrąjį aparatinės įrangos prototipą.

Šio metodo sudėtingumas slypi tuo, kad pirmiausia reikia paleisti programą ir surinkti pėdsakus, taip pat didžiulis pėdsakų failo dydis. Privalumai yra tai, kad pakanka imituoti tik dominančią įrenginio ar platformos dalį, o modeliavimui pagal vykdymą paprastai reikia pilno modelio.

Taigi, šiame straipsnyje apžvelgėme visos platformos modeliavimo ypatybes, kalbėjome apie diegimo greitį įvairiais lygiais, modeliavimą pagal laikrodį ir pėdsakus. Kitame straipsnyje aprašysiu pagrindinius simuliatorių naudojimo scenarijus tiek asmeniniais tikslais, tiek plėtros požiūriu didelėse įmonėse.

Šaltinis: www.habr.com

Добавить комментарий