Datorsistēmu simulatori: pazīstams pilnas platformas simulators un nezināms pulksteņrādītāja kustības virziens un pēdas

Raksta par datorsistēmu simulatoriem otrajā daļā turpināŔu vienkārŔā ievadformā runāt par datorsimulatoriem, proti, par pilnas platformas simulāciju, ar kuru visbiežāk saskaras vidusmēra lietotājs, kā arÄ« par pulksteņa laiku. -pulksteņa modelis un pēdas, kas biežāk sastopamas izstrādātāju aprindās.

Datorsistēmu simulatori: pazīstams pilnas platformas simulators un nezināms pulksteņrādītāja kustības virziens un pēdas

Š’ pirmā daļa Es runāju par to, kas vispār ir simulatori, kā arÄ« par simulācijas lÄ«meņiem. Tagad, balstoties uz Ŕīm zināŔanām, es ierosinu ienirt nedaudz dziļāk un runāt par pilnas platformas simulāciju, kā savākt pēdas, ko ar tām vēlāk darÄ«t, kā arÄ« par pulksteņa mikroarhitektÅ«ras emulāciju.

Pilnas platformas simulators jeb ā€œViens pats uz lauka nav karotājsā€

Ja vēlaties izpētÄ«t vienas konkrētas ierÄ«ces, piemēram, tÄ«kla kartes, darbÄ«bu vai rakstÄ«t programmaparatÅ«ru vai draiveri Å”ai ierÄ«cei, tad Ŕādu ierÄ«ci var simulēt atseviŔķi. Tomēr to izmantot atseviŔķi no pārējās infrastruktÅ«ras nav Ä«paÅ”i ērti. Lai palaistu atbilstoÅ”o draiveri, jums bÅ«s nepiecieÅ”ams centrālais procesors, atmiņa, piekļuve datu kopnei utt. Turklāt, lai draiveris darbotos, ir nepiecieÅ”ama operētājsistēma (OS) un tÄ«kla steks. Turklāt var bÅ«t nepiecieÅ”ams atseviŔķs pakeÅ”u Ä£enerators un atbildes serveris.

Pilnas platformas simulators rada vidi pilnÄ«gas programmatÅ«ras steka darbināŔanai, kas ietver visu, sākot no BIOS un bootloader lÄ«dz paÅ”ai OS un tās dažādajām apakÅ”sistēmām, piemēram, viena un tā pati tÄ«kla steka, draiveri un lietotāja lÄ«meņa lietojumprogrammas. Lai to izdarÄ«tu, tas ievieÅ” programmatÅ«ras modeļus lielākajai daļai datoru ierīču: procesoru un atmiņu, disku, ievades/izvades ierÄ«ces (tastatÅ«ru, peli, displeju), kā arÄ« to paÅ”u tÄ«kla karti.

Tālāk ir parādÄ«ta Intel x58 mikroshēmojuma blokshēma. Pilnas platformas datora simulatoram Å”ajā mikroshēmojumā ir jāievieÅ” lielākā daļa no uzskaitÄ«tajām ierÄ«cēm, tostarp tās, kas atrodas IOH (ievades/izvades centrmezglā) un ICH (ievades/izvades kontrollera centrmezglā), kas nav detalizēti attēlotas blokshēmā. . Lai gan, kā liecina prakse, nav daudz ierīču, kuras neizmantotu programmatÅ«ra, kuru mēs gatavojamies palaist. Šādu ierīču modeļi nav jāizveido.

Datorsistēmu simulatori: pazīstams pilnas platformas simulators un nezināms pulksteņrādītāja kustības virziens un pēdas

Visbiežāk pilnas platformas simulatori tiek ieviesti procesora instrukciju lÄ«menÄ« (ISA, skatÄ«t zemāk). iepriekŔējais raksts). Tas ļauj salÄ«dzinoÅ”i ātri un lēti izveidot paÅ”u simulatoru. ISA lÄ«menis ir arÄ« labs, jo tas paliek vairāk vai mazāk nemainÄ«gs, atŔķirÄ«bā, piemēram, no API/ABI lÄ«meņa, kas mainās biežāk. Turklāt ievieÅ”ana instrukciju lÄ«menÄ« ļauj palaist tā saukto nemodificēto bināro programmatÅ«ru, tas ir, palaist jau kompilētu kodu bez jebkādām izmaiņām, tieÅ”i tā, kā tas tiek izmantots reālajā aparatÅ«rā. Citiem vārdiem sakot, varat izveidot sava cietā diska kopiju (ā€œizgāztuviā€), norādÄ«t to kā modeļa attēlu pilnas platformas simulatorā, un var! ā€“ OS un citas programmas tiek ielādētas simulatorā bez papildu darbÄ«bām.

