Компьютерлік жүйелердің симуляторлары: таныс толық платформалық тренажер және белгісіз сағат тілі мен іздері

Компьютерлік жүйе тренажерлары туралы мақаланың екінші бөлігінде мен компьютерлік тренажерлар туралы қарапайым кіріспе түрінде, атап айтқанда қарапайым пайдаланушы жиі кездесетін толық платформалық модельдеу туралы, сондай-ақ сағат бойынша сөйлесуді жалғастырамын. -сағат үлгісі және әзірлеушілер шеңберлерінде жиі кездесетін іздер.

Компьютерлік жүйелердің симуляторлары: таныс толық платформалық тренажер және белгісіз сағат тілі мен іздері

В Бірінші бөлім Мен жалпы симуляторлар дегеніміз не, сондай-ақ модельдеу деңгейлері туралы айттым. Енді сол білімге сүйене отырып, мен тереңірек сүңгуді және толық платформалық модельдеу, іздерді қалай жинау керек, олармен кейінірек не істеу керек, сонымен қатар сағат сайын микроархитектуралық эмуляция туралы сөйлесуді ұсынамын.

Толық платформа симуляторы немесе «Даладағы жалғыз жауынгер емес»

Егер сіз белгілі бір құрылғының жұмысын зерттегіңіз келсе, мысалы, желілік карта немесе осы құрылғыға микробағдарлама немесе драйвер жазғыңыз келсе, онда мұндай құрылғыны бөлек модельдеуге болады. Дегенмен, оны инфрақұрылымның қалған бөлігінен оқшаулап пайдалану өте ыңғайлы емес. Сәйкес драйверді іске қосу үшін сізге орталық процессор, жад, деректер шинасына қол жеткізу және т.б. Бұған қоса, драйвер жұмыс істеуі үшін операциялық жүйе (ОЖ) мен желілік стек қажет. Сонымен қатар, бөлек пакет генераторы мен жауап сервері қажет болуы мүмкін.

Толық платформалық тренажер толық бағдарламалық жасақтаманы іске қосу үшін орта жасайды, ол BIOS-тан және жүктеушіден бастап ОЖ-нің өзіне және оның әртүрлі ішкі жүйелеріне дейін, мысалы, бірдей желілік стек, драйверлер және пайдаланушы деңгейіндегі қолданбалар кіреді. Ол үшін компьютерлік құрылғылардың көпшілігінің бағдарламалық үлгілерін іске асырады: процессор мен жад, диск, енгізу/шығару құрылғылары (пернетақта, тінтуір, дисплей), сонымен қатар бір желілік карта.

Төменде Intel компаниясының x58 чипсетінің блок диаграммасы берілген. Бұл чипсеттегі толық платформалық компьютерлік симулятор тізімделген құрылғылардың көпшілігін, соның ішінде блок-схемада егжей-тегжейлі көрсетілмеген IOH (кіріс/шығыс хабы) және ICH (кіріс/шығыс контроллері хабы) ішіндегі құрылғыларды енгізуді талап етеді. . Дегенмен, тәжірибе көрсеткендей, біз іске қосатын бағдарламалық жасақтамада пайдаланылмайтын құрылғылар көп емес. Мұндай құрылғылардың үлгілерін жасаудың қажеті жоқ.

Компьютерлік жүйелердің симуляторлары: таныс толық платформалық тренажер және белгісіз сағат тілі мен іздері

Көбінесе толық платформалық тренажерлар процессордың нұсқау деңгейінде жүзеге асырылады (ISA, төменде қараңыз). алдыңғы мақала). Бұл симулятордың өзін салыстырмалы түрде тез және арзан жасауға мүмкіндік береді. ISA деңгейі де жақсы, себебі ол, мысалы, жиі өзгеретін API/ABI деңгейіне қарағанда азды-көпті тұрақты болып қалады. Сонымен қатар, нұсқау деңгейінде іске асыру модификацияланбаған екілік бағдарламалық қамтамасыз етуді іске қосуға мүмкіндік береді, яғни нақты аппараттық құралда қолданылатындай, қазірдің өзінде құрастырылған кодты ешқандай өзгеріссіз іске қосуға мүмкіндік береді. Басқаша айтқанда, сіз қатты дискіңіздің көшірмесін («қоқыс») жасай аласыз, оны толық платформалық тренажердегі үлгіге арналған кескін ретінде көрсете аласыз және voila! – ОЖ және басқа бағдарламалар симуляторға ешқандай қосымша әрекеттерсіз жүктеледі.

Симулятор өнімділігі

Компьютерлік жүйелердің симуляторлары: таныс толық платформалық тренажер және белгісіз сағат тілі мен іздері

Жоғарыда айтылғандай, бүкіл жүйені, яғни оның барлық құрылғыларын имитациялау процесі өте баяу әрекет. Егер сіз мұның барлығын өте егжей-тегжейлі деңгейде жүзеге асырсаңыз, мысалы, микроархитектуралық немесе логикалық, онда орындау өте баяу болады. Бірақ нұсқау деңгейі сәйкес таңдау болып табылады және ОЖ мен бағдарламаларды пайдаланушыға олармен ыңғайлы әрекеттесу үшін жеткілікті жылдамдықта орындауға мүмкіндік береді.

