Perf - veiktspējas uzraudzības un analīzes rīks Linux


Runājot par veiktspēju skaitļošanā, mēs atsaucamies uz attiecībām starp mūsu resursiem un uzdevumiem, kurus tie mums ļauj izpildīt noteiktā laika periodā.

Dienā, kad starp uzņēmumiem notiek sīva konkurence, ir svarīgi iemācīties izmantot to, kas mums ir, pēc iespējas labāk. Aparatūras vai programmatūras resursu izšķiešana vai spēja nezināt, kā tos efektīvāk izmantot, galu galā ir zaudējumi, kurus mēs vienkārši nevaram atļauties, ja vēlamies būt savas spēles augšgalā.

Tajā pašā laikā mums jābūt uzmanīgiem, lai nepieļautu savus resursus līdz robežai, kur ilgstoša izmantošana radīs neatgriezenisku kaitējumu.

Šajā rakstā mēs iepazīstināsim jūs ar salīdzinoši jaunu veiktspējas analīzes rīku un sniegsim padomus, kurus varat izmantot, lai uzraudzītu savas Linux sistēmas, ieskaitot aparatūru un lietojumprogrammas. Tas jums palīdzēs nodrošināt to darbību tā, lai jūs spētu sasniegt vēlamos rezultātus, netērējot resursus vai savu enerģiju.

Perf ieviešana un instalēšana Linux

Cita starpā Linux nodrošina veiktspējas uzraudzības un analīzes rīku, ko sauc par ērti perf. Tātad, kas atšķir perf no citiem labi zināmiem rīkiem, ar kuriem jūs jau esat pazīstams?

Atbilde ir tāda, ka perf nodrošina piekļuvi CPU veiktspējas uzraudzības vienībai un tādējādi ļauj mums cieši aplūkot aparatūras un ar to saistīto notikumu darbību.

Turklāt tas var arī uzraudzīt programmatūras notikumus un izveidot pārskatus no apkopotajiem datiem.

Jūs varat instalēt perf sadalījumos ar RPM ar:

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

Debian un atvasinājumos:

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

Ja uname -r augstāk esošajā komandā papildus faktiskajai versijai (manā gadījumā 3.2.0-23-generic) atgriež papildu virknes, iespējams, jums būs jāievada linux-tools-3.2.0-23 uname izejas izmantošanu.

Ir arī svarīgi atzīmēt, ka perf dod nepilnīgus rezultātus, ja tas tiek palaists viesī virs XEN) do.

Turklāt ņemiet vērā, ka dažas perf komandas pēc noklusējuma var būt ierobežotas ar root, ko var atspējot (līdz sistēma tiek restartēta), rīkojoties šādi:

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

Ja jums ir neatgriezeniski jāatspējo paranojas režīms, atjauniniet šo iestatījumu failā /etc/sysctl.conf.

kernel.perf_event_paranoid = 0

Kad esat instalējis perf, pieejamo apakškomandu sarakstu varat apskatīt tā manā lapā (varat domāt par apakškomandām kā īpašām opcijām, kas sistēmā atver konkrētu logu). Lai iegūtu labākus un pilnīgākus rezultātus, izmantojiet perf vai nu kā root, vai izmantojot sudo.

perf saraksts (bez opcijām) atgriež visus simboliskos notikumu veidus (garais saraksts). Ja vēlaties apskatīt konkrētā kategorijā pieejamo notikumu sarakstu, izmantojiet perf list, kam seko kategorijas nosaukums ([hw | sw | cache | tracepoint | pmu | event_glob]), piemēram:

Parādīt programmatūras iepriekš noteiktu notikumu sarakstu Linux:

# perf list sw 

perf stat izpilda komandu un apkopo Linux veiktspējas statistiku šādas komandas izpildes laikā. Kas notiek mūsu sistēmā, palaižot dd?

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