Simulatora veiktspēja

Datorsistēmu simulatori: pazīstams pilnas platformas simulators un nezināms pulksteņrādītāja kustības virziens un pēdas

Kā jau tika minēts iepriekÅ”, visas sistēmas, tas ir, visu tās ierīču, simulācijas process ir diezgan lēns pasākums. Ja to visu arÄ« ieviesÄ«si ļoti detalizētā lÄ«menÄ«, piemēram, mikroarhitektoniskā vai loÄ£iskā, tad izpilde kļūs ārkārtÄ«gi lēna. Taču instrukciju lÄ«menis ir pareizā izvēle, un tas ļauj operētājsistēmai un programmām darboties ar ātrumu, kas ir pietiekams, lai lietotājs varētu ar tām ērti mijiedarboties.

Å eit bÅ«tu lietderÄ«gi pieskarties simulatora darbÄ«bas tēmai. To parasti mēra IPS (instrukcijas sekundē), precÄ«zāk MIPS (miljonos IPS), tas ir, simulatora izpildÄ«to procesora instrukciju skaits vienā sekundē. Tajā paŔā laikā simulācijas ātrums ir atkarÄ«gs arÄ« no tās sistēmas veiktspējas, kurā darbojas pati simulācija. Tāpēc varētu bÅ«t pareizāk runāt par simulatora ā€œpalēnināŔanosā€, salÄ«dzinot ar sākotnējo sistēmu.

TirgÅ« izplatÄ«tākajiem pilnas platformas simulatoriem, piemēram, QEMU, VirtualBox vai VmWare Workstation, ir laba veiktspēja. Lietotājs var pat nepamanÄ«t, ka simulatorā notiek darbs. Tas notiek, pateicoties Ä«paÅ”ajām virtualizācijas iespējām, kas ieviestas procesoros, binārajiem tulkoÅ”anas algoritmiem un citām interesantām lietām. Tas viss ir atseviŔķa raksta tēma, bet Ä«si sakot, virtualizācija ir mÅ«sdienu procesoru aparatÅ«ras funkcija, kas ļauj simulatoriem nevis simulēt instrukcijas, bet gan nosÅ«tÄ«t tās izpildei tieÅ”i uz reālu procesoru, ja, protams, tiek izmantotas simulators un procesors ir lÄ«dzÄ«gi. Binārā tulkoÅ”ana ir viesu maŔīnas koda tulkoÅ”ana resursdatora kodā un sekojoÅ”a izpilde reālā procesorā. Rezultātā simulācija ir tikai nedaudz lēnāka, 5-10 reizes, un bieži vien pat darbojas ar tādu paÅ”u ātrumu kā reālā sistēma. Lai gan to ietekmē daudzi faktori. Piemēram, ja mēs vēlamies simulēt sistēmu ar vairākiem desmitiem procesoru, tad ātrums uzreiz samazināsies par Å”iem vairākiem desmitiem reižu. No otras puses, simulatori, piemēram, Simics jaunākajās versijās, atbalsta daudzprocesoru resursdatora aparatÅ«ru un efektÄ«vi paralēli simulētos kodolus reāla procesora kodoliem.

Ja runājam par mikroarhitektÅ«ras simulācijas ātrumu, tad tas parasti ir vairākas kārtas, aptuveni 1000-10000 reižu lēnāks nekā izpilde parastajā datorā, bez simulācijas. Un ievieÅ”ana loÄ£isko elementu lÄ«menÄ« ir par vairākām kārtām lēnāka. Tāpēc Å”ajā lÄ«menÄ« kā emulators tiek izmantots FPGA, kas var ievērojami palielināt veiktspēju.

Tālāk redzamajā grafikā parādīta aptuvenā simulācijas ātruma atkarība no modeļa detaļām.

