Perf - Suorituskyvyn seuranta- ja analyysityökalu Linuxille


Kun puhumme suorituskyvystä tietojenkäsittelyssä, tarkoitamme resurssien ja niiden tehtävien välistä suhdetta, jonka voimme suorittaa tietyssä ajassa.

Yritysten välisenä ankaran kilpailun päivänä on tärkeää, että opimme käyttämään sitä mitä meillä on parhaalla mahdollisella tavalla. Laitteisto- tai ohjelmistoresurssien tuhlaus tai kyvyttömyys osata käyttää niitä tehokkaammin johtaa tappioon, johon meillä ei vain ole varaa, jos haluamme olla pelimme huipulla.

Samalla meidän on oltava varovaisia, ettemme vie resurssejamme rajoihin, joissa jatkuva käyttö aiheuttaa korjaamatonta vahinkoa.

Tässä artikkelissa esittelemme sinulle suhteellisen uuden suorituskyvyn analysointityökalun ja annamme vinkkejä, joiden avulla voit seurata Linux-järjestelmiäsi, mukaan lukien laitteistot ja sovellukset. Tämä auttaa sinua varmistamaan, että ne toimivat niin, että pystyt tuottamaan halutut tulokset tuhlaamatta resursseja tai omaa energiaasi.

Perfin esittely ja asennus Linuxissa

Linux tarjoaa muun muassa suorituskyvyn seuranta- ja analysointityökalun, jota kutsutaan kätevästi perf. Mikä sitten erottaa perfin muista tutuista työkaluista, jotka ovat jo tuttuja?

Vastaus on, että perf tarjoaa pääsyn suorittimen suorituskyvyn valvontayksikköön ja antaa siten meille mahdollisuuden tarkastella tarkasti laitteiston toimintaa ja siihen liittyviä tapahtumia.

Lisäksi se voi myös seurata ohjelmistotapahtumia ja luoda raportteja kerätyistä tiedoista.

Voit asentaa perf-ohjelman RPM-pohjaisiin jakeluihin seuraavilla tavoilla:

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

Debianissa ja johdannaisissa:

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

Jos uname -r yllä olevassa komennossa palauttaa ylimääräisiä merkkijonoja todellisen version lisäksi (3.2.0-23-generic minun tapauksessani), saatat joutua kirjoittamaan linux-tools-3.2.0-23 sen sijaan, että käyttäisit uname-tulostetta.

On myös tärkeää huomata, että perf tuottaa epätäydellisiä tuloksia, kun se suoritetaan vierailijana VirtualBoxin tai VMWaren päällä, koska ne eivät salli pääsyä laitteistolaskureihin, kuten muut virtualisointitekniikat (kuten KVM tai XEN) tekevät. .

Muista lisäksi, että jotkin perf-komennot voidaan oletusarvoisesti rajoittaa pääkäyttäjään, joka voidaan poistaa käytöstä (kunnes järjestelmä käynnistetään uudelleen) seuraavasti:

echo 0 > /proc/sys/kernel/perf_event_paranoid

Jos sinun on poistettava paranoidinen-tila käytöstä pysyvästi, päivitä seuraava asetus /etc/sysctl.conf-tiedostossa.

kernel.perf_event_paranoid = 0

Alikomennot

Kun olet asentanut perf-sovelluksen, voit katsoa sen man-sivulta luettelon käytettävissä olevista alikomennoista (voit ajatella alikomentoja erikoisvaihtoehtoina, jotka avaavat tietyn ikkunan järjestelmään). Saat parhaat ja täydelliset tulokset käyttämällä perfiä joko root- tai sudon kautta.

Perf lista

perf lista (ilman valintoja) palauttaa kaikki symboliset tapahtumatyypit (pitkä lista). Jos haluat tarkastella tietyn luokan tapahtumien luetteloa, käytä perf-luetteloa ja luokan nimeä ([hw|sw|cache|tracepoint|pmu|event_glob ]), kuten:

Näytä luettelo ohjelmiston ennalta määritetyistä tapahtumista Linuxissa:

perf list sw 

Perf stat

perf stat suorittaa komennon ja kerää Linuxin suorituskykytilastoja komennon suorittamisen aikana. Mitä järjestelmässämme tapahtuu, kun suoritamme dd?

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

