Kapitel 3. Grundlæggende begreber

Indholdsfortegnelse

Datamodel til profildata
Omkostningentiteter
Begivenhedstyper
Graftilstand
Elementer i brugerfladen
Sidedokker
Grafområde
Områder i en fanebladsvisning
Synkroniseret graf via markeret entitet i en fanebladsvisning
Synkronisering mellem fanebladsvisninger
Udseende
Sidedokker
Flad profil
Partoverblik
Kaldstak
Grafer
Begivenhedstyper
Kaldlister
Kort
Kaldgraf
Kommentarer

Dette kapitel forklarer nogle koncepter i KCachegrind og introducerer udtryk brugt i grænsefladen.

Datamodel til profildata

Omkostningentiteter

Omkostningsoptælling af begivenhedstyper (som ikke-ramt L2) skyldes omkostningsentiteter i forbindelse med kildekode eller datastrukturer i et givet program. Omkostningsentiteter kan være ikke blot simpel kode eller datapositioner, men også positionstupler. F.eks. et kald har en kilde og et mål eller en dataadresse kan have en datatype og en kodeposition hvor allokeringen er foregået.

Omkostningsentiteterne KCachegrind kender til er givet i det følgende. Simple positioner:

  • Instruktion. En assemblerinstruktion ved en specificeret adresse.

  • Kildelinje i en funktioner. Alle instruktioner som oversætteren (via fejlsøgningsinformation) kortlægger til en given linje i kildekoden angivet ved kildefilnavn og linjenummer og som eksekveres i sammenhæng med en eller anden funktion. Sidstnævnte er nødvendig fordi en linje i en inlined funktion kan optræde i forbindelse med flere funktioner. Instruktioner uden kortlægning til en egentlig kildelinje, kortlægges til linje nummer 0 en en fil "???".

  • Funktion. Alle kildelinjer i en given funktion udgør funktionen selv. En funktion er angivet ved sit navn og placering i et binært objekt, hvis et sådant er til rådighed. Sidstnævnte behøves fordi binære objekter i et enkelt program, kan indeholde funktioner med det samme navn (disse kan tilgås f.eks. med dlopen/dlsym, kørselstidslinkeren bestemmer funktioner i en given søgerækkefølge i de benyttede binære objekter). Hvis et profileringsværktøj ikke kan detektere en funktions symbolnavn, f.eks. pga. manglende fejlsøgningsinformation, bruges typisk enten adressen af den første udførte instruktion eller "???".

  • Binært objekt. Alle funktioner hvis kode er indenfor et binært objekts rækkevidde. Enten den primære eksekverbare eller et delt bibliotek.

  • Kildefil. Alle funktioner hvis første instruktioner kan kortlægges til en linje i den givne kildefil.

  • Klasse. Funktioners symbolnavne er typisk ordnet hierakisk i navnerum. F.eks. C++ navnerum eller klasser i objektorienterede sprog. En klasse kan således indholde funktioner fra klassen eller indlejrede klasser.

  • Profilpart. I en vis tidssektion af en profilering, med en given tråd-ID, proces-ID og kommandoeksekveret.

Som det ses på listen, definerer én omkostningsentitet ofte en anden. Derfor er der et medregningshieraki af omkostningsentiteter, som burde være indlysende ud fra beskrivelsen herover.

Positionstupler:

  • Kald fra instruktionsadresse til målfunktion.

  • Kald fra kildelinje til målfunktion.

  • Kald fra kildefunktion til målfunktion.

  • (U)betinget spring fra kilde til målinstruktion.

  • (U)betingent spring fra kilde til mållinje.

Spring mellem funktioner er ikke tilladte eftersom det ikke giver nogen mening i en kaldgraf. Derfor skal kontruktioner som undtagelseshåndtering og lange hop, oversættes til at poppe på kaldstakken når behovet opstår.

Begivenhedstyper

Tilfældige begivenhedstyper kan angives i profildataen, ved at navngive dem. Deres omkostning relateret til omkostningsentitet er et 64 bit heltal.

Begivenhedstyper hvis omkostninger er angivet i profildatafilen, kaldes ægte begivenheder. Yderligere kan man angive formler for begivenhedstyper beregnet ud fra reelle begivenheder. De kaldes arvede begivenheder.