Na ovoj stranici

Analizator performansi

Analizirajte korištenje CPU-a i memorije aplikacije na Linux desktopu i ugrađenim uređajima.

Za postavljanje globalnih postavki za Analizator performansi idite na Postavke > Analyzer > CPU Usage.

Projects Da biste postavili postavke za određenu konfiguraciju pokretanja, idite na Analizator performansi > Run Settings i odaberite Details pokraj Performance Analyzer Settings.

Postavke analizatora performansi

Za uređivanje postavki za trenutnu konfiguraciju pokretanja odaberite padajući izbornik pokraj Omogući/onemogući prikupljanje podataka profila na alatnoj traci Performance Analyzera.

Alatna traka Analizatora performansi

Odabir vrsta događaja

Tablica događaja prikazuje događaje koji pokreću Performance Analyzer da uzme uzorak. Najčešći način analize iskoristivosti 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 praćenja definiranima na odredišnom uređaju i postavili Sample mode na event count, a Sample period na 1. Ako Create Trace Points definira tragove praćenja 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 n puta nakon što se dogodi jedan od odabranih događaja, pri čemu je n postavljeno u Sample period.
  • Uzimanje uzoraka s intervalom od frequency (Hz) nalaže kernelu da pokuša uzeti uzorak n puta u sekundi, automatski prilagođavajući interval uzorkovanja. Postavite n u 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 ciljnog 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 niz 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 dekodira 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 generirane od strane Perf-a u dwarf načinu rada. 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 perf.map Od verzije 5.6.0, Qt može generirati datoteke za profiliranje s informacijama o JavaScript funkcijama. Alat Performance Analyzer ć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 za profiliranje, 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žet prikaz svih zabilježenih događaja.

Vremenska crta prikaza Analizatora performansi

Svaka kategorija u vremenskoj crti opisuje nit u aplikaciji. Pomaknite pokazivač na događaj (5) u retku kako 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).

Jump to Previous Event Jump to Next Event Okvir (9) sažima razdoblje tijekom kojeg su prikupljani 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 i natrag (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 desnom tipkom miša kliknite 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 trajalo pozivanje funkcije. Pređite mišem preko njih da 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 ova funkcija bila aktivna, 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 izvornom 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 retku svakog 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 ne uspjeti 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 zaista prekinute tijekom izvođenja aplikacije, već samo da nisu pronađene na stogovima na kojima 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 koji generira Qt Quick Compiler također mogu biti razmotane. U tom slučaju za JavaScript funkcije prikazuju se C++ imena koja je generirao kompajler, umjesto njihovih JavaScript imena. Prilikom izvođenja u interpretiranom načinu, i stack okviri koji uključuju QML također se mogu 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 thread kojem pripadaju, tijekom njihovog trajanja. Linux kernel će uzeti uzorak niti samo ako je nit aktivna. Istovremeno, kernel pokušava 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 uzetih uzoraka vjerojatnije sveukupno usko grlo, a nit s manje uzetih uzoraka vjerojatno je provela vrijeme čekajući na vanjske događaje kao što su I/O ili mutex.

Pregled statistike

Pregled statistike Analizatora performansi

Prikaz Statistics a prikazuje broj uzoraka u kojima se svaka funkcija nalazila na vremenskoj crti, ukupno i kada je bila na vrhu stoga ( self). To vam omogućuje da ispitate koje funkcije trebate optimizirati. Veliki 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 kako biste prešli 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 internih 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 Graphova

Prikaz grafika plamena u Analizatoru performansi

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 vodoravnih 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 koje su pokrenule odgovarajuće funkcije.
  • U načinu rada Releases, veličina vodoravnih traka predstavlja broj oslobađanja memorije pokrenutih od strane odgovarajućih funkcija.

Modi Peak Usage, Allocations i Releases 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 koje datoteke perf.data generirane novijim verzijama alata Linux Perf i pregledati ih u Qt Creator. Odaberite Analyze > Performance Analyzer Options > Load perf.data File za učitavanje datoteke.

Učitaj Perf Trace dijalog

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 podacima Perf generiraju se pozivanjem 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 rada. Međutim, za ispravno generiranje datoteka potrebno je ispuniti brojne pretpostavke. Sve sistemske slike za podržane ugrađene platforme ispravno su postavljene 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 naredbe perf report ili perf script za snimljene Perf datoteke s podacima.

Učitavanje i spremanje datoteka zapisa

Možete spremiti i učitati podatke o tragu 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 o tragu 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 snimiti 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_paranoid sadrži vrijednost manju od 2. 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 predugo pohranjuje podatke u međuspremnik i nikada ih ne šalje. Dodajte --no-delay ili --no-buffering u 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 nasumično prestati bilježiti podatke nakon nekog vremena. Perf može koristiti različite vrste događaja za pokretanje uzoraka. Popis dostupnih vrsta događaja možete dobiti pokretanjem naredbe perf list na uređaju, a zatim odaberite odgovarajuće vrste događaja u postavkama. Izbor vrste događaja utječe na performanse i stabilnost uzorkovanja. Događaj cpu-clock software sigurna je, ali relativno spora opcija jer ne koristi hardverske brojače performansi, već uzorkovanje pokreće iz softvera. Nakon što uzorkovanje ne uspije, ponovno pokrenite uređaj. Kernel je možda onemogućio važne dijelove sustava brojača performansi.
  • Možda Perf nije instaliran. Način instalacije ovisi o vašoj Linux distribuciji. Na primjer, pokušajte sljedeće naredbe:
    • Na Ubuntu 22.04: sudo apt install linux-tools-$(uname -r)
    • Na Debianu: apt install linux-perf

Prikaz General Messages prikazuje izlaz iz pomoćnog programa koji obrađuje podatke.

Prikaz Izlazak aplikacije prikazuje neke informacije čak i ako Analizator performansi prikazuje poruke o pogreškama.

Vidi također Kako: Analizirati, Analizatori, Analiziranje koda i Skupovi.

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.