Datorsistēmu simulatori: pazīstams pilnas platformas simulators un nezināms pulksteņrādītāja kustības virziens un pēdas

Simulācija pēc sitiena

Neskatoties uz to zemo izpildes ātrumu, mikroarhitektÅ«ras simulatori ir diezgan izplatÄ«ti. Procesora iekŔējo bloku simulācija ir nepiecieÅ”ama, lai precÄ«zi simulētu katras instrukcijas izpildes laiku. Å eit var rasties pārpratumi - galu galā, Ŕķiet, kāpēc gan vienkārÅ”i neieprogrammēt katras instrukcijas izpildes laiku. Bet Ŕāds simulators bÅ«s ļoti neprecÄ«zs, jo vienas un tās paÅ”as instrukcijas izpildes laiks var atŔķirties atkarÄ«bā no zvana.

VienkārŔākais piemērs ir atmiņas piekļuves instrukcija. Ja pieprasÄ«tā atmiņas vieta ir pieejama keÅ”atmiņā, tad izpildes laiks bÅ«s minimāls. Ja Ŕī informācija nav keÅ”atmiņā (ā€œcache missā€), tas ievērojami palielinās instrukcijas izpildes laiku. Tādējādi precÄ«zai simulācijai ir nepiecieÅ”ams keÅ”atmiņas modelis. Tomēr jautājums neaprobežojas tikai ar keÅ”atmiņas modeli. Procesors vienkārÅ”i negaidÄ«s, lÄ«dz dati tiks izgÅ«ti no atmiņas, kad tie nav keÅ”atmiņā. Tā vietā tas sāks izpildÄ«t nākamos norādÄ«jumus, izvēloties tos, kas nav atkarÄ«gi no nolasÄ«Å”anas no atmiņas rezultāta. Å Ä« ir tā sauktā ā€œÄrpus kārtÄ«basā€ izpilde (OOO, out of order execution), kas nepiecieÅ”ama, lai samazinātu procesora dÄ«kstāves laiku. AtbilstoÅ”o procesora bloku modelÄ“Å”ana palÄ«dzēs to visu ņemt vērā, aprēķinot instrukciju izpildes laiku. Starp Å”iem norādÄ«jumiem, kas tiek izpildÄ«ti, kamēr tiek gaidÄ«ts nolasÄ«Å”anas rezultāts no atmiņas, var notikt nosacÄ«ta lēciena darbÄ«ba. Ja nosacÄ«juma rezultāts Å”obrÄ«d nav zināms, tad atkal procesors neaptur izpildi, bet izdara ā€œminējumuā€, izpilda atbilstoÅ”o atzaru un turpina proaktÄ«vi izpildÄ«t instrukcijas no pārejas punkta. Šāds bloks, ko sauc par zaru prognozētāju, ir jāievieÅ” arÄ« mikroarhitektÅ«ras simulatorā.

Zemāk esoÅ”ajā attēlā redzami procesora galvenie bloki, tas nav jāzina, tas ir parādÄ«ts tikai, lai parādÄ«tu mikroarhitektÅ«ras realizācijas sarežģītÄ«bu.

Datorsistēmu simulatori: pazīstams pilnas platformas simulators un nezināms pulksteņrādītāja kustības virziens un pēdas

Visu Å”o bloku darbÄ«ba reālā procesorā tiek sinhronizēta ar Ä«paÅ”iem pulksteņa signāliem, un tas pats notiek modelÄ«. Šādu mikroarhitektÅ«ras simulatoru sauc par cikla precÄ«zu. Tās galvenais mērÄ·is ir precÄ«zi paredzēt izstrādājamā procesora veiktspēju un/vai aprēķināt konkrētas programmas, piemēram, etalona, ā€‹ā€‹izpildes laiku. Ja vērtÄ«bas ir zemākas par nepiecieÅ”amo, tad bÅ«s nepiecieÅ”ams modificēt algoritmus un procesora blokus vai optimizēt programmu.

Kā redzams iepriekÅ”, pulksteņa pēc pulksteņa simulācija ir ļoti lēna, tāpēc tiek izmantota tikai pētot noteiktus programmas darbÄ«bas momentus, kur nepiecieÅ”ams noskaidrot reālo programmas izpildes ātrumu un novērtēt tās ierÄ«ces turpmāko veiktspēju, kura prototips tiek simulēts.

