Na ovoj stranici

Visualizator formata praćenja Chromea

Možete koristiti praćenje cijelog staka (full stack tracing) za praćenje od najviše razine QML-a ili JavaScripta pa sve do C++-a i do prostora kernela. To vam omogućuje mjerenje performansi aplikacije i provjeru je li aplikacija ograničena na CPU ili I/O, odnosno je li pod utjecajem drugih aplikacija koje se izvršavaju na istom sustavu. Praćenje pruža uvid u to što sustav radi i zašto se aplikacija ponaša na određeni način. Ono ukazuje na to kako se hardver koristi i što rade kernel i aplikacija.

Informacije o praćenju mogu vam reći više o podacima koji QML Profiler prikuplja. Na primjer, možete provjeriti zašto evaluacija trivijalnog vezanja traje toliko dugo. To može biti uzrokovano izvršavanjem C++ koda ili sporim disk I/O-om.

Nekoliko alata za praćenje (kao što je chrome://about) može generirati informacije o događajima praćenja Chromea u formatu Chrome Trace Format (CTF). CTF datoteke možete otvoriti u Qt Creator za pregled. To je posebno korisno pri pregledavanju datoteka praćenja većih od 100 MB, koje je teško pregledati pomoću ugrađenog preglednika zapisa praćenja (chrome://tracing) zbog njegove velike potrošnje memorije.

Visualizator podržava sve vrste događaja koje se koriste u podacima koje generira LTTng okvir za praćenje, a koji su pretvoreni u CTF. Međutim, neke od naprednijih vrsta događaja koje se koriste, na primjer, u tragovima sustava Android, nisu podržane. Visualizator tiho zanemaruje nepodržane vrste događaja.

Visualizator podržava sljedeće vrste događaja:

  • Početni, završni, trajni i trenutačni događaji
  • Događaji brojača (grafikoni)
  • Metapodatkovni događaji (naziv procesa i niti)

Otvaranje JSON datoteka

Za otvaranje JSON datoteka za pregled odaberite Analyze > Chrome Trace Format Viewer > Load JSON File.

Visualizacija događaja

Prikaz Timeline prikazuje grafički prikaz događaja sljedbe i sažeti prikaz svih zabilježenih događaja.

Prikaz vremenske crte

Svaka kategorija u vremenskoj crti opisuje nit u aplikaciji. Pomaknite pokazivač na događaj (5) u retku kako biste vidjeli njegovo trajanje i kategoriju događaja. Da biste prikazali informacije samo kada je događaj odabran, onemogućite gumb View Event Information on Mouseover (4).

Jump to Previous Event Jump to Next Event Okvir (10) sažima razdoblje tijekom kojeg su prikupljeni podaci. Povucite raspon zumiranja (8) ili kliknite na okvir kako biste se pomaknuli unutar njega. Za premještanje između događaja odaberite gumbe za pomicanje naprijed i natrag (1).

Odaberite gumb Show Zoom Slider (2) za otvaranje klizača koji možete koristiti za postavljanje razine zumiranja. Također možete povlačiti ručke za zumiranje (9). Za resetiranje zadane razine zumiranja desnom tipkom miša kliknite na vremensku crtu kako biste otvorili kontekstni izbornik i odaberite Reset Zoom.

Odaberite gumb Ograniči na teme (Restrict to Threads) (6) za odabir niti koje se prikazuju.

Odabir raspona događaja

Možete odabrati raspon događaja (7) kako biste vidjeli vrijeme koje predstavlja ili zumirali u određenu regiju zapisa. Odaberite gumb Select Range (3) za aktiviranje 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.

Raspone događaja možete koristiti 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. Polje " 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.

Pregled statistike

Pregled statistike

Prikaz Statistics prikazuje broj uzoraka u kojima se svaka funkcija na vremenskoj crti nalazila, ukupno i kada je bila na vrhu hrpe (nazvano 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.

Prikupljanje LTTng podataka

LTTng je alat za praćenje za Linux koji možete primijeniti na ugrađenim Linux sustavima kako biste saznali kako optimizirati vrijeme pokretanja aplikacije.

Qt ima skup kernel trace pointova i podsustav za praćenje za prilagođene trace pointove u korisničkom prostoru.

Konfiguriranje jezgre

Da biste koristili LTTng, morate postaviti sljedeće opcije konfiguracije za kernel prije njegove izgradnje:

  • CONFIG_HIGH_RES_TIMERS
  • CONFIG_KALLSYMS
  • CONFIG_MODULES
  • CONFIG_TRACEPOINTS

Preporučujemo da postavite sljedeće dodatne opcije:

  • CONFIG_EVENT_TRACING
  • CONFIG_HAVE_SYSCALL_TRACEPOINTS
  • CONFIG_KALLSYMS_ALL

U Yocto-u možete aktivirati gore navedene opcije u Menu > Config > Kernel Hacking > Tracers.

Instalacija LTTng-a

Nakon što izgradite kernel i postavite ga na svoj uređaj, morat ćete instalirati sljedeće LTTng pakete na svoj uređaj:

  • lttng-tools za kontrolu sesije praćenja
  • lttng-modules za kernel trace točke
  • lttng-ust za trace točke u korisničkom prostoru

U Yocto-u samo trebate omogućiti EXTRA_IMAGE_FEATURES += "tools profile".

Izrada Qt-a s točkama praćenja

Trace pointovi se kontinuirano dodaju Qt verzijama. Da biste ih koristili, morate sami izgraditi Qt s opcijom configure -trace lttng.

Snimanje događaja

Za stvaranje sesije pozivate naredbu lttng create. Zatim pozivate lttng enable-channel kernel -k kako biste omogućili kanal kernela. Unutar kanala kernela navodite odgovarajuće točke praćenja kao kernel_events i pozivate lttng enable-event kako biste ih omogućili. Na kraju pozivate lttng start kako biste započeli praćenje.

Pozivate lttng stop za zaustavljanje praćenja. Možete koristiti sleep za postavljanje trajanja sesije. Nakon zaustavljanja možete pozvati lttng destroy za uništavanje sesije.

Možete pisati i pokretati skripte koje sadrže gore navedene naredbe za pokretanje i zaustavljanje praćenja cijelog staka. Možete koristiti systemd za izvršavanje skripti.

Omogućavanje točaka praćenja

Podaci se bilježe prema točkama praćenja koje omogućite u LTTng sesiji. Obično je korisno omogućiti točke praćenja za prekidatelje rasporeditelja, syscall i Qt.

Trace pointovi za prekid rasporeditelja

Trace pointovi za promjenu rasporeditelja dostižu se kada se aplikacija izbaci zbog predemptije, na primjer, kada drugi proces dobije priliku za izvršavanje na CPU jezgri. Omogućite trace pointove za promjenu rasporeditelja kako biste zabilježili nit koja se trenutno izvršava i proces kojem pripada, kao i vrijeme kada je proces započeo i zaustavio se.

Trace pointovi syscalla

Trace pointovi syscalla pomažu vam razumjeti zašto se dogodio prekid rasporedivača. Sljedeći su primjeri syscalla koje možete pratiti:

  • openat i close povezuju opisivače datoteka s imenima datoteka
  • mmap mapira greške stranica na datoteke
  • read i write pokreću se I/O operacijama
  • nanosleep, futex i poll objašnjavaju promjene rasporedivača
  • ioctl kontrolira GPU i zaslon

Konverzija LTTng podataka u CTF

Alat ctf2ctf koristi babeltrace za analizu binarnog Common Trace Format (CTF) i pretvara ga u Chrome Trace Format (CTF). Izvršava sljedeće prilagođene zadatke kako bi snimka bila čitljivija za ljude:

  • Mapiranje opisatelja datoteka na nazive datoteka
  • Mapiranje grešaka stranica na nazive datoteka
  • Označavanje prekida i blok uređaja nazivima
  • Konvertirajte podatke iz UTF-16 QString formata u UTF-8 nizove
  • Broj stranica memorije dodijeljenih

Za generiranje JSON datoteka koje sadrže podatke o tragu u Chrome Trace formatu, unesite sljedeću naredbu u naredbeni redak:

ctf2ctf -o trace.json path/to/lttng trace/

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

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.