Hotspot ( ing. hotspot [1] ) - o secțiune de cod din program , care reprezintă majoritatea instrucțiunilor executabile ale procesorului [2] sau pentru a cărei execuție procesorul petrece mult timp [3] (unele instrucțiunile sunt executate mai rapid, în timp ce altele sunt mai lente) ). Hotspot-urile pot fi blocaje de program dacă au o încărcare suplimentară din cauza ineficienței codului, caz în care pot fi optimizate [3] .
Secțiunile de cod care consumă inutil resurse ( „gâturile de sticlă” ale programului) pot fi rezultatul alegerii unui algoritm mai lent pentru rezolvarea problemei, al arhitecturii aplicației neconcepute pe deplin, al funcțiilor de operare a microprocesorului , al așteptării operațiunilor I/O etc.
Un exemplu de cod care consumă mult resurse din cauza unei erori în arhitectura aplicației este utilizarea unui spinlock în primul fir pentru a obține rezultatul celui de-al doilea fir, care este angajat în calcule, cu condiția ca primul fir să fie atribuit. cea mai mare prioritate posibilă (interacțiunea cu utilizatorul), iar a doua, cea mai mare prioritate (calcul în fundal). pentru că spinlock este o buclă de sondare infinită pentru valoarea variabilei , iar prioritatea procesului este mare, atunci planificatorul va aloca cea mai mare parte a timpului pentru execuția primului proces, iar celui de-al doilea proces i se va aloca mult mai puțin timp procesor. . Ca urmare, cea mai mare parte a timpului procesorului va fi pierdut. Soluția problemei în acest caz ar fi să folosiți un semafor de blocare în loc de un spinlock sau să schimbați prioritățile firelor.
Identificarea și analiza „ punctelor fierbinți ” ale programului poate indica direcții pentru optimizarea ulterioară a acestuia [2] .
Analiza profundă poate fi efectuată separat pentru diferite arhitecturi de procesor și poate include analiza încărcării pe diferite niveluri de cache a procesorului , analiza modelelor de acces la memorie, studierea contorului de utilizare a ciclului procesorului etc. [2]
Pentru a identifica zonele intensive de resurse din program, sunt utilizate programe speciale, numite profileri (profileri).
Cei mai faimoși profileri din familia de sisteme de operare Unix sunt gprof și Callgrind . Pe Linux , OProfile și perf sunt disponibile suplimentar . Multe IDE -uri avansate au profileri încorporați, cum ar fi Microsoft Visual Studio , NetBeans și așa mai departe.
Există două metode principale de profilare: prin analiza timpului de execuție a codului (Callgrind) și prin contoare de performanță a procesorului (OProfile). Prima metodă vă permite să găsiți cod care durează mult timp pentru a se executa (de exemplu, o blocare pe termen lung a semaforului). A doua metodă vă permite să găsiți secțiuni de cod care încarcă procesorul mai mult decât altele (de exemplu, calcule care necesită mult resurse). Folosind ambele metode, puteți analiza secțiuni de cod pentru a înțelege motivele pentru care durează prea mult să fie executate. Dacă o funcție durează mult timp pentru a se executa, dar conform contoarelor de performanță a procesorului, aproape că nu încarcă procesorul, poate avea un bloc lung sau un apel lung de sistem la nucleul sistemului de operare.