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


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

U danu žestoke konkurencije među tvrtkama, važno je da naučimo kako koristiti ono što imamo na najbolji mogući način. Gubitak hardverskih ili softverskih resursa, ili nedostatak sposobnosti da znamo kako ih učinkovitije koristiti, na kraju predstavlja gubitak koji si jednostavno ne možemo priuštiti ako želimo biti na vrhu svoje igre.

U isto vrijeme, moramo paziti da naše resurse ne dovedemo do granice gdje će kontinuirano korištenje donijeti nepopravljivu štetu.

U ovom članku ćemo vas upoznati s relativno novim alatom za analizu performansi i dati savjete koje možete koristiti za nadzor svojih Linux sustava, uključujući hardver i aplikacije. To će vam pomoći da osigurate da rade tako da ste sposobni proizvesti željene rezultate bez rasipanja resursa ili vlastite energije.

Predstavljamo i instaliramo Perf u Linux

Među ostalim, Linux nudi alat za nadgledanje i analizu performansi pod nazivom perf. Dakle, što razlikuje perf od drugih dobro poznatih alata s kojima ste već upoznati?

Odgovor je da perf omogućuje pristup Jedinici za nadzor performansi u CPU-u i tako nam omogućuje da izbliza pogledamo ponašanje hardvera i s njim povezane događaje.

Osim toga, također može pratiti softverske događaje i stvarati izvješća iz prikupljenih podataka.

Možete instalirati perf u distribucije temeljene na RPM-u s:

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

U Debianu i izvedenicama:

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

Ako uname -r u gornjoj naredbi vrati dodatne nizove 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 izvodi u gostu na vrhu VirtualBoxa ili VMWarea jer ne dopuštaju pristup hardverskim brojačima kao što to rade druge tehnologije virtualizacije (kao što su KVM ili XEN). .

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

echo 0 > /proc/sys/kernel/perf_event_paranoid

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

kernel.perf_event_paranoid = 0

Podnaredbe

Nakon što ste instalirali perf, možete pogledati njegovu man stranicu za popis dostupnih podnaredbi (podnaredbe možete zamisliti kao posebne opcije koje otvaraju određeni prozor u sustavu). Za najbolje i potpunije rezultate koristite perf kao root ili putem sudo.

Perf popis

perf list (bez opcija) vraća sve tipove simboličkih događaja (dugi popis). Ako želite vidjeti popis događaja dostupnih u određenoj kategoriji, upotrijebite popis perf iza kojeg slijedi naziv kategorije ([hw|sw|cache|tracepoint|pmu|event_glob ]), kao što su:

Prikaz popisa softverski unaprijed definiranih događaja u Linuxu:

perf list sw 

Perf stat

perf stat pokreće naredbu i prikuplja statistiku performansi Linuxa tijekom izvođenja takve naredbe. Što se događa u našem sustavu kada pokrenemo dd?

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

Gore prikazani statistički podaci pokazuju, između ostalog:

  1. Izvršenje naredbe dd trajalo je 21,812281 milisekundi CPU-a. Ako ovaj broj podijelimo s donjom vrijednošću "proteklog vremena u sekundama" (23,914596 milisekundi), dobiva se 0,912 (iskorišten CPU).
  2. Dok je naredba izvršena, 15 sklopki konteksta (također poznatih kao sklopke procesa) pokazuju da su procesori 15 puta prebačeni s jednog procesa (ili niti) na drugi.
  3. 2 Migracije CPU-a očekivani su rezultat kada se u CPU-u s 2 jezgre radno opterećenje ravnomjerno raspoređuje između broja jezgri.
    Tijekom tog vremena (21,812281 milisekundi), ukupan broj CPU ciklusa koji su potrošeni bio je 62,025,623, što podijeljeno s 0,021812281 sekundi daje 2,843GHz.
  4. Ako podijelimo broj ciklusa s ukupnim brojem instrukcija, dobivamo 4,9 ciklusa po instrukciji, što znači da je svakoj instrukciji trebalo gotovo 5 CPU ciklusa (u prosjeku). Za to možemo kriviti (barem djelomično) broj grananja i promašaja grananja (vidi dolje), koji na kraju troše ili pogrešno koriste CPU cikluse.
  5. Kako je naredba izvršena, naišlo se na ukupno 3.552.630 grana. Ovo je prikaz točaka odlučivanja i petlji u kodu na razini procesora. Što je više grana, to je niža izvedba. Kako bi se to kompenziralo, svi moderni CPU-i pokušavaju predvidjeti protok koda. 51,348 promašaja grana ukazuje da je značajka predviđanja bila pogrešna 1,45% vremena.

Isti princip vrijedi za prikupljanje statistike (ili drugim riječima, profiliranje) dok je aplikacija pokrenuta. Jednostavno pokrenite željenu aplikaciju i nakon razumnog vremenskog perioda (koji ovisi o vama) zatvorite je, a perf će prikazati statistiku na ekranu. Analizom te statistike možete prepoznati potencijalne probleme.

Vrhunska izvedba

perf top sličan je top naredbi, jer prikazuje profil sustava gotovo u stvarnom vremenu (također poznat kao analiza uživo).

S opcijom -a prikazat ćete sve poznate vrste događaja, dok će vam opcija -e omogućiti odabir određene kategorije događaja (kao što vraća popis performansi):

Prikazat će sve događaje ciklusa.

perf top -a 

Prikazat će sve događaje vezane uz takt procesora.

perf top -e cpu-clock 

Prvi stupac u gornjem izlazu predstavlja postotak uzoraka uzetih od početka izvođenja, grupiranih prema funkcijskom simbolu i zajedničkom objektu. Više opcija dostupno je u man perf-top.

Rekord performansi

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

Upišite perf record nakon čega slijedi naredba:

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

Izvješće o učinku

perf report formatira podatke prikupljene u perf.data iznad u izvješće o izvedbi:

sudo perf report

Sve gore navedene podnaredbe imaju namjensku stranicu priručnika koja se može pozvati kao:

man perf-subcommand

gdje je podnaredba ili popis, statistika, vrh, zapis ili izvješće. Ovo su najčešće korištene podnaredbe; drugi su navedeni u dokumentaciji (pogledajte odjeljak Sažetak za vezu).

Sažetak

U ovom smo vam vodiču predstavili perf, alat za praćenje i analizu performansi za Linux. Preporučujemo vam da se upoznate s njegovom dokumentacijom koja se čuva na https://perf.wiki.kernel.org.

Ako pronađete aplikacije koje troše visok postotak resursa, razmislite o modificiranju izvornog koda ili upotrijebite druge alternative.

Ako imate pitanja o ovom članku ili prijedloge za poboljšanje, svi mi slušamo. Slobodno nam se obratite putem donjeg obrasca za komentare.