Hotspot ( eng. hotspot [1] ) - en sektion af kode i programmet , som tegner sig for de fleste af de eksekverbare instruktioner fra processoren [2] eller for hvis eksekvering processoren bruger meget tid [3] (nogle instruktioner udføres hurtigere, mens andre er langsommere) ). Hotspots kan være programflaskehalse, hvis de har en ekstra belastning på grund af kodeineffektivitet, i hvilket tilfælde de kan optimeres [3] .
Unødvendigt ressourcekrævende kodesektioner ( "flaskehalse" i programmet) kan være resultatet af valg af en langsommere algoritme til løsning af problemet, ikke fuldt gennemtænkt applikationsarkitektur , mikroprocessordriftsfunktioner , afventning af I/O- operationer osv.
Et eksempel på et ressourcekrævende stykke kode på grund af en fejl i applikationsarkitekturen er brugen af en spinlock i den første tråd for at få resultatet fra den anden tråd, som er i gang med beregninger, forudsat at den første tråd blev tildelt den højest mulige prioritet (brugerinteraktion), og den anden, den højest lave (baggrundsdatabehandling). Fordi spinlock er en uendelig polling-loop for værdien af variablen , og processens prioritet er høj, så vil planlæggeren allokere det meste af tiden til udførelse af den første proces, og den anden proces vil blive tildelt meget mindre processortid . Som følge heraf vil det meste af processortiden blive spildt. Løsningen på problemet i dette tilfælde ville være at bruge en blokerende semafor i stedet for en spinlock, eller ændre prioriteterne for trådene.
Identifikation og analyse af " hot spots " i programmet kan indikere retninger for dets yderligere optimering [2] .
Dyb analyse kan udføres separat for forskellige processorarkitekturer og kan omfatte analyse af belastningen på forskellige processorcache -niveauer , analyse af hukommelsesadgangsmønstre, undersøgelse af processorcyklusudnyttelsestælleren osv. [2]
For at identificere ressourcekrævende områder i programmet anvendes specielle programmer, kaldet profilere (profilere).
De mest berømte profiler i Unix-familien af operativsystemer er gprof og Callgrind . På Linux er OProfile og perf desuden tilgængelige . Mange avancerede IDE'er har indbyggede profiler, såsom Microsoft Visual Studio , NetBeans og så videre.
Der er to hovedprofileringsmetoder: gennem analyse af kodeeksekveringstid (Callgrind) og gennem processorydelsestællere (OProfile). Den første metode giver dig mulighed for at finde kode, der tager lang tid at udføre (for eksempel en langsigtet semaforlås). Den anden metode giver dig mulighed for at finde sektioner af kode, der belaster processoren mere end andre (for eksempel ressourcekrævende beregninger). Ved at bruge begge metoder kan du analysere sektioner af kode for at forstå årsagerne til, at de tager for lang tid at udføre. Hvis en funktion tager lang tid at udføre, men ifølge processorens ydeevnetællere næsten ikke indlæser processoren, kan den have en lang blokering eller et langt systemkald til operativsystemkernen.