Analizator performansi
Analizirajte upotrebu CPU-a i memorije aplikacije na Linux desktop računalima i ugrađenim uređajima.
Za postavljanje globalnih postavki za Analizator performansi idite na Preferences > Analyzer > CPU Usage.
Da biste postavili preferencije za određenu konfiguraciju pokretanja, idite na Projects > Run Settings i odaberite Details pokraj Performance Analyzer Settings.

Za uređivanje postavki za trenutnu konfiguraciju pokretanja odaberite padajući izbornik pokraj
na alatnoj traci Performance Analyzera.

Odabir tipova događaja
Tablica događaja prikazuje događaje koji pokreću Performance Analyzer za uzimanje uzorka. Najčešći način analize iskorištenosti CPU-a uključuje periodično uzorkovanje, kojim upravljaju hardverski brojači performansi koji reagiraju na broj izvršenih instrukcija ili ciklusa CPU-a. Također možete odabrati softverski brojač koji koristi takt CPU-a.
Odaberite Add Event kako biste dodali događaje u tablicu. U Event Type odaberite opću vrstu događaja za uzorkovanje, najčešće hardware ili software. U Counter odaberite brojač za uzorkovanje. Na primjer, instructions u grupi hardware ili cpu-clock u grupi software.
Moguće je i specijaliziranije uzorkovanje, na primjer prema propustima ili pogodcima u predmemoriji. Međutim, podrška za to ovisi o specifičnim značajkama procesora. Za ta specijalizirana događanja dajte detaljnije upute za uzorkovanje u Operation i Result. Na primjer, odaberite događaj cache za L1-dcache na operaciji load s rezultatom misses kako biste uzorkovali propuste L1-dcache pri čitanju.
Odaberite Remove Event da biste uklonili odabrani događaj iz tablice.
Odaberite Use Trace Points kako biste zamijenili trenutni odabir događaja tragovima (trace points) definiranim na odredišnom uređaju i postavili Sample mode na event count, a Sample period na 1. Ako Create Trace Points definira tragove na odredištu, Performance Analyzer ih automatski koristi za profiliranje upotrebe memorije.
Odaberite Reset za vraćanje odabira događaja, kao i Sample mode i Sample period na zadane vrijednosti.
Odabir načina uzorkovanja i razdoblja
U Sample mode i Sample period navedite kako se uzorci pokreću:
- Uzimanje uzoraka pomoću event count nalaže kernelu da uzme uzorak svaki
nputa nakon što se dogodi jedan od odabranih događaja, pri čemu jenpostavljeno u Sample period. - Uzimanje uzoraka pomoću frequency (Hz) nalaže kernelu da pokuša uzeti uzorak
nputa u sekundi, automatski prilagođavajući razdoblje uzorkovanja. Postavitenu Sample period.
Visoke frekvencije ili mali broj događaja rezultiraju točnijim podacima, uz cijenu većeg opterećenja i većeg volumena generiranih podataka. Stvarno razdoblje uzorkovanja određuje Linux kernel na ciljnom uređaju, koji razdoblje postavljeno za Perf uzima samo kao savjet. Može postojati značajna razlika između razdoblja uzorkovanja koje zatražite i stvarnog rezultata.
Općenito, ako konfigurirate Analizator performansi da prikuplja više podataka nego što ih može prenijeti preko veze između ciljanog i host uređaja, aplikacija se može blokirati dok Perf pokušava poslati podatke, a kašnjenje u obradi može prekomjerno rasti. Tada biste trebali promijeniti vrijednost parametra Sample period ili Stack snapshot size.
Odabir načina grafa poziva
U načinu rada Call graph mode možete odrediti kako Performance Analyzer dohvaća lance poziva iz vaše aplikacije:
- Način rada Frame Pointer, odnosno
fp, oslanja se na dostupnost pokazivača okvira u profiliranoj aplikaciji i nalaže kernelu na ciljanom uređaju da prođe kroz lanac pokazivača okvira kako bi preuzeo lanac poziva za svaki uzorak. - Dwarf način rada radi i bez pokazivača okvira, ali generira znatno više podataka. Svaki put kada se uzorak aktivira, uzima snimku trenutnog stoga aplikacije i prenosi tu snimku na računalo domaćin radi analize.
- Last Branch Record način ne koristi memorijski spremnik. Automatski dešifrira posljednjih 16 uzetih grana svaki put kada se izvršavanje zaustavi. Podržan je samo na novijim Intelovim procesorima.
Qt i većina sistemskih biblioteka prema zadanim postavkama kompajliraju se bez pokazivača okvira, stoga je način rada s pokazivačima okvira koristan samo kod prilagođenih sustava.
Postavljanje veličine snimke stoga
Performance Analyzer analizira i razmotava snimke stoga koje je generirao Perf u modu dwarf. Postavite veličinu snimaka stoga u Stack snapshot size. Veliki snimci stoga rezultiraju većim obujmom podataka koji se prenose i obrađuju. Mali snimci stoga mogu ne uspjeti zabilježiti lance poziva visoko rekurzivnih aplikacija ili drugu intenzivnu upotrebu stoga.
Dodavanje opcija naredbenog retka za Perf
Postavite dodatne opcije naredbenog retka koje će se proslijediti Perf-u prilikom snimanja podataka u Additional arguments. Postavite --no-delay ili --no-buffering kako biste smanjili kašnjenje obrade. Međutim, te opcije nisu podržane u svim verzijama Perf-a i Perf se možda neće pokrenuti ako se navede nepodržana opcija.
Rješavanje imena za JIT-kompilirane JavaScript funkcije
perf.map Od verzije 5.6.0, Qt može generirati datoteke s informacijama o JavaScript funkcijama. Analizator performansi će ih pročitati i prikazati nazive funkcija u prikazima Timeline, Statistics i Flame Graph. Ovo radi samo ako se profilirani proces pokreće na računalu domaćinu, a ne na ciljnom uređaju. Da biste omogućili generiranje datoteka perf.map, dodajte varijablu okruženja QV4_PROFILE_WRITE_PERF_MAP u Run Environment i postavite njezinu vrijednost na 1.
Analiza prikupljenih podataka
Prikaz Timeline prikazuje grafički prikaz iskorištenosti CPU-a po niti i sažeti prikaz svih zabilježenih događaja.