Бұл жерде симулятор өнімділігі тақырыбына тоқталған жөн болар еді. Ол әдетте IPS (секундына нұсқаулар), дәлірек айтқанда MIPS (миллион IPS), яғни симулятор бір секундта орындайтын процессор нұсқауларының санымен өлшенеді. Сонымен қатар модельдеу жылдамдығы симуляцияның өзі жұмыс істейтін жүйенің өнімділігіне де байланысты. Сондықтан бастапқы жүйемен салыстырғанда симулятордың «баяулауы» туралы айту дұрысырақ болуы мүмкін.

QEMU, VirtualBox немесе VmWare Workstation сияқты нарықтағы ең көп таралған толық платформалы тренажерлар жақсы өнімділікке ие. Тренажерде жұмыс жүріп жатқанын пайдаланушы тіпті байқамауы да мүмкін. Бұл процессорларда енгізілген арнайы виртуалдандыру мүмкіндіктерінің, екілік аударма алгоритмдерінің және басқа да қызықты нәрселердің арқасында орын алады. Мұның бәрі жеке мақаланың тақырыбы, бірақ қысқаша айтқанда, виртуалдандыру - бұл тренажерларға нұсқауларды имитациялауға емес, оларды орындау үшін тікелей нақты процессорға жіберуге мүмкіндік беретін заманауи процессорлардың аппараттық мүмкіндігі, егер, әрине, архитектура симулятор мен процессор ұқсас. Екілік аударма – қонақтың машиналық кодын хост кодына аудару және одан кейін нақты процессорда орындау. Нәтижесінде модельдеу сәл ғана баяу, 5-10 есе және жиі тіпті нақты жүйемен бірдей жылдамдықта жұмыс істейді. Бұған көптеген факторлар әсер еткенімен. Мысалы, егер біз бірнеше ондаған процессорлары бар жүйені модельдегіміз келсе, онда жылдамдық бірден бірнеше ондаған есе төмендейді. Екінші жағынан, соңғы нұсқалардағы Simics сияқты тренажерлар мультипроцессорлық хост аппараттық құралдарын қолдайды және имитацияланған ядроларды нақты процессордың ядроларына тиімді параллельді етеді.

Егер микроархитектуралық модельдеудің жылдамдығы туралы айтатын болсақ, онда ол әдетте модельдеусіз қарапайым компьютерде орындауға қарағанда шамамен 1000-10000 есе баяу шаманың бірнеше реттері болады. Ал логикалық элементтер деңгейінде іске асыру бірнеше реттілікпен баяу. Сондықтан FPGA осы деңгейде эмулятор ретінде пайдаланылады, ол өнімділікті айтарлықтай арттыра алады.

Төмендегі график модельдеу жылдамдығының модель бөлшектеріне шамамен тәуелділігін көрсетеді.

Компьютерлік жүйелердің симуляторлары: таныс толық платформалық тренажер және белгісіз сағат тілі мен іздері

Соққы бойынша имитациялық модельдеу

Төмен орындалу жылдамдығына қарамастан, микроархитектуралық тренажерлар өте кең таралған. Процессордың ішкі блоктарын модельдеу әрбір нұсқаудың орындалу уақытын дәл модельдеу үшін қажет. Бұл жерде түсінбеушілік туындауы мүмкін - әр нұсқаудың орындалу уақытын неге жай ғана бағдарламаламасқа. Бірақ мұндай тренажер өте дәл емес болады, өйткені бір нұсқаудың орындалу уақыты қоңыраудан қоңырауға әртүрлі болуы мүмкін.

Ең қарапайым мысал - жадқа кіру нұсқаулығы. Сұралған жад орны кэште қол жетімді болса, орындау уақыты ең аз болады. Егер бұл ақпарат кэште болмаса («кэшті жіберіп алу»), онда бұл нұсқаулықтың орындалу уақытын айтарлықтай арттырады. Осылайша, дәл модельдеу үшін кэш үлгісі қажет. Дегенмен, мәселе кэш үлгісімен шектелмейді. Процессор деректердің кэште болмаған кезде жадтан алынуын күтпейді. Оның орнына ол жадтан оқу нәтижесіне тәуелді еместерді таңдап, келесі нұсқауларды орындауға кіріседі. Бұл процессордың бос тұру уақытын азайту үшін қажет «ретсіз» орындау (OOO, тыс орындау). Сәйкес процессор блоктарын модельдеу нұсқаулардың орындалу уақытын есептеу кезінде осының барлығын ескеруге көмектеседі. Жадтан оқу нәтижесі күтілген кезде орындалатын осы нұсқаулардың ішінде шартты өту әрекеті орын алуы мүмкін. Егер шарттың нәтижесі қазіргі уақытта белгісіз болса, онда процессор қайтадан орындауды тоқтатпайды, бірақ «болжамды» жасайды, сәйкес тармақты орындайды және ауысу нүктесінен нұсқауларды белсенді түрде орындауды жалғастырады. Тармақ болжаушысы деп аталатын мұндай блок микроархитектуралық симуляторда да жүзеге асырылуы керек.

