Prestatie

OProfielzelfstudie

OProfielzelfstudie

OProfile is een prestatieprofiel voor Linux. In dit artikel zullen we onderzoeken wat het doet, hoe het te installeren en configureren, en hoe de verzamelde gegevens te gebruiken.

Je vraagt ​​je misschien af ​​waarom je zo'n tool nodig zou hebben, aangezien er op de meeste Linux-distributies standaard tal van goede tools voor prestatieanalyse beschikbaar zijn. Elke installatie bevat tools zoals top en vmstat, en traceringshulpprogramma's zoals strace zijn meestal slechts een apt-get away. Waar past OProfile in??

De eerder genoemde tools zijn uitstekend in het verkrijgen van een momentopname van een Linux-systeem in realtime. Tools zoals top of htop tonen alle lopende processen, hun huidige geheugenverbruik en processorgebruik. Maar weten welke processen en systeemaanroepen de meeste bronnen verbruiken, wordt problematisch.

Dat is waar OProfile om de hoek komt kijken. Deze hulpprogrammasuite voert zijn analyse niet alleen op een dieper niveau uit, maar slaat ook gegevens op en stelt u in staat prestatierapporten te produceren die een schat aan informatie bieden die u kan helpen zelfs het meest ongrijpbare prestatieprobleem op te lossen.

OProfile is niet alleen voor ontwikkelaars. In een desktopomgeving kan OProfile u helpen bij het opsporen van CPU-intensieve achtergrondtaken of I/O-aanroepen die u vertragen en die niet meteen duidelijk zijn. In een druk systeem met wisselende procesprioriteiten kan het moeilijk zijn om deze gegevens te verzamelen, laat staan ​​te interpreteren. Het multi-proceskarakter van een serveromgeving maakt deze taak nog moeilijker met traditionele tools.

Dat gezegd hebbende, zullen ontwikkelaars ongetwijfeld het meeste uit OProfile halen. De informatie die ik zal presenteren, behandelt de basisprincipes van beide use-cases, zodat u zich kunt verdiepen in de prestatiestatistieken van elk Linux-programma.

Installatie

Er is een zeer belangrijke opmerking die moet worden gemaakt voordat u diep in OProfile duikt - u kunt het mogelijk niet in een gevirtualiseerde omgeving installeren. Als u Linux gebruikt in een VirtualBox, VMWare of vergelijkbare VM-omgeving, heeft OProfile mogelijk geen toegang tot de benodigde prestatiemeteritems om gegevens te verzamelen. Bovendien, zelfs als u het in een virtuele omgeving kunt gebruiken, kan de precieze timing enigszins worden vervormd op basis van de belasting van het hostsysteem, dus houd hier rekening mee als u niet op native hardware draait.

Verschillende Linux-distributies hebben OProfile in hun pakketbeheersystemen, wat de installatie eenvoudig maakt:

Een eenvoudig voorbeeld

Zodra het programma is geïnstalleerd, laten we onze voeten nat maken met een triviaal maar nuttig voorbeeld. Het programma "ls" is een commando dat je waarschijnlijk altijd gebruikt. Het toont eenvoudig een lijst met bestanden en mappen in de huidige map. Laten we de uitvoer ervan traceren:

sudo operf ls

U ziet iets dat lijkt op de bovenstaande schermafbeelding. Zodra de profiler klaar is, zal het "Profiling done" aankondigen."Het heeft zijn gegevens opgeslagen in een map met de naam oprofile_data die kan worden gebruikt om een ​​rapport te genereren.

Het uitvoeren van de opdracht opreport (in dit geval zonder sudo) produceert een rapport dat er ongeveer zo uitziet:

In dit voorbeeld toont het standaardrapport het aantal monsters wanneer de CPU niet in een HALT-status was (met andere woorden, actief iets aan het doen was). Kallsyms biedt het opzoeken van symbolen gebruikt door de profiler, en de ld.zo en libc.maken dus deel uit van het glibc-pakket, een gemeenschappelijke bibliotheek die is gekoppeld aan bijna alle uitvoerbare Linux-bestanden die basisfunctionaliteit biedt die ontwikkelaars kunnen gebruiken om te voorkomen dat ze het wiel opnieuw uitvinden en om een ​​generiek niveau van compatibiliteit tussen verschillende systemen te bieden. U kunt zien dat het eigenlijke programma ls had veel minder niet-HALT-tijd - het grootste deel van het zware werk werd gedaan door de standaardbibliotheken.

Als we klaar zijn met het rapport, is het een goed idee om de gegevensmap te verwijderen of op te slaan voor toekomstige analyse. In dit voorbeeld zullen we het gewoon verwijderen omdat we voorbeeldoefeningen uitvoeren. Omdat we de opdracht met sudo hebben uitgevoerd, moeten we de map met sudo verwijderen remove. Doe voorzichtig!

sudo rm -Rf oprofile_data

Een complexer voorbeeld

In dit volgende voorbeeld zullen we een programma uitvoeren dat eigenlijk iets ingewikkelders doet dan alleen bestanden in de huidige map weergeven. Laten we WordPress downloaden met wget.

