OProfile er en ytelsesprofil for Linux. I denne artikkelen vil vi utforske hva den gjør, hvordan du installerer og konfigurerer den, og hvordan du bruker dataene den samler til å bruke.
Du lurer kanskje på hvorfor du trenger et verktøy som dette, da det er mange gode ytelsesanalyseverktøy tilgjengelig som standard på de fleste Linux-distribusjoner. Hver installasjon inkluderer verktøy som topp og vmstat, og sporing av verktøy som strace er vanligvis bare en apt-get away. Hvor passer OProfile inn?
Verktøyene som er nevnt tidligere er utmerkede for å få et øyeblikksbilde av et Linux-system i sanntid. Verktøy som topp eller topp viser alle prosesser som kjører, deres nåværende minneforbruk og prosessorbruk. Men å vite hvilke prosesser og systemanrop som bruker mest ressurser, blir problematisk.
Det er der OProfile kommer inn. Denne verktøysuiten utfører ikke bare analysene på et dypere nivå, men lagrer også data og lar deg produsere ytelsesrapporter som tilbyr et vell av informasjon som kan hjelpe deg med å feilsøke selv det mest unnvikende ytelsesproblemet.
OProfile er ikke bare for utviklere. I et skrivebordsmiljø kan OProfile hjelpe deg med å spore CPU-intensive bakgrunnsoppgaver eller I / O-samtaler som bremser deg og som ikke er umiddelbart tydelige. På et travelt system med skiftende prosessprioriteter kan disse dataene være vanskelig å samle inn, enn si tolke. Flerprosess-karakteren til et servermiljø gjør denne oppgaven enda vanskeligere med tradisjonelle verktøy.
Når det er sagt, vil utviklere uten tvil få mest mulig utbytte av OProfile. Informasjonen jeg vil presentere vil dekke det grunnleggende i begge brukstilfellene, slik at du kan grave i ytelsesberegningene for ethvert Linux-program.
Installasjon
Det er et veldig viktig notat som må gjøres før du dykker dypt inn i OProfile - du kan ikke installere det i et virtualisert miljø. Hvis du kjører Linux i et VirtualBox-, VMWare- eller lignende VM-miljø, kan det hende at OProfile ikke får tilgang til de nødvendige ytelsestellere for å samle inn data. Videre, selv om du er i stand til å bruke den i et virtuelt miljø, kan presis timing være litt forvrengt basert på belastning på vertssystemet, så vær oppmerksom på dette hvis du ikke kjører på innebygd maskinvare.
Flere Linux-distribusjoner har OProfile i sine pakkehåndteringssystemer, noe som gjør installasjonen enkel:
- Debian / Ubuntu / Linux Mint - sudo apt-get install oprofile
- Fedora / CentOS - sudo yum installer oprofile
- Arch - sudo pacman -S oprofile
Et enkelt eksempel
Når programmet er installert, la oss få føttene våte med et trivielt, men nyttig eksempel. Programmet “ls” er en kommando du sannsynligvis bruker hele tiden. Den viser ganske enkelt en liste over filer og mapper i gjeldende katalog. La oss spore utdataene:
sudo operf ls
Du ser noe som ligner på skjermbildet ovenfor. Når profilen er ferdig, vil den kunngjøre “Profiling done.”Den har lagret dataene i en mappe kalt oprofile_data som kan brukes til å generere en rapport.
Å kjøre kommandoen opreport (uten sudo i dette tilfellet) gir en rapport som ligner på denne:
I dette eksemplet viser standardrapporten antall prøver når CPU ikke var i HALT-tilstand (med andre ord aktivt gjorde noe). Kallsyms gir symboloppslag brukt av profilen, og ld.så og libc.så er en del av glibc-pakken, et felles bibliotek koblet til nesten alle Linux-kjørbare filer som gir grunnleggende funksjonalitet som utviklere kan bruke for å unngå å gjenoppfinne hjulet og gi et generelt nivå av kompatibilitet mellom forskjellige systemer. Du kan se at selve programmet ls hadde langt mindre tid enn HALT - hovedtyngden av tungløftingen ble utført av standardbibliotekene.
Når vi er ferdige med rapporten, er det lurt å enten fjerne datamappen eller lagre den for fremtidig analyse. I dette eksemplet vil vi bare fjerne det siden vi kjører prøveøvelser. Siden vi kjørte kommandoen med sudo, må vi fjerne mappen med sudo. Vær forsiktig!
sudo rm -Rf oprofile_data
Et mer komplekst eksempel
I dette neste eksemplet vil vi kjøre et program som faktisk gjør noe mer komplekst enn bare å liste filer i den gjeldende mappen. La oss laste ned WordPress med wget.
sudo operf wget http: // wordpress.org / siste.tjære.gz
Etter dette eksemplet kan vi generere en rapport med kommandoen “opreport”:
Du vil se mye mer aktivitet etter denne. Wget-kommandoen måtte gjøre mye arbeid bak kulissene for å skaffe den nyeste kopien av WordPress. Selv om det ikke er nødvendig å undersøke hvert element, er de interessante severdighetene:
- ath9k og ath9k_hw - Disse modulene er ansvarlige for WiFi-tilkoblingen på denne bærbare datamaskinen.
- mac80211 og cfg80211 - Disse bibliotekene var medvirkende til å utføre nettverkstilkoblingen som kreves av wget.
- libnss_dns og libresolv ble brukt til å løse wordpress.org-domene til en IP-adresse slik at wget kan opprette en HTTP-forbindelse.
- libcrypto og libssl - Disse bibliotekene er en del av OpenSSL-biblioteket. Dette utførte arbeidet med å dekode mottatte data fra https: // url. Merk at selv om vi spesifiserte en URL med http: //, omdirigerte WordPress-serveren oss til https: // og wget fulgte denne viderekoblingen.
- libpthread - Dette biblioteket utfører trådoperasjoner som lar programmer gjøre flere ting samtidig. I dette tilfellet startet wget en tråd for å laste ned programmet og gi også en ASCII-basert nedlastingsindikator på skjermen.
Denne typen data kan gi en mengde informasjon for en utvikler. Men hvordan er dette viktig for en systemadministrator av en server eller en strømbruker på skrivebordet? Ved å vite hvilke deler av et program som tar mest CPU-tid, kan vi finne ut hva som trenger optimalisering eller hvor bremsen oppstår, slik at vi kan ta bedre beslutninger om hvordan vi skal optimalisere systemet vårt.
I dette eksemplet ble mest CPU-tid tatt av krypto / SSL-rutinene. Dette er forståelig fordi kryptografi er en tidkrevende oppgave. Hadde ordpressen.org-nettsted omdirigerte oss ikke til https: // dette biblioteket ville ikke ha blitt brukt, noe som sparer CPU-tid for oss. Nettverkslaget ville fortsatt ha blitt brukt, men å bruke en kablet tilkobling i stedet for en trådløs tilkobling ville sannsynligvis vært mindre beskattende. Deaktivering av fremdriftsindikatoren på wget-programmet (via -nv-bryteren) ville ha spart CPU-tid ved å vise nedlastingsfremdrift.
Grave inn symboler
Selv om standardrapporten gir verdifull og nyttig informasjon, kan vi grave videre. Ved å kjøre dette:
opreport --demangle = smart - symboler
Vi kan finne ut nøyaktig hvor mye CPU-tid som fungerer i bibliotekene som forbrukes:
I dette eksemplet brukte jeg wget-kommandoen ovenfor, men brukte en http: // URL (en som ikke omdirigerer til https: //), og du kan se fraværet av OpenSSL-biblioteker i sporet. Imidlertid, i stedet for bare biblioteksnavnet, har vi nå en fullstendig liste over funksjonene som er involvert. Som du kan se, tok nettverkslaget mesteparten av CPU-tiden som ikke var HALT.
Tar det til neste nivå
I de forrige eksemplene har vi brukt OProfile for å se på ett program om gangen. Du kan undersøke hele systemet ditt samtidig ved å bruke bryteren for hele systemet:
sudo operf - hele systemet
Ved hjelp av denne teknikken vil OProfile samle statistikk på samme måte og stoppe når du treffer CTRL + C. Etterpå kan du kjøre kommandoen opreport. Siden profilen sannsynligvis vil generere mye mer data (spesielt på en stasjonær eller opptatt server).
opreport & gt; rapportere.tekst
Rapporten kan nå vises i en fil som heter rapport.tekst
Lavt overhead
Det er viktig å merke seg at mens OProfile ikke skal forstyrre driften av programmene dine, vil det skape litt overhead og dermed redusere utførelsen. I våre enkle eksempler ovenfor skapte det ikke noe problem, men på et program med lang kjøring og omfattende funksjonsanrop vil du sannsynligvis merke en forskjell. På grunn av dette vil jeg ikke anbefale å bruke dette programmet i et produksjons-servermiljø med mindre de står overfor et kritisk ytelsesproblem som må løses med live bruk. Selv da ville jeg bruke det akkurat lenge nok til å finne problemet.
Konklusjon
OProfile er et kraftig ytelsesprofileringsverktøy. Det tappes inn på det laveste nivået som er tilgjengelig i Linux for å skaffe ytelsestellere og beregninger som gir deg verdifull informasjon om programmene dine.
Borte er dagene med gjetning i feilsøking av ytelse - du har nå makten til å vite nøyaktig hva systemet ditt gjør og hvordan du kan forbedre det. Ved å studere rapportene generert av OProfile, kan du ta informerte, datadrevne beslutninger om å optimalisere systemet ditt.