Perf – našumo stebėjimo ir analizės įrankis, skirtas Linux


Kai kalbame apie našumą kompiuterijoje, mes kalbame apie ryšį tarp mūsų išteklių ir užduočių, kurias jie leidžia atlikti per tam tikrą laikotarpį.

Aršios įmonių konkurencijos dieną svarbu išmokti kuo geriau panaudoti tai, ką turime. Techninės ir programinės įrangos išteklių švaistymas arba nesugebėjimas žinoti, kaip juos naudoti efektyviau, baigiasi nuostoliais, kurių tiesiog negalime sau leisti, jei norime būti savo žaidimo viršūnėje.

Tuo pat metu turime būti atsargūs, kad neišnaudotume savo išteklių iki tokios ribos, kai ilgalaikis naudojimas atneš nepataisomos žalos.

Šiame straipsnyje supažindinsime su palyginti nauju našumo analizės įrankiu ir pateiksime patarimų, kuriuos galite naudoti norėdami stebėti savo Linux sistemas, įskaitant aparatinę įrangą ir programas. Tai padės užtikrinti, kad jie veiktų taip, kad galėtumėte pasiekti norimų rezultatų neeikvodami išteklių ar savo energijos.

„Perf“ pristatymas ir įdiegimas „Linux“.

Be kita ko, „Linux“ teikia našumo stebėjimo ir analizės įrankį, vadinamą patogiai perf. Taigi, kuo perf skiriasi nuo kitų gerai žinomų įrankių, su kuriais jau esate susipažinę?

Atsakymas yra tas, kad perf suteikia prieigą prie našumo stebėjimo bloko procesoriaus viduje ir leidžia mums atidžiai stebėti aparatinės įrangos veikimą ir su ja susijusius įvykius.

Be to, ji taip pat gali stebėti programinės įrangos įvykius ir kurti ataskaitas iš surinktų duomenų.

Galite įdiegti perf PTP pagrįstuose platinimuose su:

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

Debiane ir išvestinėse versijose:

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

Jei anksčiau pateiktoje komandoje uname -r pateikia papildomų eilučių, be tikrosios versijos (mano atveju 3.2.0-23-generic), gali tekti įvesti linux-tools-3.2.0-23, o ne naudoti uname išvestį.

Taip pat svarbu pažymėti, kad perf duoda neišsamių rezultatų, kai paleidžiama svečio režimu „VirtualBox“ arba „VMWare“, nes jie neleidžia pasiekti aparatinės įrangos skaitiklių, kaip tai daro kitos virtualizacijos technologijos (pvz., KVM arba XEN). .

Be to, atminkite, kad kai kurios perf komandos pagal numatytuosius nustatymus gali būti apribotos root, kurias galima išjungti (kol sistema nebus paleista iš naujo) atlikus šiuos veiksmus:

echo 0 > /proc/sys/kernel/perf_event_paranoid

Jei reikia visam laikui išjungti paranojinį režimą, atnaujinkite toliau nurodytą nustatymą faile /etc/sysctl.conf.

kernel.perf_event_paranoid = 0

Subkomandos

Įdiegę perf, galite peržiūrėti galimų antrinių komandų sąrašą jo puslapyje (apie komandas galite galvoti kaip apie specialias parinktis, atveriančias konkretų sistemos langą). Norėdami gauti geriausių ir išsamesnių rezultatų, naudokite perf kaip root arba naudodami sudo.

Perf sąrašas

perf sąrašas (be parinkčių) pateikia visus simbolinius įvykių tipus (ilgasis sąrašas). Jei norite peržiūrėti konkrečios kategorijos įvykių sąrašą, naudokite perf sąrašą ir kategorijos pavadinimą ([hw|sw|cache|tracepoint|pmu|event_glob ]), toks kaip:

Rodyti programinės įrangos iš anksto nustatytų įvykių sąrašą „Linux“:

perf list sw 

Puikus stat

perf stat vykdo komandą ir renka „Linux“ našumo statistiką vykdydama tokią komandą. Kas nutinka mūsų sistemoje, kai paleidžiame dd?

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