Iepriekš parādītie statistikas dati cita starpā norāda:

  1. Dd komandas izpilde prasīja 21,812281 milisekundes CPU. Ja mēs šo skaitli dalām ar zemāk esošo “sekundes laika pagātnes” vērtību (23,914596 milisekundes), tas dod 0,912 (izmantots CPU).
  2. Kamēr komanda tika izpildīta, 15 konteksta komutatori (pazīstami arī kā procesu slēdži) norāda, ka centrālie procesori tika pārslēgti 15 reizes no viena procesa (vai pavediena) uz citu.
  3. 2 CPU migrācijas ir sagaidāmais rezultāts, kad 2 kodolu CPU darba slodze tiek vienmērīgi sadalīta starp kodolu skaitu.
    Šajā laikā (21,812281 milisekundes) kopējais patērēto CPU ciklu skaits bija 62 025 623, kas dalīts ar 0,021812281 sekundēm dod 2,843 GHz.
  4. Ja dalām ciklu skaitu ar kopējo instrukciju skaitu, mēs saņemam 4,9 ciklus vienā instrukcijā, kas nozīmē, ka katras instrukcijas izpildei bija nepieciešami gandrīz 5 CPU cikli (vidēji). Mēs to varam (vismaz daļēji) vainot filiāļu un zaru trūkumu skaitā (skatīt zemāk), kas galu galā iznieko vai nepareizi izmanto CPU ciklus.
  5. Komandas izpildes laikā tika sastapti 3 552 630 filiāles. Tas ir koda lēmuma punktu un cilpu attēlojums CPU līmenī. Jo vairāk zaru, jo zemāka veiktspēja. Lai to kompensētu, visi mūsdienu procesori mēģina paredzēt koda plūsmu. 51 348 filiāles trūkumi norāda, ka prognozēšanas funkcija bija nepareiza 1,45% gadījumu.

Tas pats princips attiecas uz statistikas apkopošanu (vai citiem vārdiem sakot, profilēšanu), kamēr darbojas lietojumprogramma. Vienkārši palaidiet vajadzīgo lietojumprogrammu un pēc saprātīga laika (kas ir atkarīgs no jums) aizveriet to, un statistika ekrānā parādīs statistiku. Analizējot šo statistiku, jūs varat noteikt iespējamās problēmas.

perf top ir līdzīgs top komandai, jo tajā tiek parādīts gandrīz reāllaika sistēmas profils (pazīstams arī kā reālā analīze).

Izmantojot opciju -a , jūs parādīsit visus zināmos notikumu veidus, savukārt opcija -e ļaus jums izvēlēties noteiktu notikumu kategoriju (kā to atdeva perf saraksts). :

Parādīs visu ciklu notikumu.

perf top -a 

Parādīs visus ar procesoru saistītos notikumus.

perf top -e cpu-clock 

Augšējā izvades pirmā kolonna apzīmē to paraugu procentuālo daudzumu, kas ņemti kopš palaišanas sākuma, sagrupēti pēc funkcijas Simbols un Dalīts objekts. Citas iespējas ir pieejamas man perf-top.

perf record izpilda komandu un statistikas datus saglabā failā ar nosaukumu perf.data pašreizējā darba direktorijā. Tas darbojas līdzīgi kā perf stat.

Ierakstiet perf ierakstu, kam seko komanda:

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

perf report formatē datus, kas savākti perf.data iepriekš, veiktspējas pārskatā:

# sudo perf report

Visām iepriekš minētajām apakškomandām ir īpaša man lapa, kuru var izsaukt kā:

# man perf-subcommand

kur apakškomanda ir vai nu saraksts, stat, augšdaļa, ieraksts vai pārskats. Šīs ir visbiežāk izmantotās apakškomandas; citi ir uzskaitīti dokumentācijā (saiti skatiet sadaļā Kopsavilkums).

Kopsavilkums

Šajā rokasgrāmatā mēs esam iepazīstinājuši jūs ar perf - Linux veiktspējas uzraudzības un analīzes rīku. Mēs ļoti iesakām iepazīties ar tās dokumentāciju, kas tiek glabāta vietnē https://perf.wiki.kernel.org.

Ja atrodat lietojumprogrammas, kas patērē lielu daļu resursu, varat apsvērt iespēju mainīt avota kodu vai izmantot citas alternatīvas.

Ja jums ir jautājumi par šo rakstu vai ieteikumi, ko uzlabot, mēs visi esam ausis. Nekautrējieties sazināties ar mums, izmantojot zemāk esošo komentāru veidlapu.