Perf- Un instrument de monitorizare și analiză a performanței pentru Linux


Când vorbim de performanță în calcul, ne referim la relația dintre resursele noastre și sarcinile pe care acestea ne permit să le îndeplinim într-o anumită perioadă de timp.

Într-o zi de concurență acerbă între companii, este important să învățăm cum să folosim ceea ce avem la capacitate maximă. Risipirea resurselor hardware sau software, sau lipsa capacității de a ști cum să le folosim mai eficient, ajunge să fie o pierdere pe care pur și simplu nu ne putem permite dacă vrem să fim în vârful jocului nostru.

În același timp, trebuie să avem grijă să nu ne ducem resursele la o limită în care utilizarea susținută va produce daune ireparabile.

În acest articol vă vom prezenta un instrument de analiză a performanței relativ nou și vă vom oferi sfaturi pe care le puteți utiliza pentru a vă monitoriza sistemele Linux, inclusiv hardware și aplicații. Acest lucru vă va ajuta să vă asigurați că funcționează astfel încât să fiți capabil să produceți rezultatele dorite fără a irosi resurse sau propria energie.

Prezentarea și instalarea Perf în Linux

Printre altele, Linux oferă un instrument de monitorizare și analiză a performanței numit convenabil perf. Deci, ce diferențiază performanța de alte instrumente binecunoscute cu care sunteți deja familiarizat?

Răspunsul este că perf oferă acces la unitatea de monitorizare a performanței din CPU și, astfel, ne permite să vedem îndeaproape comportamentul hardware-ului și evenimentele asociate acestuia.

În plus, poate monitoriza și evenimentele software și poate crea rapoarte din datele colectate.

Puteți instala perf în distribuțiile bazate pe RPM cu:

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

În Debian și derivate:

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

Dacă uname -r din comanda de mai sus returnează șiruri suplimentare în afară de versiunea reală (3.2.0-23-generic în cazul meu), poate fi necesar să tastați linux-tools-3.2.0-23 în loc să folosească rezultatul uname.

De asemenea, este important să rețineți că performanța dă rezultate incomplete atunci când rulează într-un oaspete peste XEN).

În plus, rețineți că unele comenzi perf pot fi limitate la root în mod implicit, care pot fi dezactivate (până când sistemul este repornit) făcând:

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

Dacă trebuie să dezactivați definitiv modul paranoic, actualizați următoarea setare în fișierul /etc/sysctl.conf.

kernel.perf_event_paranoid = 0

Subcomenzi

După ce ați instalat perf, puteți consulta pagina sa de manual pentru o listă de subcomenzi disponibile (vă puteți gândi la subcomenzi ca opțiuni speciale care deschid o anumită fereastră în sistem). Pentru rezultate mai bune și mai complete, utilizați perf fie ca rădăcină, fie prin sudo.

Lista de performanțe

lista perf (fără opțiuni) returnează toate tipurile de evenimente simbolice (listă lungă). Dacă doriți să vizualizați lista de evenimente disponibile într-o anumită categorie, utilizați lista perf urmată de numele categoriei ([hw|sw|cache|tracepoint|pmu|event_glob ]), ca:

Afișează lista de evenimente software predefinite în Linux:

# perf list sw 

Perf stat

perf stat rulează o comandă și colectează statistici de performanță Linux în timpul executării unei astfel de comenzi. Ce se întâmplă în sistemul nostru când rulăm dd?

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

Statisticile prezentate mai sus indică, printre altele:

  1. Execuția comenzii dd a durat 21,812281 milisecunde de CPU. Dacă împărțim acest număr la valoarea „secunde-timp scurs” de mai jos (23,914596 milisecunde), se obține 0,912 (CPU utilizat).
  2. În timp ce comanda a fost executată, 15 comutatoare de context (cunoscute și ca comutatoare de proces) indică faptul că procesoarele au fost comutate de 15 ori de la un proces (sau fir) la altul.
  3. 2 migrări CPU este rezultatul așteptat atunci când într-un CPU cu 2 nuclee volumul de lucru este distribuit uniform între numărul de nuclee.
    În acest timp (21,812281 milisecunde), numărul total de cicluri CPU care au fost consumate a fost de 62.025.623, care împărțit la 0,021812281 secunde dă 2,843GHz.
  4. Dacă împărțim numărul de cicluri la numărul total de instrucțiuni, obținem 4,9 cicluri per instrucțiune, ceea ce înseamnă că fiecare instrucțiune a durat aproape 5 cicluri CPU pentru a fi finalizată (în medie). Putem învinovăți acest lucru (cel puțin parțial) pe numărul de ramuri și rateuri de ramuri (vezi mai jos), care ajung să irosească sau să folosească greșit ciclurile CPU.
  5. Pe măsură ce comanda a fost executată, au fost întâlnite în total 3.552.630 ramuri. Aceasta este reprezentarea la nivel de CPU a punctelor de decizie și a buclelor din cod. Cu cât sunt mai multe ramuri, cu atât performanța este mai mică. Pentru a compensa acest lucru, toate procesoarele moderne încearcă să prezică fluxul pe care îl va lua codul. 51.348 rateuri de ramuri indică faptul că funcția de predicție a fost greșită 1,45% din timp.

Același principiu se aplică strângerii statisticilor (sau, cu alte cuvinte, profilării) în timp ce o aplicație rulează. Pur și simplu lansați aplicația dorită și după o perioadă rezonabilă de timp (care depinde de dvs.) închideți-o, iar perf va afișa statisticile pe ecran. Analizând acele statistici, puteți identifica potențiale probleme.

Perf top

perf top este similar cu comanda de top, prin faptul că afișează un profil de sistem aproape în timp real (cunoscut și ca analiză live).

Cu opțiunea -a veți afișa toate tipurile de evenimente cunoscute, în timp ce opțiunea -e vă va permite să alegeți o anumită categorie de eveniment (așa cum este returnată de lista de perfecțiuni):

Va afișa toate evenimentele ciclurilor.

perf top -a 

Va afișa toate evenimentele legate de ceasul CPU.

perf top -e cpu-clock 

Prima coloană din rezultatul de mai sus reprezintă procentul de probe prelevate de la începutul rulării, grupate după funcția Simbol și Obiect Partajat. Mai multe opțiuni sunt disponibile în man perf-top.

Record de performanță

perf record rulează o comandă și salvează datele statistice într-un fișier numit perf.data în directorul de lucru curent. Funcționează în mod similar cu statistica de performanță.

Tastați perf record urmat de o comandă:

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

Raport de performanță

raportul de performanță formatează datele culese în perf.data de mai sus într-un raport de performanță:

# sudo perf report

Toate subcomenzile de mai sus au o pagină de manual dedicată care poate fi invocată ca:

# man perf-subcommand

unde subcomandă este fie listă, stat, sus, înregistrare sau raportul. Acestea sunt subcomenzile cele mai frecvent utilizate; altele sunt enumerate în documentație (consultați secțiunea Rezumat pentru link).

rezumat

În acest ghid, v-am prezentat perf, un instrument de monitorizare și analiză a performanței pentru Linux. Vă încurajăm cu căldură să vă familiarizați cu documentația acesteia, care este menținută în https://perf.wiki.kernel.org.

Dacă găsiți aplicații care consumă un procent mare de resurse, puteți lua în considerare modificarea codului sursă sau utilizați alte alternative.

Dacă aveți întrebări despre acest articol sau sugestii de îmbunătățire, suntem cu toții urechi. Simțiți-vă liber să ne contactați folosind formularul de comentarii de mai jos.