Профілювання — збір та аналіз інформації про виконання програми з метою оптимізації її роботи, застосовується в процесі розробки програмного забезпечення. Профілювання — форма аналізу динамічних показників програми, в протилежність статичному аналізу коду. Звичайна задача аналізу продуктивності — визначити частини програми, які слід оптимізувати для покращення використання пам'яті або підвищення швидкості. Профілювання виконується за допомогою спеціальних програмних засобів, що називаються профайлерами.
Використання профайлерів
Інструменти програмного аналізу критично важливі для розуміння поведінки програми. Комп'ютерним архітекторам потрібні такі інструменти, аби оцінити, як хороші програми виконуватимуться на новій архітектурі. Авторам програмного забезпечення також потрібні інструменти, аби проаналізувати їх програми і ідентифікувати критичні частини коду. Автори компіляторів часто використовують такі інструменти, аби з'ясувати, як добре виконується їх планування інструкцій або алгоритм передбачення, що відгалужується...
Профайлер — інструмент аналізу продуктивності, який збирає дані для профілювання, особливо кількість викликів і тривалість виконання функцій. Вихідний результат — потік записаних подій (a trace) або статистичний короткий звіт спостережуваних подій (a profile). Профайлери використовують широку різноманітність методів, аби зібрати дані, у тому числі апаратні переривання, апаратну підтримку, пастки операційної системи. Використання профайлерів потрібне в процесі планування продуктивності.
Оскільки підсумовування в профайлі пов'язано з позицією вихідного коду, розмір вихідних даних лінійно залежить від розміру коду програми та може залежати від часу її виконання. Для однопотокових програм профайл надає достатньо інформації для оптимізації, але проблеми продуктивності в багатопотокових програмах через очікувальні повідомлення або проблеми синхронізації часто залежать від взаємозв'язку часу виникнення подій, тому вимагають розширеного запису профайлу, щоб зрозуміти проблему.
Історія
Інструменти аналізу продуктивності існували на платформах (IBM/360) і (IBM/370) від початку 1970-х років. Ці інструменти зазвичай використовували переривання таймера, які записували PSW (англ. Program Status Word, Слово Стану Процесора) в визначені проміжки часу, аби виявити "гарячі місця" у виконуваному коді. В 1974 році Імітатори Системи Команд надали повний запис і інші можливості контролю продуктивності.
Виконуваний профайлером аналіз програми на Unix датується як мінімум 1979 роком, коли для систем Unix було розроблено основний інструмент prof, який виводив список викликів кожної функції і тривалість її виконання. У 1982 році gprof розширив профілювання до повного аналізу графу виклику.
У 1994 році Амітаб Срівастава і Алан Юстас з Digital Equipment Corporation видали документ, що описує АТОМ. АТОМ — платформа для перетворення програми на її власний профайлер. Тобто, під час компіляції, вона вставляє в програму спеціальний код для збирання інформації про події в програмі. Ця техніка, що змінює програму для аналізу, відома як "instrumentation".
Типи профайлерів, основаних на виводі
Flat профайлер
Flat-профайлери обчислюють середній час виклику функцій і не переривають виклики, засновані на callee або контексті.
Call-Graph профайлер
Call Graph профайлери показують часи виклику і частоти функцій, а також ланцюги викликів, заснованих на callee. Проте не зберігають контекст.
Методи збору даних
Профайлери, засновані на подіях
Мови програмування, перелічені тут, мають профайлери, засновані на подіях:
- .NET: Може прикріпити профілювального агента як сервер COM до CLR. Подібно до Java, час виконання потім забезпечує різні повторні виклики в агентові, для перехоплення подій подібно до методу JIT/ введення / вихід, створення об'єктів і т.п. Особливо потужний в цьому агент профілювання може переписати код цільової програми довільним способом.
- Java: JVM-Tools Interface (колись JVM Profiling Interface) JVM API забезпечує пастки до профайлеру, для заманювання в пастку подій, таких як викликів, завантаження класу, вивантаження, вхід-вихід потоку.
- Python: профілювання Python включає модуль профілювання, хотшот (який є заснованим на call-graph), і використовуючи 'Sys.setprofile()' модуль до подій-пасток подібно до c_{call,return,exception}, python_{call,return,exception}.
- Ruby: Ruby також використовує подібний до Python інтерфейс для профілювання. Є flat-профайлер в profile.rb, модуль, і ruby-prof C-розширення.
Статистичні профайлери
Деякі профайлери оперують здійсненням вибірки. Профайлер, що здійснює вибірку, досліджує лічильник команд цільової програми з регулярними проміжками, використовуючи переривання операційної системи. Профайлери, що здійснюють вибірку, зазвичай менш точні і специфічні, але дозволяють цільовій програмі працювати майже на повну швидкість.
Деякі профайлери надають цільовій програмі додаткові команди збирати необхідну інформацію. Це може призводити до змін у виконанні програми, викликаючи неакуратні результати і помилки. Це може бути дуже специфічним, але уповільнює цільову програму, оскільки більше специфічної інформації збирається.
Результативні дані не остаточна істина, а статистична апроксимація. Фактична кількість помилок зазвичай більша, ніж один вибраний період вибірки. Фактично, якщо значення - n разів періоду вибірки, очікувана помилка в ньому - корінь квадратний з вибраних періодів.
Деякі з найбільш використовуваних статистичних профайлерів це GNU's , Oprofile, AMD's CodeAnalyst та SGI's Pixie.
Інструменти
Інструкція: Робиться програмістом, наприклад додаючи команди, аби явно обчислити часи виконання.
Допоміжний компілятор: Приклад: "gcc -pg ..." для gprof, "quantify g++ ..." для Quantify Бінарна трансляція: інструмент додає інструментацію в скомпільований бінарний файл. Приклад: АТОМ.
Інструментація виконання: Безпосередньо перед виконанням код інструментується. Програмна дія повністю контролюється і управляється інструментом. Приклади: PIN, Valgrind.
Ін'єкція виконання: Легше, ніж інструментація виконання. Код змінюється в часі виконання, аби мати переходи до допоміжних функцій. Приклад: DynInst.
Гіпервайзер: Дані збираються виконанням (зазвичай) незміненої програми під управлінням гіпервайзера. Приклад: SIMMON.
Симулятор: Дані збираються виконанням під управлінням Симулятора Системи Команд. Приклади: SIMMON, SIMON і OLIVER.
Див. також
Література
- Krauss, Kirk J (2017). Performance Profiling with a Focus. Develop for Performance.
- What is code profiling? Learn the 3 Types of Code Profilers. Stackify Developer Tips, Tricks and Resources. Disqus. 2016.
Ця стаття потребує додаткових для поліпшення її . (лютий 2024) |
Цю статтю треба для відповідності Вікіпедії. (жовтень 2015) |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Profilyuvannya zbir ta analiz informaciyi pro vikonannya programi z metoyu optimizaciyi yiyi roboti zastosovuyetsya v procesi rozrobki programnogo zabezpechennya Profilyuvannya forma analizu dinamichnih pokaznikiv programi v protilezhnist statichnomu analizu kodu Zvichajna zadacha analizu produktivnosti viznachiti chastini programi yaki slid optimizuvati dlya pokrashennya vikoristannya pam yati abo pidvishennya shvidkosti Profilyuvannya vikonuyetsya za dopomogoyu specialnih programnih zasobiv sho nazivayutsya profajlerami Vikoristannya profajlerivInstrumenti programnogo analizu kritichno vazhlivi dlya rozuminnya povedinki programi Komp yuternim arhitektoram potribni taki instrumenti abi ociniti yak horoshi programi vikonuvatimutsya na novij arhitekturi Avtoram programnogo zabezpechennya takozh potribni instrumenti abi proanalizuvati yih programi i identifikuvati kritichni chastini kodu Avtori kompilyatoriv chasto vikoristovuyut taki instrumenti abi z yasuvati yak dobre vikonuyetsya yih planuvannya instrukcij abo algoritm peredbachennya sho vidgaluzhuyetsya Profajler instrument analizu produktivnosti yakij zbiraye dani dlya profilyuvannya osoblivo kilkist viklikiv i trivalist vikonannya funkcij Vihidnij rezultat potik zapisanih podij a trace abo statistichnij korotkij zvit sposterezhuvanih podij a profile Profajleri vikoristovuyut shiroku riznomanitnist metodiv abi zibrati dani u tomu chisli aparatni pererivannya aparatnu pidtrimku pastki operacijnoyi sistemi Vikoristannya profajleriv potribne v procesi planuvannya produktivnosti Oskilki pidsumovuvannya v profajli pov yazano z poziciyeyu vihidnogo kodu rozmir vihidnih danih linijno zalezhit vid rozmiru kodu programi ta mozhe zalezhati vid chasu yiyi vikonannya Dlya odnopotokovih program profajl nadaye dostatno informaciyi dlya optimizaciyi ale problemi produktivnosti v bagatopotokovih programah cherez ochikuvalni povidomlennya abo problemi sinhronizaciyi chasto zalezhat vid vzayemozv yazku chasu viniknennya podij tomu vimagayut rozshirenogo zapisu profajlu shob zrozumiti problemu IstoriyaInstrumenti analizu produktivnosti isnuvali na platformah IBM 360 i IBM 370 vid pochatku 1970 h rokiv Ci instrumenti zazvichaj vikoristovuvali pererivannya tajmera yaki zapisuvali PSW angl Program Status Word Slovo Stanu Procesora v viznacheni promizhki chasu abi viyaviti garyachi miscya u vikonuvanomu kodi V 1974 roci Imitatori Sistemi Komand nadali povnij zapis i inshi mozhlivosti kontrolyu produktivnosti Vikonuvanij profajlerom analiz programi na Unix datuyetsya yak minimum 1979 rokom koli dlya sistem Unix bulo rozrobleno osnovnij instrument prof yakij vivodiv spisok viklikiv kozhnoyi funkciyi i trivalist yiyi vikonannya U 1982 roci gprof rozshiriv profilyuvannya do povnogo analizu grafu vikliku U 1994 roci Amitab Srivastava i Alan Yustas z Digital Equipment Corporation vidali dokument sho opisuye ATOM ATOM platforma dlya peretvorennya programi na yiyi vlasnij profajler Tobto pid chas kompilyaciyi vona vstavlyaye v programu specialnij kod dlya zbirannya informaciyi pro podiyi v programi Cya tehnika sho zminyuye programu dlya analizu vidoma yak instrumentation Tipi profajleriv osnovanih na vivodiFlat profajler Flat profajleri obchislyuyut serednij chas vikliku funkcij i ne pererivayut vikliki zasnovani na callee abo konteksti Call Graph profajler Call Graph profajleri pokazuyut chasi vikliku i chastoti funkcij a takozh lancyugi viklikiv zasnovanih na callee Prote ne zberigayut kontekst Metodi zboru danihProfajleri zasnovani na podiyah Movi programuvannya perelicheni tut mayut profajleri zasnovani na podiyah NET Mozhe prikripiti profilyuvalnogo agenta yak server COM do CLR Podibno do Java chas vikonannya potim zabezpechuye rizni povtorni vikliki v agentovi dlya perehoplennya podij podibno do metodu JIT vvedennya vihid stvorennya ob yektiv i t p Osoblivo potuzhnij v comu agent profilyuvannya mozhe perepisati kod cilovoyi programi dovilnim sposobom Java JVM Tools Interface kolis JVM Profiling Interface JVM API zabezpechuye pastki do profajleru dlya zamanyuvannya v pastku podij takih yak viklikiv zavantazhennya klasu vivantazhennya vhid vihid potoku Python profilyuvannya Python vklyuchaye modul profilyuvannya hotshot yakij ye zasnovanim na call graph i vikoristovuyuchi Sys setprofile modul do podij pastok podibno do c call return exception python call return exception Ruby Ruby takozh vikoristovuye podibnij do Python interfejs dlya profilyuvannya Ye flat profajler v profile rb modul i ruby prof C rozshirennya Statistichni profajleri Deyaki profajleri operuyut zdijsnennyam vibirki Profajler sho zdijsnyuye vibirku doslidzhuye lichilnik komand cilovoyi programi z regulyarnimi promizhkami vikoristovuyuchi pererivannya operacijnoyi sistemi Profajleri sho zdijsnyuyut vibirku zazvichaj mensh tochni i specifichni ale dozvolyayut cilovij programi pracyuvati majzhe na povnu shvidkist Deyaki profajleri nadayut cilovij programi dodatkovi komandi zbirati neobhidnu informaciyu Ce mozhe prizvoditi do zmin u vikonanni programi viklikayuchi neakuratni rezultati i pomilki Ce mozhe buti duzhe specifichnim ale upovilnyuye cilovu programu oskilki bilshe specifichnoyi informaciyi zbirayetsya Rezultativni dani ne ostatochna istina a statistichna aproksimaciya Faktichna kilkist pomilok zazvichaj bilsha nizh odin vibranij period vibirki Faktichno yaksho znachennya n raziv periodu vibirki ochikuvana pomilka v nomu korin kvadratnij z vibranih periodiv Deyaki z najbilsh vikoristovuvanih statistichnih profajleriv ce GNU s Oprofile AMD s CodeAnalyst ta SGI s Pixie Instrumenti Instrukciya Robitsya programistom napriklad dodayuchi komandi abi yavno obchisliti chasi vikonannya Dopomizhnij kompilyator Priklad gcc pg dlya gprof quantify g dlya Quantify Binarna translyaciya instrument dodaye instrumentaciyu v skompilovanij binarnij fajl Priklad ATOM Instrumentaciya vikonannya Bezposeredno pered vikonannyam kod instrumentuyetsya Programna diya povnistyu kontrolyuyetsya i upravlyayetsya instrumentom Prikladi PIN Valgrind In yekciya vikonannya Legshe nizh instrumentaciya vikonannya Kod zminyuyetsya v chasi vikonannya abi mati perehodi do dopomizhnih funkcij Priklad DynInst Gipervajzer Dani zbirayutsya vikonannyam zazvichaj nezminenoyi programi pid upravlinnyam gipervajzera Priklad SIMMON Simulyator Dani zbirayutsya vikonannyam pid upravlinnyam Simulyatora Sistemi Komand Prikladi SIMMON SIMON i OLIVER Div takozhSIGPROF Profilyuvannya danihLiteraturaKrauss Kirk J 2017 Performance Profiling with a Focus Develop for Performance What is code profiling Learn the 3 Types of Code Profilers Stackify Developer Tips Tricks and Resources Disqus 2016 Cya stattya potrebuye dodatkovih posilan na dzherela dlya polipshennya yiyi perevirnosti Bud laska dopomozhit udoskonaliti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Zvernitsya na storinku obgovorennya za poyasnennyami ta dopomozhit vipraviti nedoliki Material bez dzherel mozhe buti piddano sumnivu ta vilucheno lyutij 2024 Cyu stattyu treba vikifikuvati dlya vidpovidnosti standartam yakosti Vikipediyi Bud laska dopomozhit dodavannyam dorechnih vnutrishnih posilan abo vdoskonalennyam rozmitki statti zhovten 2015