Perf - orodje za spremljanje in analizo učinkovitosti za Linux


Ko govorimo o uspešnosti računalništva, se sklicujemo na razmerje med našimi viri in nalogami, ki nam jih omogočajo v določenem časovnem obdobju.

V dnevu ostre konkurence med podjetji je pomembno, da se naučimo, kako uporabiti to, kar imamo, po svojih najboljših močeh. Zapravljanje virov strojne ali programske opreme ali pomanjkanje sposobnosti, da bi jih znali učinkoviteje uporabiti, se konča kot izguba, ki si je preprosto ne moremo privoščiti, če želimo biti na vrhu naše igre.

Hkrati moramo biti previdni, da ne bomo omejili svojih virov, ko bo trajna uporaba povzročila nepopravljivo škodo.

V tem članku vam bomo predstavili razmeroma novo orodje za analizo učinkovitosti in podali nasvete, s katerimi lahko nadzirate svoje sisteme Linux, vključno s strojno opremo in aplikacijami. To vam bo pomagalo zagotoviti, da delujejo tako, da boste sposobni doseči želene rezultate brez zapravljanja virov ali lastne energije.

Predstavljamo in nameščamo Perf v Linux

Linux med drugim ponuja orodje za spremljanje in analizo delovanja, imenovano priročno perf. Kaj torej razlikuje perf od drugih dobro znanih orodij, s katerimi ste že seznanjeni?

Odgovor je, da perf omogoča dostop do enote za spremljanje zmogljivosti v CPU in nam tako omogoča natančen pogled na vedenje strojne opreme in z njo povezane dogodke.

Poleg tega lahko spremlja tudi dogodke v programski opremi in ustvarja poročila iz zbranih podatkov.

Perf lahko namestite v distribucije na osnovi RPM z:

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

V Debianu in izpeljankah:

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

Če uname -r v zgornjem ukazu vrne dodatne nize poleg dejanske različice (v mojem primeru 3.2.0-23-generična), boste morda morali namesto tega vtipkati linux-tools-3.2.0-23 uporabe izhoda uname.

Pomembno je tudi omeniti, da perf prinaša nepopolne rezultate, ko ga gostite na vrhu XEN).

Poleg tega ne pozabite, da so nekateri ukazi perf lahko privzeto omejeni na root, kar lahko onemogočite (dokler se sistem ne zažene znova) tako:

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

Če morate trajno onemogočiti paranoični način, posodobite naslednjo nastavitev v datoteki /etc/sysctl.conf.

kernel.perf_event_paranoid = 0

Ko ste namestili perf, lahko na njegovi priročniki najdete seznam razpoložljivih podkomand (podkande lahko predstavljate kot posebne možnosti, ki odprejo določeno okno v sistem). Za najboljše in popolnejše rezultate uporabite perf bodisi kot koren ali prek sudo.

perf list (brez možnosti) vrne vse simbolične vrste dogodkov (dolg seznam). Če si želite ogledati seznam dogodkov, ki so na voljo v določeni kategoriji, uporabite seznam perf, ki mu sledi ime kategorije ([hw | sw | cache | tracepoint | pmu | event_glob]), na primer:

Prikaz seznama vnaprej določenih dogodkov v Linuxu:

# perf list sw 

perf stat zažene ukaz in med izvajanjem takega ukaza zbira statistične podatke o delovanju Linuxa. Kaj se zgodi v našem sistemu, ko zaženemo dd?

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

Zgornja statistika med drugim kaže na:

  1. Izvedba ukaza dd je trajala 21,812281 milisekund CPU. Če to številko delimo na vrednost\"pretečeni čas sekund" spodaj (23,914596 milisekund), dobimo 0,912 (izkoriščen CPU).
  2. Med izvajanjem ukaza 15 kontekstnih stikal (znanih tudi kot stikala procesov) kaže, da so bili CPU 15-krat preklopljeni iz enega procesa (ali niti) v drugega.
  3. 2 selitvi CPU je pričakovani rezultat, ko je v dvojedrnem CPU delovna obremenitev enakomerno porazdeljena med število jeder.
    V tem času (21,812281 milisekund) je bilo skupno število porabljenih procesorskih ciklov 62,025,623, kar deljeno z 0,021812281 sekund daje 2,843 GHz.
  4. Če število ciklov razdelimo na skupno število navodil, dobimo 4,9 ciklov na navodilo, kar pomeni, da je vsako navodilo (v povprečju) opravilo skoraj 5 ciklov procesorja. To lahko (vsaj delno) krivimo za število podružnic in napake podružnic (glej spodaj), ki na koncu zapravijo ali zlorabljajo cikle procesorja.
  5. Ko je bil ukaz izveden, je bilo skupno odkritih 3.552.630 podružnic. To je predstavitev odločitvenih točk in zank v kodi na ravni CPU. Več vej, nižja je zmogljivost. Da bi to kompenzirali, vsi sodobni CPU poskušajo predvideti pretok, ki ga bo uporabila koda. 51.348 zgrešenih vej kaže, da je bila funkcija napovedovanja napačna v 1,45% primerov.

Isto načelo velja za zbiranje statističnih podatkov (ali z drugimi besedami, profiliranje) med izvajanjem aplikacije. Preprosto zaženite želeno aplikacijo in jo po razumnem časovnem obdobju (ki je odvisno od vas) zaprite in perf bo statistiko prikazal na zaslonu. Z analizo te statistike lahko prepoznate morebitne težave.

perf top je podoben ukazu top, saj prikazuje skoraj sistemski profil v realnem času (znan tudi kot analiza v živo).

Z možnostjo -a boste prikazali vse znane vrste dogodkov, možnost -e pa vam bo omogočila, da izberete določeno kategorijo dogodka (kot jo vrne seznam perf) :

Prikaže dogodek vseh ciklov.

perf top -a 

Prikazali bodo vse dogodke, povezane s CPU-uro.

perf top -e cpu-clock 

Prvi stolpec v zgornjem izhodnem podatku predstavlja odstotek vzorcev, odvzetih od začetka izvajanja, razvrščenih po funkcijah Simbol in Skupni objekt. Na voljo je več možnosti v man perf-top.

Zapis perf zažene ukaz in shrani statistične podatke v datoteko z imenom perf.data znotraj trenutnega delovnega imenika. Deluje podobno kot perf stat.

Vnesite zapis perf, ki mu sledi ukaz:

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

Poročilo perf formatira podatke, zbrane v zgornjih podatkih perf.data, v poročilo o uspešnosti:

# sudo perf report

Vsi zgornji podkomandi imajo namensko stran z informacijami, ki jo lahko prikličete kot:

# man perf-subcommand

pri čemer je podkomanda seznam, statistika, vrh, zapis ali poročilo. To so najpogosteje uporabljene podkomande; drugi so navedeni v dokumentaciji (za povezavo glejte razdelek Povzetek).

Povzetek

V tem priročniku smo vam predstavili perf, orodje za spremljanje in analizo učinkovitosti za Linux. Priporočamo vam, da se seznanite z njeno dokumentacijo, ki je na voljo na https://perf.wiki.kernel.org.

Če najdete aplikacije, ki porabljajo velik odstotek virov, lahko spremenite izvorno kodo ali uporabite druge možnosti.

Če imate vprašanja o tem članku ali predloge za izboljšanje, smo vsi poslušalci. Do nas lahko pridete s pomočjo spodnjega obrazca za komentar.