Aukščiau pateikta statistika, be kita ko, rodo:

  1. Komandos dd vykdymas užtruko 21,812281 milisekundės procesoriaus. Jei šį skaičių padalinsime iš toliau nurodytos „praėjusio laiko sekundžių“ reikšmės (23,914596 milisekundės), gausime 0,912 (naudojamas centrinis procesorius).
  2. Kol komanda buvo vykdoma, 15 konteksto jungiklių (taip pat žinomų kaip proceso jungikliai) rodo, kad CPU 15 kartų buvo perjungti iš vieno proceso (arba gijos) į kitą.
  3. 2 CPU perkėlimas yra laukiamas rezultatas, kai 2 branduolių CPU darbo krūvis paskirstomas tolygiai tarp branduolių skaičiaus.
    Per tą laiką (21,812281 milisekundės) bendras sunaudotų procesoriaus ciklų skaičius buvo 62 025 623, padalijus iš 0,021812281 sekundės, gaunama 2,843 GHz.
  4. Jei ciklų skaičių padalinsime iš bendro instrukcijų skaičiaus, gautume 4,9 ciklų vienai instrukcijai, o tai reiškia, kad kiekvienai komandai atlikti prireikė beveik 5 procesoriaus ciklų (vidutiniškai). Dėl to (bent jau iš dalies) galime kaltinti šakų ir atšakų skaičių (žr. toliau), dėl kurių procesoriaus ciklai švaistomi arba netinkamai naudojami.
  5. Vykdant komandą, iš viso aptikta 3 552 630 šakų. Tai yra procesoriaus lygio sprendimo taškų ir kilpų atvaizdavimas kode. Kuo daugiau šakų, tuo mažesnis našumas. Norėdami tai kompensuoti, visi šiuolaikiniai procesoriai bando numatyti kodo srautą. 51 348 išsišakojimas rodo, kad numatymo funkcija buvo klaidinga 1,45 % atvejų.

Tas pats principas taikomas statistikos rinkimui (arba, kitaip tariant, profiliavimui), kai programa veikia. Tiesiog paleiskite norimą programą ir po pagrįsto laiko (tai priklauso nuo jūsų) uždarykite ją ir perf ekrane parodys statistiką. Analizuodami šią statistiką galite nustatyti galimas problemas.

Puikus viršus

perf top yra panaši į komandą top, nes joje rodomas beveik realiojo laiko sistemos profilis (taip pat žinomas kaip tiesioginė analizė).

Naudodami parinktį -a parodysite visus žinomus įvykių tipus, o parinktis -e leis pasirinkti konkrečią įvykio kategoriją (pateikta tobulas sąrašas):

Bus rodomas visų ciklų įvykis.

perf top -a 

Bus rodomi visi su procesoriaus laikrodžiu susiję įvykiai.

perf top -e cpu-clock 

Pirmajame išvesties stulpelyje pateikiamas mėginių, paimtų nuo paleidimo pradžios, procentas, sugrupuotas pagal funkciją Simbolis ir Bendrinamas objektas. Daugiau parinkčių yra man perf-top.

Puikus rekordas

Įrašas perf paleidžia komandą ir išsaugo statistinius duomenis į failą pavadinimu perf.data dabartiniame darbo kataloge. Jis veikia panašiai kaip perf stat.

Įveskite perf record ir komandą:

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

Puikus reportažas

Perf report formatuoja anksčiau esančiame perf.data surinktus duomenis į našumo ataskaitą:

sudo perf report

Visos aukščiau pateiktos antrinės komandos turi skirtą man puslapį, kurį galima iškviesti kaip:

man perf-subcommand

kur pakomanda yra sąrašas, statistika, viršus, įrašas arba >ataskaita. Tai dažniausiai naudojamos subkomandos; kiti išvardyti dokumentacijoje (nuorodą rasite skyrelyje Santrauka).

Santrauka

Šiame vadove supažindinome su perf – našumo stebėjimo ir analizės įrankiu, skirtu „Linux“. Labai rekomenduojame susipažinti su jos dokumentacija, kuri yra adresu https://perf.wiki.kernel.org.

Jei randate programų, kurios sunaudoja daug išteklių, galite apsvarstyti galimybę pakeisti šaltinio kodą arba naudoti kitas alternatyvas.

Jei turite klausimų apie šį straipsnį ar pasiūlymų, kaip patobulinti, mes visi klausiame. Nedvejodami susisiekite su mumis naudodami toliau pateiktą komentarų formą.