Yllä näkyvät tilastot kertovat muun muassa:

  1. dd-komennon suorittaminen kesti 21,812281 millisekuntia CPU:ta. Jos jaamme tämän luvun alla olevalla "kuluneen ajan sekuntia" -arvolla (23,914596 millisekuntia), tuloksena on 0,912 (käytettävissä oleva suoritin).
  2. Kun komentoa suoritettiin, 15 kontekstikytkintä (tunnetaan myös nimellä prosessikytkimet) osoittavat, että suorittimet vaihdettiin 15 kertaa prosessista (tai säikeestä) toiseen.
  3. 2 suorittimen siirtoa on odotettu tulos, kun 2-ytimisessä suorittimessa työkuorma jakautuu tasaisesti ytimien lukumäärän kesken.
    Tänä aikana (21,812281 millisekuntia) kulutettujen suorittimen jaksojen kokonaismäärä oli 62 025 623, mikä jaettuna 0,021812281 sekunnilla antaa 2,843 GHz.
  4. Jos jaamme jaksojen määrän käskyjen kokonaismäärällä, saamme 4,9 sykliä käskyä kohden, mikä tarkoittaa, että jokaisen käskyn suorittaminen kesti lähes 5 CPU-sykliä (keskimäärin). Voimme syyttää tästä (ainakin osittain) haarojen ja haarautumien lukumäärästä (katso alla), jotka päätyvät CPU-syklien tuhlaamiseen tai väärinkäyttöön.
  5. Kun komento suoritettiin, yhteensä 3 552 630 haaraa havaittiin. Tämä on CPU-tason esitys koodin päätöspisteistä ja silmukoista. Mitä enemmän oksia, sitä pienempi suorituskyky. Tämän kompensoimiseksi kaikki nykyaikaiset prosessorit yrittävät ennustaa koodin kulun. 51 348 haarautumista osoittavat, että ennusteominaisuus oli väärä 1,45 % ajasta.

Sama periaate koskee tilastojen keräämistä (tai toisin sanoen profilointia) sovelluksen ollessa käynnissä. Käynnistä vain haluamasi sovellus ja sulje se kohtuullisen ajan kuluttua (mikä riippuu sinusta), ja perf näyttää tilastot näytöllä. Analysoimalla näitä tilastoja voit tunnistaa mahdolliset ongelmat.

Täydellinen toppi

perf top on samanlainen kuin top-komento, sillä se näyttää lähes reaaliaikaisen järjestelmäprofiilin (tunnetaan myös nimellä live-analyysi).

-a-valinnan avulla näet kaikki tunnetut tapahtumatyypit, kun taas -e-vaihtoehdolla voit valita tietyn tapahtumaluokan (jonka palauttaa täydellinen luettelo):

Näyttää kaikkien syklien tapahtumat.

perf top -a 

Näyttää kaikki suoritinkelloon liittyvät tapahtumat.

perf top -e cpu-clock 

Yllä olevan tulosteen ensimmäinen sarake edustaa ajon alusta otettujen näytteiden prosenttiosuutta ryhmiteltynä funktion Symbolin ja Shared Objectin mukaan. Lisää vaihtoehtoja on saatavilla man perf-topissa.

Täydellinen ennätys

perf-tietue suorittaa komennon ja tallentaa tilastotiedot tiedostoon nimeltä perf.data nykyisessä työhakemistossa. Se toimii samalla tavalla kuin perf stat.

Kirjoita perf record ja sen jälkeen komento:

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

Täydellinen raportti

Perf-raportti muotoilee yllä olevaan perf.data-tiedostoon kerätyt tiedot tehokkuusraportiksi:

sudo perf report

Kaikilla yllä olevilla alikomennoilla on oma man-sivu, jota voidaan kutsua seuraavasti:

man perf-subcommand

jossa alikomento on joko luettelo, tilasto, ylä, tietue tai >raportti. Nämä ovat yleisimmin käytettyjä alikomentoja; muut on lueteltu dokumentaatiossa (katso linkki Yhteenveto-osiosta).

Yhteenveto

Tässä oppaassa esittelemme sinulle perfin, suorituskyvyn seuranta- ja analysointityökalun Linuxille. Suosittelemme sinua tutustumaan sen dokumentaatioon, jota ylläpidetään osoitteessa https://perf.wiki.kernel.org.

Jos löydät sovelluksia, jotka kuluttavat paljon resursseja, voit harkita lähdekoodin muokkaamista tai käyttää muita vaihtoehtoja.

Jos sinulla on kysyttävää tästä artikkelista tai parannusehdotuksia, olemme kaikki kuuliaisia. Ota meihin rohkeasti yhteyttä alla olevan kommenttilomakkeen avulla.