Prestanda

OProfile Tutorial

OProfile Tutorial

OProfile är en prestandaprofiler för Linux. I den här artikeln kommer vi att undersöka vad den gör, hur man installerar och konfigurerar den och hur man använder data som den samlar ihop.

Du kanske undrar varför du behöver ett verktyg som det här eftersom det finns gott om bra prestandaanalysverktyg tillgängliga som standard på de flesta Linux-distributioner. Varje installation innehåller verktyg som topp och vmstat, och spårningsverktyg som strace är vanligtvis bara en apt-get away. Var passar OProfile in?

Verktygen som tidigare nämnts är utmärkta för att få en ögonblicksbild av ett Linux-system i realtid. Verktyg som top eller htop visar alla pågående processer, deras nuvarande minnesförbrukning och processoranvändning. Men att veta vilka processer och systemanrop som förbrukar mest resurser blir problematiskt.

Det är där OProfile kommer in. Denna verktygssvit utför inte bara sin analys på en djupare nivå utan sparar också data och låter dig producera prestandarapporter som erbjuder en mängd information som kan hjälpa dig att felsöka även den mest svårfångade prestandafrågan.

OProfile är inte bara för utvecklare. I en skrivbordsmiljö kan OProfile hjälpa dig att spåra CPU-intensiva bakgrundsuppgifter eller I / O-samtal som saktar ner dig och inte är omedelbart uppenbara. På ett upptaget system med skiftande processprioriteringar kan dessa uppgifter vara svåra att samla in, än mindre att tolka. Servermiljön med flera processer gör denna uppgift ännu svårare med traditionella verktyg.

Med detta sagt kommer utvecklare utan tvekan att få mest nytta av OProfile. Den information som jag kommer att presentera kommer att täcka grunderna i båda användningsfallet så att du kan gräva i prestandamätvärdena för alla Linux-program.

Installation

Det finns en mycket viktig anmärkning som måste göras innan du dyker djupt in i OProfile - du kanske inte kan installera den i en virtualiserad miljö. Om du kör Linux i en VirtualBox-, VMWare- eller liknande VM-miljö kanske OProfile inte kommer åt de nödvändiga prestandaräknarna för att samla in data. Dessutom, även om du kan använda den i en virtuell miljö, kan den exakta tidpunkten vara något förvrängd baserat på värdsystemets belastning, så kom ihåg detta om du inte kör på inbyggd hårdvara.

Flera Linux-distributioner har OProfile i sina pakethanteringssystem, vilket gör installationen enkel:

Ett enkelt exempel

När programmet är installerat, låt oss få fötterna våta med ett trivialt men ändå användbart exempel. Programmet “ls” är ett kommando som du antagligen använder hela tiden. Den visar helt enkelt en lista med filer och mappar i den aktuella katalogen. Låt oss spåra dess produktion:

sudo operf ls

Du ser något som liknar ovanstående skärmdump. När profilen är klar kommer den att meddela “Profiling done.”Det har sparat sina data i en mapp som heter oprofile_data som kan användas för att generera en rapport.

Att köra kommandopreporten (utan sudo i det här fallet) ger en rapport som liknar den här:

I det här exemplet visar standardrapporten antalet prover när processorn inte var i HALT-tillstånd (med andra ord aktivt gjorde något). Kallsyms tillhandahåller symboluppslagning som används av profilen och ld.så och libc.så är en del av glibc-paketet, ett gemensamt bibliotek kopplat till nästan alla Linux-körbara filer som ger grundläggande funktionalitet som utvecklare kan använda för att undvika att återuppfinna hjulet och ge en generell nivå av kompatibilitet mellan olika system. Du kan se att det faktiska programmet ls hade mycket mindre icke-HALT-tid - huvuddelen av tunga lyft gjordes av standardbiblioteken.

När vi är klara med rapporten är det en bra idé att antingen ta bort datamappen eller spara den för framtida analys. I det här exemplet tar vi bara bort det eftersom vi kör exempelövningar. Eftersom vi körde kommandot med sudo måste vi ta bort mappen med sudo. Var försiktig!

sudo rm -Rf oprofile_data

Ett mer komplicerat exempel

I det här nästa exemplet kör vi ett program som faktiskt gör något mer komplicerat än att bara lista filer i den aktuella mappen. Låt oss ladda ner WordPress med wget.

sudo operf wget http: // wordpress.org / senaste.tjära.gz

