Кіріспе

Компьютерлік бағдарламаның бір бөлімі қолданған уақытты және ресурстарды өлшеу. Бағдарламалық жасақтауда профильдеу ("бағдарламалық профильдеу", "программалық профильдеу") – динамикалық бағдарлама талдауының бір түрі. Ол, мысалы, бағдарламаның кеңістіктік (жад) немесе уақыттық күрделілігін, нақты нұсқаулардың қолданылуын немесе функция шақыруларының жиілігі мен ұзақтығын өлшейді. Көбінесе профильдеу туралы мәліметтер бағдарламаны оңтайландыруға, әсіресе, өнімділік инженериясына көмектеседі. Профильдеу бағдарламаның бастапқы кодын немесе оның бинарлық атқарылатын нұсқасын "профильдеуші" (немесе "кодты профильдеуші") деп аталатын құрал арқылы құрастыру арқылы жүзеге асырылады. Профильдеушілер оқиғаларға негізделген, статистикалық, құралдық және модельдеу сияқты әртүрлі әдістерді пайдалана алады.

Бағдарламаның жиынтық оқиғалары

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

Тарих

1970 жылдардың басында IBM/360 және IBM/370 платформаларында перформансты талдау құралдары пайда болды, олар әдетте кодты орындаудағы "қызыл нүктелерді" анықтау үшін белгілі бір уақыт интервалдарында бағдарламаның жай-күй сөзін (PSW) тіркейтетін таймерлік үзілістерге негізделген. Бұл үлгі алудың ерте мысалы болды (төменде қараңыз). 1974 жылдың басында нұсқаулар жиынтығының симуляторлары толық іздену және басқа да перформансты бақылау мүмкіндіктерін ұсынды. Unix жүйелеріндегі профильдік бағдарламалық талдау 1973 жылға дейін жетеді, сол кезде Unix жүйелерінде әр функцияның қанша орындалу уақытын қолданғанын тізімдейтін prof деген қарапайым құрал болды. 1982 жылы gprof бұл ұғымды толық шақыру графигін талдауға дейін кеңейтті. 1994 жылы Амитабх Шривастава мен Алан Юстас Digital Equipment Corporation компаниясынан ATOM (OM құралдарымен талдау) туралы мақала жариялады. ATOM платформасы бағдарламаны оның өзінің профильдеушісіне айналдырады: компиляция кезінде ол талдау үшін бағдарламаға кодты қосады. Осы қосылған код талдау деректерін шығарады. Бағдарламаны өзін-өзі талдау үшін өзгерту әдісі "инструментация" деп аталады. 2004 жылы gprof және ATOM мақалалары 1999 жылы аяқталған 20 жылдық кезеңдегі ең ықпалды PLDI мақалаларының тізіміне енді.

Пәтерлік профильдеуші

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

Шақыру графигінің профильдеушісі

Шақыру графигін профильдеушілер flat немесе шақыру графигін профильдеушілерге кіріс жұмыс жүктемесінің сипаттамаларына – мысалы, кіріс мөлшеріне немесе кіріс мәндеріне – қатысты өнімділік өлшемдерін қосымша қарастырады. Олар қолданбаның өнімділігінің кіріске байланысты қалай өзгеретінін көрсететін графикті жасайды.

Профильдеуші түрлеріндегі деректердің түйіршіктілігі

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

Статистикалық профильдеушілер

Кейбір профильдеушілер үлгі алу арқылы жұмыс істейді. Үлгілеу профильдеуі операциялық жүйелік үзілістерді пайдалану арқылы мақсатты бағдарламаның шақыру стегін белгілі бір интервалдармен тексереді. Үлгілеу профильдері әдетте сандық тұрғыдан аз дәл және егжей-тегжейлі болады, бірақ мақсатты бағдарламаның дерлік толық жылдамдықпен жұмыс істеуіне мүмкіндік береді. Нәтижеде алынған деректер нақты емес, статистикалық жуықтау болып табылады. "Нақты қате мөлшері әдетте бір үлгі алу периодынан аспайды. Егер мән n есе үлгі алу периодына тең болса, онда күтілетін қате n үлгі алу периодының квадрат түбіріне тең болады". Іс жүзінде, үлгілеу профильдеушілері мақсатты бағдарламаның орындалуы туралы басқа әдістерге қарағанда көбінесе нақтырақ көрініс бере алады, себебі олар мақсатты бағдарламаға аз әсер етеді, сондықтан көптеген жанама әсерлері болмайды (мысалы, жад кэштеріне немесе нұсқауларды декодтау конвейерлеріне). Сондай-ақ, олар орындалу жылдамдығына көп әсер етпегендіктен, әлгінше жасырылған мәселелерді анықтай алады. Олар сонымен қатар кішкентай, жиі шақырылатын процедуралардың немесе "тығыз" циклдардың құнын артық бағалауға төзімді. Олар жүйелік шақыруларды өңдеу сияқты пайдаланушы режимінде және үзіліске ұшырауы мүмкін ядро режимінде өткізілген уақыт мөлшерін көрсетуге мүмкіндік береді. Дегенмен, үзілістерді басқаруға арналған ядро кодын CPU циклдерінің шағын шығыны, кэштің басқаша пайдаланылуы және үзіліске ұшырамайтын ядро кодын ішінде жүріп жатқан әртүрлі тапсырмаларды ажырата алмау сияқты кемшіліктері бар (микросекундтық деңгейдегі әрекеттер). Арнайы аппараттық құралдар бұдан да асып түседі: ARM Cortex M3 және кейбір жаңа MIPS процессорларының JTAG интерфейсі PCSAMPLE тіркегісіне ие, ол бағдарламалық тізімді толығымен байқалмайтын тәсілмен үлгілейді, бұл интрузивті емес жазық профильді жинауға мүмкіндік береді. Java/басқарылатын код үшін қолданылатын кең таралған статистикалық профильдеушілердің бірі – SmartBear Software AQtime және Microsoft CLR Profiler. Бұл профильдеушілер Apple Inc. Shark (OSX), OProfile (Linux), Intel VTune және Parallel Amplifier (Intel Parallel Studio құрамында) және Oracle Performance Analyzer сияқты басқа кодтарды да профильдеуді қолдайды.

Аудармашының аспаптары

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

Гипервизор/симулятор

Гипервизор: Деректер әдетте өзгертілмеген бағдарламаны гипервизор астында іске қосу арқылы жиналады. Мысал: SIMMON.
Симулятор және гипервизор: Деректер өзгертілмеген бағдарламаны нұсқаулар жиынтығы симуляторы астында іске қосу арқылы интерактивті және таңдаулы түрде жиналады.