Als we het hebben over prestaties in de informatica, verwijzen we naar de relatie tussen onze middelen en de taken die ze ons in een bepaalde periode van tijd laten voltooien.

In een dag van felle concurrentie tussen bedrijven is het belangrijk dat we leren hoe we het beste uit onze capaciteit kunnen halen. Het verspillen van hardware- of softwarebronnen, of het gebrek aan vermogen om ze efficiënter te gebruiken, leidt uiteindelijk tot verlies dat we ons gewoon niet kunnen veroorloven als we aan de top willen blijven.
Tegelijkertijd moeten we oppassen dat we onze middelen niet tot het uiterste brengen, waarbij langdurig gebruik onherstelbare schade veroorzaakt.
In dit artikel introduceren we u een relatief nieuw prestatieanalysetool en geven we tips die u kunt gebruiken om uw Linux-systemen, inclusief hardware en applicaties, te monitoren. Dit helpt u ervoor te zorgen dat ze werken zodat u de gewenste resultaten kunt behalen zonder middelen of energie te verspillen.
Introductie en installatie van Perf in Linux
Onder andere biedt Linux een prestatiebewakings- en analysehulpmiddel genaamd handig perf. Dus wat onderscheidt perf van andere bekende tools waar u al bekend mee bent?
Het antwoord is dat perf toegang biedt tot de Performance Monitoring Unit in de CPU, en ons zo in staat stelt om nauwkeurig naar het gedrag van de hardware en de bijbehorende gebeurtenissen te kijken.
Daarnaast kan het ook softwaregebeurtenissen bewaken en rapporten genereren uit de verzamelde gegevens.
Je kunt perf installeren in RPM-gebaseerde distributies met:
# yum update && yum install perf [CentOS / RHEL / Fedora] # dnf update && dnf install perf [Fedora 23+ releases]
In Debian en afgeleiden:
# sudo aptitude update && sudo aptitude install linux-tools-$(uname -r) linux-tools-generic
Als uname -r
in het bovenstaande commando extra strings retourneert naast de werkelijke versie (3.2.0-23-generic in mijn geval), moet je mogelijk linux-tools-3.2.0-23 typen in plaats van de output van uname.
Het is ook belangrijk om op te merken dat perf onvolledige resultaten oplevert wanneer het wordt uitgevoerd in een gast op VirtualBox of VMWare omdat ze geen toegang verlenen tot hardwaretellers zoals andere virtualisatietechnologieën (zoals KVM of XEN) doen.
Houd er ook rekening mee dat sommige perf commando’s standaard beperkt kunnen zijn tot root, wat uitgeschakeld kan worden (totdat het systeem opnieuw wordt opgestart) door het volgende te doen:
# echo 0 > /proc/sys/kernel/perf_event_paranoid
Als u paranoid modus permanent wilt uitschakelen, moet u de volgende instelling in het bestand /etc/sysctl.conf bijwerken.
kernel.perf_event_paranoid = 0
Subcommando’s
Nadat u perf geïnstalleerd heeft, kunt u naar zijn man-pagina kijken voor een lijst met beschikbare subcommando’s (u kunt subcommando’s denken aan speciaal opties die een specifieke window op het systeem openen). Om de beste en meest complete resultaten te krijgen, gebruikt u perf altijd als root of door middel van sudo.
Perf list
`perf list` (zonder opties) geeft alle symbolische gebeurtenistypen terug (lang lijst). Als u de lijst van beschikbare gebeurtenissen in een specifieke categorie wilt zien, gebruikt u `perf list` gevolgd door de categorienaam ([hw|sw|cache|tracepoint|pmu|event_glob]), bijvoorbeeld:
Toon lijst van software voorgedefinieerde gebeurtenissen in Linux:
# perf list sw

Perf stat
perf stat voert een commando uit en verzamelt Linux performantiegegevens tijdens de uitvoering van dit commando. Wat gebeurt er in ons systeem als we dd uitvoeren?
# perf stat dd if=/dev/zero of=test.iso bs=10M count=1