Efter detta exempel kan vi generera en rapport med kommandot “opreport”:

Du kommer att se mycket mer aktivitet efter den här. Wget-kommandot var tvungen att göra mycket arbete bakom kulisserna för att få den senaste kopian av WordPress. Även om det inte är nödvändigt att undersöka varje objekt, är de intressanta sevärdheterna:

Denna typ av data kan ge en mängd information för en utvecklare. Men hur är detta viktigt för en systemadministratör på en server eller en kraftanvändare på ett skrivbord?? Genom att veta vilka delar av ett program som tar mest CPU-tid kan vi ta reda på vad som behöver optimeras eller var avmattningen sker, så att vi kan fatta bättre beslut om hur vi kan optimera vårt system.

I det här exemplet tog mest CPU-tid av krypto / SSL-rutinerna. Detta är förståeligt eftersom kryptografi är en tidskrävande uppgift. Hade wordpress.org-webbplats omdirigerade oss inte till https: // detta bibliotek skulle inte ha använts, vilket sparar oss CPU-tid. Nätverksskiktet skulle fortfarande ha använts, men att använda en trådbunden anslutning istället för en trådlös anslutning skulle sannolikt ha varit mindre beskattande. Inaktivera framstegsindikatorn i wget-programmet (via -nv-omkopplaren) skulle ha sparat CPU-tid när nedladdningsförloppet visas.

Gräva i symboler

Även om standardrapporten ger värdefull och användbar information kan vi gräva vidare. Genom att köra detta:

opreport --demangle = smarta - symboler

Vi kan ta reda på exakt hur mycket CPU-tid som fungerar i biblioteken som förbrukas:

I det här exemplet använde jag kommandot wget ovan men använde en http: // URL (en som inte omdirigerar till https: //) och du kan se frånvaron av OpenSSL-bibliotek i spåret. I stället för bara biblioteksnamnet har vi nu en fullständig lista över de inblandade funktionerna. Som du kan se förbrukade nätverksskiktet större delen av CPU-tiden som inte var HALT.

Tar det till nästa nivå

I de tidigare exemplen har vi använt OProfile för att titta på ett program i taget. Du kan undersöka hela ditt system på en gång med hjälp av -systemomkopplaren:

sudo operf - hela systemet

Med den här tekniken samlar OProfile statistik på samma sätt och stoppar när du trycker på CTRL + C. Därefter kan du köra kommandot opreport. Eftersom profilen sannolikt kommer att generera mycket mer data (särskilt på en stationär eller upptagen server).

opreport & gt; Rapportera.Text

Rapporten kan nu visas i en fil som heter rapport.Text

Låg overhead

Det är viktigt att notera att medan OProfile inte borde störa driften av dina program, kommer det att skapa lite overhead och därmed sakta ner körningen. I våra enkla exempel ovan skapade det inte ett problem, men på ett program med lång körning och omfattande funktionssamtal kommer du sannolikt att märka en skillnad. På grund av detta skulle jag inte rekommendera att använda detta program i en produktionsservermiljö såvida det inte ställs inför ett kritiskt prestandaproblem som måste lösas med live-användning. Även då skulle jag använda den precis tillräckligt länge för att hitta problemet.

Slutsats

OProfile är ett kraftfullt profileringsverktyg för prestanda. Det tappar till den lägsta nivån som finns i Linux för att få prestandaräknare och mätvärden som ger dig värdefull information om dina program.

Borta är dagarna med gissningar i prestandafelsökning - du har nu makten att veta exakt vad ditt system gör och hur du kan förbättra det. Genom att studera de rapporter som genereras av OProfile kan du fatta informerade, datadrivna beslut om hur du optimerar ditt system.

Shadow of the Tomb Raider for Linux Tutorial
Shadow of the Tomb Raider är det tolfte tillskottet till Tomb Raider-serien - en action-äventyrsspelfranchise skapad av Eidos Montreal. Spelet mottogs...
Hur man förbättrar FPS i Linux?
FPS står för Bildrutor per sekund. FPS: s uppgift är att mäta bildfrekvensen i videouppspelningar eller spelprestanda. Med enkla ord betecknas antalet...
De bästa Oculus App Lab-spelen
Om du är Oculus-headsetägare måste du vara förtjust i sidoladdning. Sideladdning är processen för att installera icke-butiksinnehåll på ditt headset. ...