Å ajā gadÄ«jumā tiek izmantots funkcionāls simulators, lai simulētu atlikuÅ”o programmas darbÄ«bas laiku. Kā Ŕī izmantoÅ”anas kombinācija notiek patiesÄ«bā? Pirmkārt, tiek palaists funkcionālais simulators, kurā tiek ielādēta OS un viss nepiecieÅ”amais pētāmās programmas palaiÅ”anai. Galu galā mÅ«s neinteresē ne pati OS, ne programmas palaiÅ”anas sākumposmi, tās konfigurācija utt. Tomēr mēs arÄ« nevaram izlaist Ŕīs daļas un nekavējoties pāriet uz programmas izpildi no vidus. Tāpēc visas Ŕīs sākotnējās darbÄ«bas tiek veiktas funkcionālā simulatorā. Pēc tam, kad programma ir izpildÄ«ta lÄ«dz mÅ«s interesējoÅ”am brÄ«dim, ir iespējami divi varianti. Varat aizstāt modeli ar pulksteņa cikla modeli un turpināt izpildi. Simulācijas režīmu, kurā tiek izmantots izpildāms kods (tas ir, regulāri kompilēti programmu faili), sauc par izpildes simulāciju. Å Ä« ir visizplatÄ«tākā simulācijas iespēja. Iespējama arÄ« cita pieeja ā€“ izsekot vadÄ«ta simulācija.

Uz izsekoŔanu balstīta simulācija

Tas sastāv no diviem posmiem. Izmantojot funkcionālu simulatoru vai reālā sistēmā, programmas darbÄ«bu žurnāls tiek savākts un ierakstÄ«ts failā. Å o žurnālu sauc par izsekoÅ”anu. AtkarÄ«bā no tā, kas tiek pārbaudÄ«ts, izsekoÅ”ana var ietvert izpildāmas instrukcijas, atmiņas adreses, portu numurus un pārtraukuma informāciju.

Nākamais solis ir trases ā€œatskaņoÅ”anaā€, kad pulksteņa simulators nolasa trasējumu un izpilda visus tajā rakstÄ«tos norādÄ«jumus. Beigās mēs iegÅ«stam Ŕīs programmas daļas izpildes laiku, kā arÄ« dažādus Ŕī procesa raksturlielumus, piemēram, trāpÄ«jumu procentuālo daudzumu keÅ”atmiņā.

SvarÄ«ga iezÄ«me darbā ar pēdām ir determinisms, tas ir, veicot simulāciju iepriekÅ” aprakstÄ«tajā veidā, mēs atkal un atkal atkārtojam vienu un to paÅ”u darbÄ«bu secÄ«bu. Tas ļauj, mainot modeļa parametrus (keÅ”atmiņas, bufera un rindu izmērus) un izmantojot dažādus iekŔējos algoritmus vai tos regulējot, izpētÄ«t, kā konkrēts parametrs ietekmē sistēmas veiktspēju un kura opcija dod vislabākos rezultātus. To visu var izdarÄ«t ar ierÄ«ces modeļa prototipu, pirms tiek izveidots faktiskais aparatÅ«ras prototips.

Å Ä«s pieejas sarežģītÄ«ba ir saistÄ«ta ar nepiecieÅ”amÄ«bu vispirms palaist lietojumprogrammu un apkopot izsekojumu, kā arÄ« lielajā izsekoÅ”anas faila izmērā. PriekÅ”rocÄ«bas ietver to, ka pietiek tikai simulēt interesējoÅ”o ierÄ«ces vai platformas daļu, savukārt simulācijai ar izpildi parasti ir nepiecieÅ”ams pilns modelis.

Tātad, Å”ajā rakstā mēs apskatÄ«jām pilnas platformas simulācijas iespējas, runājām par ievieÅ”anas ātrumu dažādos lÄ«meņos, simulāciju pēc pulksteņa un izsekoÅ”anas. Nākamajā rakstā aprakstÄ«Å”u galvenos simulatoru izmantoÅ”anas scenārijus gan personÄ«giem mērÄ·iem, gan no attÄ«stÄ«bas viedokļa lielos uzņēmumos.

Avots: www.habr.com

Pievieno komentāru