De bovenstaande statistieken geven, onder andere, aan:
- De uitvoering van het dd commando duurde 21.812281 milliseconden van de CPU. Als we dit aantal delen door de waarde “seconden tijd verstreken” hieronder (23.914596 milliseconden), krijgt u 0.912 (CPU gebruikt).
- Terwijl het commando werd uitgevoerd, geven 15 contextwisselingen (ook wel bekend als proceswisselingen) aan dat de CPU’s 15 keer zijn overgeschakeld van het ene proces (of draad) naar het andere.
- 2 CPU-migraties is het verwachte resultaat wanneer bij een 2-core CPU de werkbelasting gelijkmatig over het aantal cores wordt verdeeld.
Gedurende die tijd (21.812281 milliseconden) werden in totaal 62.025.623 CPU-cycli verbruikt, wat gedeeld door 0.021812281 seconden resulteert in 2.843 GHz. - Als we het aantal cycli delen door het totale aantal instructies, krijgen we 4.9 cycli per instructie, wat betekent dat elke instructie bijna 5 CPU-cycli nodig had om te voltooien (gemiddeld). We kunnen dit (tenminste gedeeltelijk) wijten aan het aantal branches en branch-misses (zie hieronder), die uiteindelijk CPU-cycli verspillen of verkeerd gebruiken.
- Tijdens het uitvoeren van het commando werden in totaal 3.552.630 branches tegengekomen. Dit is de CPU-level representatie van beslissingspunten en lussen in de code. Hoe meer branches, hoe lager de prestaties. Om dit te compenseren, proberen alle moderne CPU’s de stroom van de code te voorspellen. 51.348 branch-misses geven aan dat de voorspellingsfunctie 1.45% van de tijd onjuist was.
Hetzelfde principe geldt voor het verzamelen van statistieken (of in andere woorden, profileren) terwijl een applicatie wordt uitgevoerd. Start eenvoudig de gewenste applicatie en sluit deze na een redelijke periode (die aan u is) en perf zal de statistieken op het scherm weergeven. Door deze statistieken te analyseren, kunt u potentiële problemen identificeren.
Perf top
perf top lijkt op top command, want het toont een bijna realtime systeemprofiel (ook wel live analyse genoemd).
Met de optie -a
zal u alle bekende gebeurtenissoorten tonen, terwijl de optie -e
u toestaat een specifieke gebeurtenisklasse te kiezen (zoals teruggegeven door perf list):
Toon alle cycli gebeurtenissen.
perf top -a
Toon alle cpu-clock gerelateerde gebeurtenissen.
perf top -e cpu-clock

De eerste kolom in de bovenstaande uitvoer representeert het percentage monsters genomen sinds het begin van de runtime, gegroepeerd door functieSymbool en gedeelde Object. Meer opties zijn beschikbaar in man perf-top.
Perf record
perf record voert een commando uit en slaat de statistische gegevens op in een bestand genaamd perf.data binnen het huidige werkende directory. Het werkt vergelijkbaar met perf stat.
Type perf record gevolgd door een commando:
# perf record dd if=/dev/null of=test.iso bs=10M count=1

Perf report
perf report formateert de gegevens verzameld in perf.data bovengenoemd tot een prestatieverslag:
# sudo perf report

Alle bovenstaande subcommands hebben een aparte man pagina die kan worden opgeroepen als:
# man perf-subcommand
waar subcommand ofwel list, stat, top, record of report is. Dit zijn de meest gebruikte subopdrachten; andere staan vermeld in de documentatie (raadpleeg de samenvatting voor de link).
Samenvatting
In deze gids hebben we u kennis laten maken met perf, een prestatiebewakings- en analysesysteem voor Linux. We raden u ten zeerste aan om vertrouwd te raken met de documentatie, die wordt onderhouden op https://perf.wiki.kernel.org.
Als u toepassingen vindt die een hoog percentage van de resources verbruiken, kunt u overwegen de broncode aan te passen of andere alternatieven te gebruiken.
Als u vragen heeft over dit artikel of suggesties ter verbetering, luisteren we graag. Neem gerust contact met ons op via het onderstaande reactieformulier.
Source:
https://www.tecmint.com/perf-performance-monitoring-and-analysis-tool-for-linux/