Svaka kategorija u vremenskoj crti opisuje nit u aplikaciji. Pomaknite pokazivač na događaj (5) u retku da biste vidjeli koliko traje i koju funkciju u izvoru predstavlja. Da biste prikazali informacije samo kada je događaj odabran, isključite View Event Information on Mouseover (4).
Okvir (9) sažima razdoblje za koje su prikupljeni podaci. Povucite raspon zumiranja (7) ili odaberite okvir kako biste se pomaknuli unutar njega. Također se možete kretati između događaja odabirom gumba za pomicanje naprijed ( Jump to Previous Event ) i natrag ( Jump to Next Event ) (1).
Odaberite gumb Show Zoom Slider (2) za otvaranje klizača za postavljanje razine zumiranja. Također možete povući ručke za zumiranje (8). Za vraćanje zadane razine zumiranja, kliknite desnom tipkom miša na vremensku crtu kako biste otvorili kontekstualni izbornik i odaberite Reset Zoom.
Odabir raspona događaja
Odaberite raspon događaja (6) da biste vidjeli vrijeme koje predstavlja ili da biste zumirali u određeni dio zapisa. Odaberite Select Range (3) za aktivaciju alata za odabir. Zatim kliknite na vremenskoj crti kako biste odredili početak raspona događaja. Povucite ručku za odabir kako biste definirali kraj raspona.
Koristite raspone događaja i za mjerenje kašnjenja između dva uzastopna događaja. Postavite raspon između kraja prvog događaja i početka drugog događaja. Duration prikazuje kašnjenje između događaja u milisekundama.
Za zumiranje raspona događaja dvaput kliknite na njega.
Da biste uklonili raspon događaja, zatvorite dijalog Selection.
Razumijevanje podataka
Općenito, događaji u prikazu vremenske crte pokazuju koliko je dugo trajao poziv funkcije. Pređite mišem preko njih kako biste vidjeli detalje. Detalji uvijek uključuju adresu funkcije, približno trajanje poziva, ELF datoteku u kojoj se funkcija nalazi, broj uzoraka prikupljenih dok je ovaj poziv funkcije bio aktivan, ukupan broj puta kada se ova funkcija pojavila u niti i broj uzoraka u kojima se ova funkcija pojavila barem jednom.
Za funkcije za koje su dostupne informacije za otklanjanje pogrešaka, detalji uključuju lokaciju u izvornoj kodu i naziv funkcije. Možete odabrati takve događaje kako biste premjestili pokazivač u uređivaču koda na dio koda s kojim je događaj povezan.
Budući da alat Perf prikuplja samo periodične uzorke, Analizator performansi ne može odrediti točno vrijeme kada je funkcija pozvana ili kada se vratila. Međutim, možete vidjeti točno kada je uzorak uzet u drugom redu svake niti. Performance Analyzer pretpostavlja da ako se ista funkcija pojavljuje na istom mjestu u lancu poziva u više uzastopnih uzoraka, to predstavlja jedan poziv dotične funkcije. To je, naravno, pojednostavljenje. Također, između uzetih uzoraka mogu se pozivati i druge funkcije koje se ne pojavljuju u podacima profila. Međutim, statistički gledano, podaci će vjerojatno najistaknutije prikazati funkcije koje provode najviše vremena na CPU-u.
Ako se naiđe na funkciju bez informacija za otklanjanje pogrešaka, daljnje razmotavanje stoga može ne uspjeti. Razmotavanje će također neuspjeti za neke simbole implementirane u skupštinskom jeziku. Ako razmotavanje ne uspije, prikazuje se samo dio lanca poziva, a okolne funkcije mogu izgledati kao da su prekinute. To ne znači nužno da su bile stvarno prekinute tijekom izvođenja aplikacije, već samo da nisu pronađene na stackovima gdje je razmotavanje neuspjelo.
JavaScript funkcije iz QML pogona koje se izvršavaju u JIT načinu mogu se razmotati. Međutim, njihova će se imena prikazivati samo kada je postavljeno QV4_PROFILE_WRITE_PERF_MAP. Kompilirani JavaScript generiran od strane Qt Quick Compiler mogu se također razmotati. U tom se slučaju za JavaScript funkcije prikazuju C++ imena koja je generirao kompajler, umjesto njihovih JavaScript imena. Prilikom izvođenja u interpretiranom načinu, i stack okviri koji uključuju QML mogu se razmotati, pri čemu se prikazuje sam interpretator, a ne interpretirani JavaScript.
Kernel funkcije uključene u lance poziva prikazuju se u trećem redu svakog niti.
Obojavanje događaja predstavlja stvarnu brzinu uzorkovanja za određeni nit tijekom njegove trajnosti. Linux kernel će uzeti uzorak nita samo ako je nit aktivan. Istovremeno, kernel nastoji poštovati zatraženo razdoblje događaja. Stoga razlike u frekvenciji uzorkovanja između različitih niti ukazuju na to da je nit s više uzoraka vjerojatnije sveukupno usko grlo, dok je nit s manje uzoraka vjerojatno provela vrijeme čekajući na vanjske događaje kao što su I/O ili mutex.
Pregled statistike

