OProfile je profiler performansi za Linux. U ovom ćemo članku istražiti što radi, kako ga instalirati i konfigurirati te kako podatke okupljene staviti na upotrebu.
Možda se pitate zašto bi vam trebao ovakav alat jer na većini Linux distribucija prema zadanim postavkama postoji mnoštvo dobrih alata za analizu performansi. Svaka instalacija uključuje alate kao što su top i vmstat, a uslužni programi za praćenje poput strace obično su samo prikladni koraci. Gdje se uklapa OProfile?
Prethodno spomenuti alati izvrsni su u dobivanju snimke Linux sustava u stvarnom vremenu. Alati poput top ili htop prikazuju sve pokrenute procese, trenutnu potrošnju memorije i upotrebu procesora. Ali znati koji procesi i sistemski pozivi troše najviše resursa postaje problematično.
Tu dolazi OProfile. Ovaj uslužni paket ne samo da svoju analizu izvodi na dubljoj razini, već također štedi podatke i omogućuje vam izradu izvješća o izvedbi koja nude mnoštvo informacija koje vam mogu pomoći u otklanjanju pogrešaka i kod najneuhvatljivijih problema s izvedbom.
OProfile nije namijenjen samo programerima. U radnom okruženju, OProfile vam može pomoći u pronalaženju pozadinskih zadataka koji zahtevaju CPU ili I / O poziva koji vas usporavaju i nisu odmah vidljivi. U prometnom sustavu s promjenjivim prioritetima procesa, ove podatke može biti teško prikupiti, a kamoli protumačiti. Višeprocesna priroda poslužiteljskog okruženja čini ovaj zadatak još težim s tradicionalnim alatima.
Uprkos tome, programeri će bez sumnje najviše iskoristiti OProfile. Podaci koje ću iznijeti pokrivat će osnove oba slučaja korištenja, tako da možete istražiti mjerne podatke izvedbe bilo kojeg Linux programa.
Montaža
Postoji vrlo važna napomena koju morate imati prije dubokog zaranjanja u OProfile - možda ga nećete moći instalirati u virtualiziranom okruženju. Ako koristite Linux unutar VirtualBox-a, VMWare-a ili sličnog VM okruženja, OProfile možda neće moći pristupiti potrebnim brojačima performansi za prikupljanje podataka. Nadalje, čak i ako ste u mogućnosti da ga koristite u virtualnom okruženju, precizno određivanje vremena može biti donekle iskrivljeno na temelju opterećenja sustava hosta, pa imajte to na umu ako ne radite na izvornom hardveru.
Nekoliko Linux distribucija ima OProfile u svojim sustavima za upravljanje paketima, što olakšava instalaciju:
- Debian / Ubuntu / Linux Mint - sudo apt-get instalacijski oprofile
- Fedora / CentOS - sudo yum instalirati oprofile
- Arch - sudo pacman -S oprofile
Jednostavan primjer
Jednom kad se program instalira, namočimo noge trivijalnim, a korisnim primjerom. Program "ls" naredba je koju vjerojatno stalno upotrebljavate. Jednostavno prikazuje popis datoteka i mapa u trenutnom direktoriju. Pratimo njegov izlaz:
sudo operf ls
Vidjet ćete nešto slično gornjoj snimci zaslona. Nakon što je profiler završen, objavit će „Profiliranje završeno.”Spremio je svoje podatke u mapu zvanu oprofile_data koja se može koristiti za generiranje izvješća.
Pokretanjem naredbe opreport (u ovom slučaju bez sudo) stvara se izvješće slično ovome:
U ovom primjeru, zadano izvješće prikazuje broj uzoraka kada CPU nije bio u stanju HALT (drugim riječima, aktivno je nešto radio). Kallsyms pruža traženje simbola koji koristi profiler i ld.tako i libc.tako su dio paketa glibc, zajedničke biblioteke povezane u gotovo sve izvršne datoteke Linuxa koja pruža osnovne funkcionalnosti koje programeri mogu koristiti da ne bi izumili kotačić i pružili generičku razinu kompatibilnosti između različitih sustava. Možete vidjeti da je stvarni program ls imali daleko manje vremena bez HALT-a - glavninu dizanja teških tereta izvele su standardne knjižnice.
Kad završimo s izvješćem, bilo bi dobro ukloniti mapu s podacima ili je spremiti za buduću analizu. U ovom ćemo ga primjeru samo ukloniti budući da izvodimo uzorke vježbi. Budući da smo naredbu izvršili sa sudo, moramo ukloniti mapu sa sudo. Budi oprezan!
sudo rm -Rf podaci_profila
Složeniji primjer
U sljedećem ćemo primjeru pokrenuti program koji zapravo radi nešto složenije od samog popisa datoteka u trenutnoj mapi. Preuzmimo WordPress s wgetom.
sudo operf wget http: // wordpress.org / najnovije.katran.gz
Nakon ovog primjera možemo generirati izvješće naredbom “opreport”:
Vidjet ćete puno više aktivnosti nakon ove. Naredba wget morala je napraviti puno posla iza kulisa da bi dobila najnoviju kopiju WordPressa. Iako nije potrebno ispitivati svaku stavku, zanimljive točke interesa su:
- ath9k i ath9k_hw - Ovi su moduli odgovorni za WiFi vezu na ovom prijenosnom računalu.
- mac80211 i cfg80211 - Te su knjižnice bile ključne za izvođenje mrežne veze koju zahtijeva wget.
- libnss_dns i libresolv korišteni su u rješavanju wordpress-a.org domenu u IP adresu kako bi wget mogao uspostaviti HTTP vezu.
- libcrypto i libssl - Te su knjižnice dio OpenSSL knjižnice. Ovim je izveden posao dekodiranja primljenih podataka s https: // url. Imajte na umu da iako smo URL odredili s http: //, WordPress poslužitelj nas je preusmjerio na https: // i wget je slijedio ovo preusmjeravanje.
- libpthread - Ova knjižnica izvodi navoje koji omogućavaju programima da rade više stvari odjednom. U ovom je slučaju wget pokrenuo nit za preuzimanje programa, a na ekranu je također pružio indikator napretka preuzimanja temeljenog na ASCII.
Ova vrsta podataka programeru može pružiti mnoštvo informacija. Ali kako je to važno za administratora sustava poslužitelja ili naprednog korisnika na radnoj površini? Znajući koji dijelovi programa uzimaju najviše procesorskog vremena, možemo saznati što treba optimizirati ili gdje dolazi do usporavanja, omogućavajući nam da donosimo bolje odluke o tome kako optimizirati naš sustav.
U ovom primjeru najviše CPU-a oduzele su kripto / SSL rutine. To je razumljivo jer je kriptografija dugotrajan zadatak. Imao sam wordpress.web mjesto org nije nas preusmjerilo na https: // ova knjižnica ne bi bila korištena, štedi nam CPU vrijeme. Mrežni sloj i dalje bi se koristio, ali korištenje žičane veze umjesto bežične veze vjerojatno bi bilo manje porezno. Onemogućavanje indikatora napretka na wget programu (putem prekidača -nv) uštedjelo bi CPU vrijeme u prikazivanju napretka preuzimanja.
Kopanje u simbole
Iako zadano izvješće pruža vrijedne i korisne informacije, možemo kopati dalje. Pokretanjem ovog:
opreport --demangle = pametni --simboli
Možemo točno saznati koliko procesorskog vremena funkcionira u utrošenim knjižnicama:
U ovom primjeru upotrijebio sam gornju naredbu wget, ali koristio sam http: // URL (onaj koji ne preusmjerava na https: //) i u tragu možete vidjeti odsustvo OpenSSL knjižnica. Međutim, umjesto samo naziva knjižnice, sada imamo cjelovit popis uključenih funkcija. Kao što vidite, mrežni sloj je trošio veći dio CPU-a ne-HALT vremena.
Prelazak na sljedeću razinu
U prethodnim primjerima koristili smo OProfile kako bismo pogledali jedan po jedan program. Možete pregledati cijeli svoj sustav odjednom pomoću preklopke za cijeli sustav:
sudo operf - širok sustav
Koristeći ovu tehniku, OProfile će na isti način prikupiti statistiku i zaustaviti se kad pritisnete CTRL + C. Nakon toga možete pokrenuti naredbu opreport. Budući da će profiler vjerojatno generirati mnogo više podataka (posebno na radnoj površini ili zauzetom poslužitelju).
opreport & gt; izvješće.txt
Izvješće je sada moguće vidjeti u datoteci koja se naziva izvještaj.txt
Nisko iznad glave
Važno je napomenuti da, iako OProfile ne bi trebao ometati rad vaših programa, stvorit će malo troškova i na taj način usporiti izvršavanje. U našim jednostavnim primjerima gore nije stvorio problem, ali na programu s dugim izvršavanjem i opsežnim pozivima funkcija vjerojatno ćete primijetiti razliku. Zbog toga ne bih preporučio upotrebu ovog programa u okruženju produkcijskog poslužitelja, osim ako se ne suočite s kritičnim problemom izvedbe koji se mora riješiti upotrebom uživo. Čak i tada, koristio bih ga dovoljno dugo da pronađem problem.
Zaključak
OProfile je moćan alat za profiliranje performansi. Dolazi do najniže razine dostupne u Linuxu kako bi dobio brojače performansi i mjerne podatke koji vam daju vrijedne informacije o vašim programima.
Prošlo je vrijeme pogađanja u otklanjanju pogrešaka u izvedbi - sada imate moć preciznog saznanja što vaš sustav radi i kako ga poboljšati. Proučavajući izvješća koja generira OProfile, možete donijeti informirane odluke na temelju podataka o optimizaciji vašeg sustava.