Perf - toimivuse jälgimise ja analüüsi tööriist Linuxile


Kui räägime jõudlusest arvutustöös, siis viidame meie ressursside ja ülesannete suhetele, mida need võimaldavad meil teatud ajaperioodil täita.

Ettevõtetevahelise ägeda konkurentsi päeval on oluline, et me õpiksime seda, mis meil on, selle parimal viisil kasutada. Riist- või tarkvararessursside raiskamine või oskuste puudumine osata neid tõhusamalt kasutada on lõpuks kaotus, mida me lihtsalt ei saa endale lubada, kui tahame olla oma mängu tipus.

Samal ajal peame olema ettevaatlikud, et mitte viia oma ressursse piirini, kus püsiv kasutamine tooks korvamatut kahju.

Selles artiklis tutvustame teile suhteliselt uut jõudlusanalüüsi tööriista ja anname näpunäiteid, mida saate kasutada oma Linuxi süsteemide, sealhulgas riistvara ja rakenduste jälgimiseks. See aitab teil tagada nende toimimise nii, et saaksite saavutada soovitud tulemusi ressursse ega oma energiat raiskamata.

Perf'i tutvustamine ja installimine Linuxis

Muuhulgas pakub Linux jõudluse jälgimise ja analüüsimise tööriista, mida nimetatakse mugavalt perf. Mis siis eristab perfi teistest tuntud tööriistadest, millega olete juba tuttav?

Vastus on, et perf pakub juurdepääsu protsessori jõudluse jälgimise üksusele ja võimaldab seega meil riistvara käitumist ja sellega seotud sündmusi lähemalt vaadata.

Lisaks saab see jälgida ka tarkvarasündmusi ja luua kogutud andmetest aruandeid.

RPM-põhistes jaotustes saate perf installida järgmiselt:

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

Debianis ja derivaatides:

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

Kui ülaltoodud käsk uname -r tagastab lisaks tegelikule versioonile täiendavad stringid (minu puhul 3.2.0-23-generic), peate võib-olla selle asemel tippima linux-tools-3.2.0-23 uname väljundi kasutamisest.

Samuti on oluline märkida, et perf annab mittetäielikke tulemusi, kui ta jookseb külalisena XENi peal.

Lisaks pidage meeles, et mõned perf-käsud võivad vaikimisi olla piiratud rootiga, mille saab keelata (kuni süsteem taaskäivitatakse), tehes järgmist:

# echo 0 > /proc/sys/kernel/perf_event_paranoid

Kui peate paranoiarežiimi jäädavalt keelama, värskendage failis /etc/sysctl.conf järgmist sätet.

kernel.perf_event_paranoid = 0

Kui olete perf-i installinud, leiate selle käsulehelt saadaolevate alamkäsude loendi (võite mõelda alamkäsudele kui spetsiaalsetele suvanditele, mis avavad süsteemi konkreetse akna). Parimate ja terviklike tulemuste saamiseks kasutage perf kas root või sudo kaudu.

perf list (ilma valikuteta) tagastab kõik sümboolsed sündmustüübid (pikk loend). Kui soovite vaadata kindlas kategoorias saadaolevate sündmuste loendit, kasutage perf listi, millele järgneb kategooria nimi ([hw | sw | cache | tracepoint | pmu | event_glob]), näiteks:

Kuva tarkvara Linuxis eelnevalt määratletud sündmuste loend:

# perf list sw 

perf stat käivitab käsu ja kogub Linuxi jõudlusstatistikat sellise käsu täitmise ajal. Mis juhtub meie süsteemis, kui käivitame dd?

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