Төмендегі суретте процессордың негізгі блоктары көрсетілген, оны білудің қажеті жоқ, ол тек микроархитектуралық жүзеге асырудың күрделілігін көрсету үшін көрсетілген.

Компьютерлік жүйелердің симуляторлары: таныс толық платформалық тренажер және белгісіз сағат тілі мен іздері

Барлық осы блоктардың нақты процессордағы жұмысы арнайы тактілік сигналдармен синхрондалады және модельде де солай болады. Мұндай микроархитектуралық тренажер цикл дәл деп аталады. Оның негізгі мақсаты әзірленіп жатқан процессордың өнімділігін дәл болжау және/немесе нақты бағдарламаның, мысалы, эталонның орындалу уақытын есептеу болып табылады. Егер мәндер талап етілгеннен төмен болса, онда алгоритмдер мен процессор блоктарын өзгерту немесе бағдарламаны оңтайландыру қажет болады.

Жоғарыда көрсетілгендей, сағат бойынша модельдеу өте баяу, сондықтан ол бағдарлама жұмысының белгілі бір сәттерін зерттеу кезінде ғана қолданылады, мұнда бағдарламаның орындалуының нақты жылдамдығын білу және құрылғының болашақ өнімділігін бағалау қажет. прототипі имитациялануда.

Бұл жағдайда бағдарламаның қалған жұмыс уақытын имитациялау үшін функционалдық симулятор қолданылады. Бұл пайдалану комбинациясы іс жүзінде қалай орын алады? Біріншіден, функционалдық симулятор іске қосылады, оған ОЖ және зерттелетін бағдарламаны іске қосу үшін қажеттінің бәрі жүктеледі. Өйткені, бізді ОЖ-ның өзі де, бағдарламаны іске қосудың бастапқы кезеңдері де, оның конфигурациясы және т.б. қызықтырмайды. Дегенмен, біз де бұл бөліктерді өткізіп жібере алмаймыз және бірден бағдарламаны ортасынан орындауға көшеміз. Сондықтан барлық осы алдын ала қадамдар функционалдық симуляторда орындалады. Бағдарлама бізді қызықтыратын сәтке дейін орындалғаннан кейін екі нұсқа болуы мүмкін. Модельді сағат бойынша үлгімен ауыстырып, орындауды жалғастыра аласыз. Орындалатын кодты (яғни, кәдімгі құрастырылған бағдарлама файлдары) пайдаланатын модельдеу режимі орындауға негізделген модельдеу деп аталады. Бұл симуляцияның ең көп таралған нұсқасы. Басқа тәсіл де мүмкін - ізге негізделген модельдеу.

Бақылауға негізделген модельдеу

Ол екі қадамнан тұрады. Функционалдық симуляторды немесе нақты жүйені пайдалану арқылы бағдарлама әрекеттерінің журналы жиналады және файлға жазылады. Бұл журнал із деп аталады. Тексерілетін нәрсеге байланысты ізде орындалатын нұсқаулар, жад мекенжайлары, порт нөмірлері және үзу ақпараты болуы мүмкін.

Келесі қадам - ​​сағаттық тренажер ізді оқып, онда жазылған барлық нұсқауларды орындаған кезде ізді «ойнату». Соңында біз бағдарламаның осы бөлігінің орындалу уақытын, сондай-ақ осы процестің әртүрлі сипаттамаларын, мысалы, кэштегі хиттердің пайызын аламыз.

Ізбен жұмыс істеудің маңызды ерекшелігі детерминизм болып табылады, яғни симуляцияны жоғарыда сипатталған әдіспен орындау арқылы біз бір әрекеттер тізбегін қайта-қайта шығарамыз. Бұл үлгі параметрлерін өзгерту (кэш, буфер және кезек өлшемдері) және әртүрлі ішкі алгоритмдерді пайдалану немесе оларды реттеу арқылы белгілі бір параметрдің жүйе өнімділігіне қалай әсер ететінін және қай опция ең жақсы нәтиже беретінін зерттеуге мүмкіндік береді. Мұның барлығын нақты аппараттық құрал прототипін жасамас бұрын прототиптік құрылғы үлгісімен жасауға болады.

Бұл тәсілдің күрделілігі алдымен қолданбаны іске қосу және ізді жинау қажеттілігінде, сондай-ақ бақылау файлының үлкен өлшемінде жатыр. Артықшылықтарға құрылғының немесе платформаның бір бөлігін ғана имитациялау жеткілікті, ал орындау арқылы модельдеу әдетте толық модельді қажет етеді.

Сонымен, осы мақалада біз толық платформалық модельдеудің ерекшеліктерін қарастырдық, әртүрлі деңгейлерде іске асыру жылдамдығы, сағаттық модельдеу және іздер туралы әңгімелестік. Келесі мақалада мен жеке мақсаттарда да, ірі компаниялардағы даму тұрғысынан да тренажерларды пайдаланудың негізгі сценарийлерін сипаттайтын боламын.

Ақпарат көзі: www.habr.com

пікір қалдыру