Prikaz Statistics a prikazuje broj uzoraka u kojima se svaka funkcija nalazila na vremenskoj crti, ukupno i kada je bila na vrhu hrpe (naziva se self). To vam omogućuje da ispitate koje funkcije trebate optimizirati. Visok broj pojavljivanja može ukazivati na to da se funkcija nepotrebno pokreće ili da joj je potrebno jako dugo za izvršavanje.
Odaberite redak da biste se premjestili na odgovarajuću funkciju u izvornom kodu u uređivaču koda.
Ploče Callers i Callees prikazuju ovisnosti između funkcija. Omogućuju vam pregledavanje unutarnjih funkcija aplikacije. Ploča Callers sažima funkcije koje su pozvale odabranu funkciju u glavnom prikazu. Ploča Callees sažima funkcije pozvane iz odabrane funkcije u glavnom prikazu.
Odaberite redak da biste prešli na odgovarajuću funkciju u izvornoj kodu u uređivaču koda i odaberite je u glavnom prikazu.
Za kopiranje sadržaja jednog prikaza ili retka u međuspremnik odaberite Copy Table ili Copy Row u kontekstnom izborniku.
Visualizacija statistike kao flame grafova

Prikaz Flame Graph prikazuje sažetiji statistički pregled izvršenja. Horizontalne trake prikazuju aspekt uzoraka uzetih za određenu funkciju, u odnosu na isti aspekt svih uzoraka zajedno. Ugniježđivanje prikazuje koje su funkcije pozvale koje druge.
Gumb Visualize omogućuje odabir aspekta koji će se prikazati u Flame Graph u.
- Samples je zadana vizualizacija. Veličina vodoravnih traka predstavlja broj uzoraka zabilježenih za zadanu funkciju.
- U načinu rada Peak Usage, veličina horizontalnih traka predstavlja količinu memorije dodijeljene od strane odgovarajućih funkcija, u trenutku kada je korištenje memorije dodjele bilo na vrhuncu.
- U načinu rada Allocations, veličina horizontalnih traka predstavlja broj dodjela memorije pokrenutih od strane odgovarajućih funkcija.
- U načinu rada Releases, veličina vodoravnih traka predstavlja broj oslobađanja memorije pokrenutih od strane odgovarajućih funkcija.
Peak Usage, Allocations i Releases načini prikaza prikazat će podatke samo ako su snimljeni uzorci s točaka praćenja memorije.
Interakcija između prikaza
Kada odaberete stack frame u bilo kojem od prikaza Timeline, Flame Graph ili Statistics, informacije o njemu prikazuju se u preostala dva prikaza. Za pregled vremenskog raspona u prikazima Statistics i Flame Graph odaberite Analyze > Performance Analyzer Options > Limit to the Range Selected in Timeline. Za prikaz cijelog stack framea odaberite Show Full Range.
Učitavanje perf datoteka
Možete učitati bilo koju datoteku perf.data generiranu novijim verzijama alata Linux Perf i pregledati je u Qt Creator. Odaberite Analyze > Performance Analyzer Options > Load perf.data File za učitavanje datoteke.