Ülaltoodud statistika näitab muu hulgas:

  1. Dd-käsu täitmiseks kulus protsessoril 21,812281 millisekundit. Kui jagame selle numbri\"sekundite möödunud aja» väärtusega (23.914596 millisekundit), annab see 0,912 (kasutatud protsessorit).
  2. Käsu käivitamise ajal näitavad 15 kontekstilülitit (tuntud ka kui protsessorilülitid), et protsessoreid vahetati 15 korda ühelt protsessilt (või lõimelt) teisele.
  3. 2 protsessori migreerimist on oodatud tulemus, kui kahetuumalises protsessoris jaotub töökoormus tuumade arvu vahel ühtlaselt.
    Selle aja jooksul (21,812281 millisekundit) oli tarbitud protsessorite tsüklite koguarv 62 025 623, mis jagati 0,021812281 sekundiga, andes 2,843 GHz.
  4. Kui jagame tsüklite arvu käskude koguarvuga, saame 4,9 tsüklit juhendi kohta, mis tähendab, et iga käsu täitmiseks kulus keskmiselt 5 protsessori tsüklit (keskmiselt). Me võime selles süüdistada (vähemalt osaliselt) harude ja hargnemiste arvu (vt allpool), mis lõppkokkuvõttes raiskavad või väärkasutavad protsessori tsükleid.
  5. Käsu täitmisel tekkis kokku 3 552 630 haru. See on koodis otsustuspunktide ja silmuste kuvamine protsessori tasemel. Mida rohkem harusid, seda madalam on jõudlus. Selle kompenseerimiseks üritavad kõik kaasaegsed protsessorid prognoosida voogu, mille kood võtab. 51 348 hargnevust näitab, et ennustusfunktsioon oli vale 1,45% ajast.

Sama põhimõte kehtib statistika kogumise (või teisisõnu profileerimise) kohta, kui rakendus töötab. Käivitage lihtsalt soovitud rakendus ja sulgege see mõistliku aja pärast (mis on teie otsustada) ning perf kuvab statistikat ekraanil. Neid statistilisi andmeid analüüsides saate tuvastada võimalikud probleemid.

perf top sarnaneb tippkäskudega, kuna sellel on peaaegu reaalajas süsteemiprofiil (tuntud ka kui live-analüüs).

Valikuga -a kuvatakse kõik teadaolevad sündmustüübid, samas kui suvand -e võimaldab teil valida konkreetse sündmuse kategooria (nagu tagastab perf list) :

Kuvab kõigi tsüklite sündmuse.

perf top -a 

Kuvab kõik protsessoriga seotud sündmused.

perf top -e cpu-clock 

Ülaltoodud väljundi esimene veerg tähistab proovide protsenti, mis on võetud pärast jooksu algust, rühmitatuna funktsiooni Sümbol ja Jagatud objekt järgi. Rohkem valikuid on saadaval man perf-top'is.

perf record käivitab käsu ja salvestab statistilised andmed faili nimega perf.data praeguses töökataloogis. See töötab sarnaselt perf stat'iga.

Sisestage perf-kirje, millele järgneb käsk:

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

perf aruanne vormindab ülal perf.andmetes kogutud andmed toimivusaruandeks:

# sudo perf report

Kõigil ülaltoodud alamkäsudel on spetsiaalne käsuleht, mida saab kasutada järgmiselt:

# man perf-subcommand

kus alamkäsu on kas loend, stat, ülemine, kirje või aruanne. Need on kõige sagedamini kasutatavad alamkäsud; teised on loetletud dokumentatsioonis (lingi leiate jaotisest Kokkuvõte).

Kokkuvõte

Selles juhendis tutvustasime teile Linuxi jõudluse jälgimise ja analüüsimise tööriista perf. Soovitame teil tungivalt tutvuda selle dokumentatsiooniga, mida peetakse aadressil https://perf.wiki.kernel.org.

Kui leiate rakendusi, mis kulutavad suurt hulka ressursse, võite kaaluda lähtekoodi muutmist või kasutada muid alternatiive.

Kui teil on selle artikli kohta küsimusi või soovitusi selle parandamiseks, oleme kõik kõrvad. Võtke meiega ühendust, kasutades allolevat kommentaarivormi.