Perf- Alat za praćenje i analizu performansi za Linux


Kada govorimo o performansama u računarstvu, mislimo na odnos između naših resursa i zadataka koje nam omogućavaju da izvršimo u određenom vremenskom periodu.

U danu žestoke konkurencije između kompanija, važno je da naučimo kako iskoristiti ono što imamo na najbolji mogući način. Rasipanje hardverskih ili softverskih resursa, ili nedostatak sposobnosti da se zna kako ih efikasnije koristiti, završava se gubitkom koji jednostavno ne možemo priuštiti ako želimo biti u vrhu naše igre.

U isto vrijeme, moramo biti oprezni da ne dovedemo naše resurse do granice gdje će kontinuirana upotreba donijeti nepopravljivu štetu.

U ovom članku ćemo vas upoznati s relativno novim alatom za analizu performansi i pružiti savjete koje možete koristiti za nadgledanje vaših Linux sistema, uključujući hardver i aplikacije. To će vam pomoći da osigurate da oni rade tako da ste u stanju proizvesti željene rezultate bez trošenja resursa ili vlastite energije.

Predstavljamo i instaliramo Perf u Linuxu

Između ostalog, Linux pruža alat za praćenje i analizu performansi koji se zove povoljno perf. Dakle, šta razlikuje perf od drugih dobro poznatih alata s kojima ste već upoznati?

Odgovor je da perf omogućava pristup jedinici za praćenje performansi u CPU-u i tako nam omogućava da izbliza pogledamo ponašanje hardvera i povezane događaje.

Osim toga, može također pratiti softverske događaje i kreirati izvještaje od podataka koji se prikupljaju.

Možete instalirati perf u RPM distribucijama sa:

yum update && yum install perf     [CentOS / RHEL / Fedora]
dnf update && dnf install perf     [Fedora 23+ releases]

U Debianu i derivatima:

sudo aptitude update && sudo aptitude install linux-tools-$(uname -r) linux-tools-generic

Ako uname -r u gornjoj naredbi vraća dodatne stringove osim stvarne verzije (3.2.0-23-generic u mom slučaju), možda ćete morati upisati linux-tools-3.2.0-23 umjesto korištenja izlaza uname.

Također je važno napomenuti da perf daje nepotpune rezultate kada se pokreće u gostu na VirtualBox-u ili VMWareu jer ne dozvoljavaju pristup hardverskim brojačima kao što to rade druge tehnologije virtuelizacije (kao što su KVM ili XEN). .

Osim toga, imajte na umu da neke perf komande mogu biti ograničene na root prema zadanim postavkama, što se može onemogućiti (sve dok se sistem ne pokrene) na sljedeći način:

echo 0 > /proc/sys/kernel/perf_event_paranoid

Ako trebate trajno onemogućiti paranoid način rada, ažurirajte sljedeću postavku u datoteci /etc/sysctl.conf.

kernel.perf_event_paranoid = 0

Podnaredbe

Nakon što instalirate perf, možete pogledati njegovu man stranicu za listu dostupnih podnaredbi (možete razmišljati o podnaredbama kao o posebnim opcijama koje otvaraju određeni prozor u sistemu). Za najbolje i potpunije rezultate, koristite perf ili kao root ili putem sudo.

Perf lista

perf lista (bez opcija) vraća sve tipove simboličkih događaja (duga lista). Ako želite da vidite listu događaja dostupnih u određenoj kategoriji, koristite perf listu praćenu nazivom kategorije ([hw|sw|cache|tracepoint|pmu|event_glob ]), kao što su:

Prikaži listu softverski unaprijed definiranih događaja u Linuxu:

perf list sw 

Perf stat

perf stat pokreće komandu i prikuplja statistiku Linux performansi tokom izvršavanja takve komande. Šta se dešava u našem sistemu kada pokrenemo dd?

perf stat dd if=/dev/zero of=test.iso bs=10M count=1