sudo operf wget http://wordpress.org/laatste.teer.gz

Na dit voorbeeld kunnen we een rapport genereren met de opdracht “opreport”:

Je zult hierna veel meer activiteit zien. Het wget-commando moest achter de schermen veel werk verzetten om het nieuwste exemplaar van WordPress te verkrijgen. Hoewel het niet nodig is om elk item te onderzoeken, zijn de interessante aandachtspunten:

Dit soort gegevens kan een ontwikkelaar een schat aan informatie opleveren. Maar hoe belangrijk is dit voor een systeembeheerder van een server of een hoofdgebruiker op een desktop?? Door te weten welke delen van een programma de meeste CPU-tijd in beslag nemen, kunnen we erachter komen wat optimalisatie nodig heeft of waar de vertraging optreedt, waardoor we betere beslissingen kunnen nemen over hoe we ons systeem kunnen optimaliseren.

In dit voorbeeld werd de meeste CPU-tijd ingenomen door de crypto/SSL-routines. Dit is begrijpelijk omdat cryptografie een tijdrovende taak is. Had de wordpress.org-website heeft ons niet doorgestuurd naar https:// deze bibliotheek zou niet zijn gebruikt, wat ons CPU-tijd bespaart saving. De netwerklaag zou nog steeds zijn gebruikt, maar het gebruik van een bekabelde verbinding in plaats van een draadloze verbinding zou waarschijnlijk minder belastend zijn geweest. Het uitschakelen van de voortgangsindicator op het wget-programma (via de -nv-schakelaar) zou CPU-tijd hebben bespaard bij het weergeven van de downloadvoortgang.

Graven in symbolen

Hoewel het standaardrapport waardevolle en nuttige informatie biedt, kunnen we verder graven. Door dit uit te voeren:

opreport --demangle=smart --symbols

We kunnen precies achterhalen hoeveel CPU-tijdfuncties in de gebruikte bibliotheken:

In dit voorbeeld heb ik de opdracht wget hierboven gebruikt, maar een http://-URL gebruikt (een die niet doorverwijst naar https://) en je kunt de afwezigheid van OpenSSL-bibliotheken in de trace zien. In plaats van alleen de bibliotheeknaam hebben we nu echter een volledige lijst van de betrokken functies. Zoals u kunt zien, verbruikte de netwerklaag het grootste deel van de CPU-non-HALT-tijd.

Het naar het volgende niveau brengen

In de vorige voorbeelden hebben we OProfile gebruikt om één programma tegelijk te bekijken. U kunt uw hele systeem in één keer bekijken met behulp van de -systeembrede schakelaar:

sudo operf --systeembreed

Met deze techniek verzamelt OProfile statistieken op dezelfde manier en stopt wanneer u op CTRL+C . drukt. Daarna kunt u de opdracht opreport uitvoeren. Aangezien de profiler waarschijnlijk veel meer gegevens zal genereren (vooral op een desktop of drukke server).

melden > verslag doen van.tekst

Het rapport is nu zichtbaar in een bestand met de naam rapport.tekst

Lage overhead

Het is belangrijk op te merken dat, hoewel OProfile de werking van uw programma's niet mag verstoren, het een beetje overhead zal veroorzaken en dus de uitvoering zal vertragen. In onze eenvoudige voorbeelden hierboven creëerde het geen probleem, maar in een programma met lange uitvoering en uitgebreide functieaanroepen zul je waarschijnlijk een verschil merken. Daarom raad ik het gebruik van dit programma niet aan in een productieserveromgeving, tenzij u wordt geconfronteerd met een kritiek prestatieprobleem dat moet worden opgelost met live-gebruik. Zelfs dan zou ik het net lang genoeg gebruiken om het probleem te vinden.

Conclusie

OProfile is een krachtige tool voor prestatieprofilering. Het maakt gebruik van het laagste niveau dat beschikbaar is in Linux om prestatiemeteritems en -statistieken te verkrijgen die u waardevolle informatie over uw programma's geven.

Voorbij zijn de dagen van giswerk bij het debuggen van prestaties - u hebt nu de kracht om precies te weten wat uw systeem doet en hoe u het kunt verbeteren. Door de rapporten te bestuderen die door OProfile worden gegenereerd, kunt u weloverwogen, gegevensgestuurde beslissingen nemen over het optimaliseren van uw systeem.

OSD-overlay tonen in Linux-apps en -games op volledig scherm
Het spelen van games op volledig scherm of het gebruik van apps in de modus volledig scherm zonder afleiding kan u afsnijden van relevante systeeminfo...
Top 5 Game Capture-kaarten
We hebben allemaal gezien en genoten van streaming gameplays op YouTube. PewDiePie, Jakesepticye en Markiplier zijn slechts enkele van de beste gamers...
Hoe een spel op Linux te ontwikkelen
Tien jaar geleden zouden niet veel Linux-gebruikers voorspellen dat hun favoriete besturingssysteem ooit een populair spelplatform voor commerciële vi...