Performance Analyzeru je potreban kontekst u kojem su podaci snimljeni kako bi pronašao debug simbole. Stoga morate navesti kit s kojim je aplikacija izgrađena i mapu u kojoj se nalazi izvršna datoteka aplikacije.
Datoteke s Perf podacima generiraju se pozivom perf record. Pobrinite se da se grafovi poziva generiraju tijekom snimanja podataka pokretanjem Perfa s opcijom --call-graph. Također provjerite jesu li potrebni simboli za otklanjanje pogrešaka dostupni Performance Analyzeru, bilo na standardnoj lokaciji (/usr/lib/debug ili uz binarne datoteke), ili kao dio Qt paketa koji koristite.
Performance Analyzer može čitati Perf datoteke s podacima generirane u frame pointer ili dwarf načinu. Međutim, za ispravno generiranje datoteka potrebno je ispuniti brojne pretpostavke. Svi sistemski obrazi za podržane ugrađene platforme ispravno su postavljeni za profiliranje u dwarf načinu rada. Za druge uređaje provjerite može li Perf ispravno pročitati vlastite podatke tako da provjerite izlaz naredbi perf report ili perf script za snimljene Perf datoteke.
Učitavanje i spremanje trace datoteka
Možete spremiti i učitati podatke traga u formatu specifičnom za Analizator performansi (.ptq). Ovaj je format samostalan, stoga za njegovo učitavanje nije potrebno navesti okruženje snimanja. Takve datoteke traga možete prenijeti na drugo računalo bez alata za izradu ili simbola za otklanjanje pogrešaka i tamo ih analizirati.
Za učitavanje tragova podataka idite na Analyze > Performance Analyzer Options > Load Trace File.
Za spremanje podataka o tragu odaberite Save Trace File.
Rješavanje problema
Analizator performansi možda neće uspjeti zabilježiti podatke iz sljedećih razloga:
- Perf događaji mogu biti globalno onemogućeni na vašem sustavu. Predkonfigurirani Boot to Qt slike dolaze s omogućenim Perf događajima. Za prilagođenu konfiguraciju morate osigurati da datoteka
/proc/sys/kernel/perf_event_paranoidsadrži vrijednost manju od2. Za maksimalnu fleksibilnost pri snimanju tragova možete postaviti vrijednost na-1. To omogućuje bilo kojem korisniku snimanje bilo koje vrste traga, čak i korištenjem sirovih kernel točaka za praćenje.Način omogućavanja Perf događaja ovisi o vašoj Linux distribuciji. Na nekim distribucijama možete pokrenuti sljedeću naredbu s root (ili ekvivalentnim) privilegijima:
echo -e "kernel.perf_event_paranoid=-1\nkernel.kptr_restrict=0" | sudo tee /etc/sysctl.d/10-perf.conf
- Veza između odredišnog uređaja i hosta možda nije dovoljno brza za prijenos podataka koje generira Perf. Pokušajte promijeniti vrijednosti postavki Stack snapshot size ili Sample period.
- Perf možda zauvijek pohranjuje podatke u međuspremnik, a da ih nikada ne pošalje. Dodajte
--no-delayili--no-bufferingu Additional arguments. - Neke verzije Perfa neće započeti snimanje ako im se ne odredi određena minimalna frekvencija uzorkovanja. Pokušajte postaviti Sample period na 1000.
- Na nekim uređajima, osobito na raznim pločama i.MX6, hardverski brojači performansi ne rade ispravno i Linux kernel može nakon nekog vremena nasumično prestati bilježiti podatke. Perf može koristiti različite vrste događaja za pokretanje uzoraka. Popis dostupnih vrsta događaja možete dobiti pokretanjem naredbe
perf listna uređaju, a zatim odabrati odgovarajuće vrste događaja u postavkama. Odabir vrste događaja utječe na performanse i stabilnost uzorkovanja. Događajcpu-clocksoftwaresigurna je, ali relativno spora opcija jer ne koristi hardverske brojače performansi, već pokreće uzorkovanje iz softvera. Nakon što uzorkovanje ne uspije, ponovno pokrenite uređaj. Kernel je možda onemogućio važne dijelove sustava brojača performansi. - Perf možda nije instaliran. Način njegove instalacije ovisi o vašoj Linux distribuciji. Na primjer, pokušajte s sljedećim naredbama:
- Na Ubuntu 22.04:
sudo apt install linux-tools-$(uname -r) - Na Debianu:
apt install linux-perf
- Na Ubuntu 22.04:
Prikaz General Messages prikazuje izlaz iz pomoćnog programa koji obrađuje podatke.
Prikaz Izlaz aplikacije prikazuje neke informacije čak i ako Analizator performansi prikazuje poruke o pogreškama.
Vidi također Kako: Analizirati, Analizatori, Analiziranje koda i Upravljanje kitovima.
Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.