Gore prikazane statistike pokazuju, između ostalog:

  1. Izvršenje naredbe dd trajalo je 21,812281 milisekundi CPU-a. Ako ovaj broj podijelimo sa donjom vrijednošću “proteklo vrijeme u sekundama” (23,914596 milisekundi), dobije se 0,912 (iskorišćen CPU).
  2. Dok je naredba izvršena, 15 prekidača konteksta (također poznatih kao procesni prekidači) označavaju da su CPU-i prebačeni 15 puta iz jednog procesa (ili niti) u drugi.
  3. 2 Migracije CPU-a su očekivani rezultat kada se u 2-jezgrenom CPU-u radno opterećenje ravnomjerno raspoređuje između broja jezgara.
    Tokom tog vremena (21,812281 milisekundi), ukupan broj CPU ciklusa koji su potrošeni bio je 62,025,623, što podijeljeno sa 0,021812281 sekundi daje 2,843GHz.
  4. Ako podijelimo broj ciklusa sa ukupnim brojem instrukcija, dobićemo 4,9 ciklusa po instrukciji, što znači da je svakoj instrukciji bilo potrebno skoro 5 CPU ciklusa (u prosjeku). Za ovo (barem djelimično) možemo okriviti broj grananja i promašaja grananja (vidi dolje), koji na kraju troše ili zloupotrebljavaju CPU cikluse.
  5. Kako je komanda izvršena, naišlo se na ukupno 3,552,630 grananja. Ovo je prikaz tačaka odlučivanja i petlji na nivou CPU-a u kodu. Što je više grana, to su performanse niže. Da bi to kompenzirali, svi moderni procesori pokušavaju da predvide tok koda. 51,348 promašaja grananja ukazuje da je funkcija predviđanja bila pogrešna 1,45% vremena.

Isti princip se primjenjuje na prikupljanje statistike (ili drugim riječima, profiliranje) dok je aplikacija pokrenuta. Jednostavno pokrenite željenu aplikaciju i nakon razumnog vremenskog perioda (koje zavisi od vas) zatvorite je, a perf će prikazati statistiku na ekranu. Analizom te statistike možete identificirati potencijalne probleme.

Perf top

perf top je sličan top komandi, po tome što prikazuje sistemski profil u skoro realnom vremenu (također poznat kao analiza uživo).

Sa opcijom -a prikazat ćete sve poznate tipove događaja, dok će vam opcija -e omogućiti da odaberete određenu kategoriju događaja (kao što vraća lista perf):

Prikazaće sve događaje ciklusa.

perf top -a 

Prikazaće sve događaje vezane za rad procesora.

perf top -e cpu-clock 

Prva kolona u izlazu iznad predstavlja postotak uzoraka uzetih od početka pokretanja, grupiranih po funkciji Simbol i dijeljeni objekt. Više opcija je dostupno u man perf-top.

Perf record

perf record pokreće naredbu i sprema statističke podatke u datoteku pod nazivom perf.data unutar trenutnog radnog direktorija. Radi slično kao perf stat.

Upišite perf record nakon čega slijedi naredba:

perf record dd if=/dev/null of=test.iso bs=10M count=1

Perf report

perf izvještaj formatira podatke prikupljene u perf.data iznad u izvještaj o učinku:

sudo perf report

Sve gore navedene podnaredbe imaju namjensku man stranicu koja se može pozvati kao:

man perf-subcommand

gdje je podnaredba ili list, stat, top, record, ili izvještaj. Ovo su najčešće korišćene podnaredbe; ostali su navedeni u dokumentaciji (pogledajte odjeljak Sažetak za vezu).

Sažetak

U ovom vodiču smo vas upoznali sa perf, alatom za praćenje i analizu performansi za Linux. Preporučujemo vam da se upoznate sa njegovom dokumentacijom koja se održava na https://perf.wiki.kernel.org.

Ako pronađete aplikacije koje troše veliki postotak resursa, možete razmisliti o izmjeni izvornog koda ili upotrebi drugih alternativa.

Ako imate pitanja o ovom članku ili prijedloge za poboljšanje, svi smo za uši. Slobodno nas kontaktirajte koristeći formu za komentare ispod.