Zoeken op website

Perf- Een prestatiebewakings- en analysetool voor Linux


Als we het hebben over computerprestaties, bedoelen we de relatie tussen onze hulpbronnen en de taken die ze ons in staat stellen in een bepaalde tijdsperiode te voltooien.

In een tijd van felle concurrentie tussen bedrijven is het belangrijk dat we leren hoe we de middelen die we hebben zo goed mogelijk kunnen gebruiken. De verspilling van hardware- of softwarebronnen, of het gebrek aan vermogen om ze efficiënter te gebruiken, wordt uiteindelijk een verlies dat we ons gewoon niet kunnen veroorloven als we aan de top willen staan.

Tegelijkertijd moeten we oppassen dat we onze hulpbronnen niet tot het uiterste drijven waarbij langdurig gebruik onherstelbare schade zal veroorzaken.

In dit artikel laten we u kennismaken met een relatief nieuwe prestatieanalysetool en geven we tips die u kunt gebruiken om uw Linux-systemen te monitoren, inclusief hardware en applicaties. Dit zal u helpen ervoor te zorgen dat ze zo werken dat u in staat bent de gewenste resultaten te bereiken zonder hulpbronnen of uw eigen energie te verspillen.

Introductie en installatie van Perf in Linux

Linux biedt onder andere een prestatiebewakings- en analysehulpmiddel genaamd perf. Dus wat onderscheidt perf van andere bekende tools waarmee je al bekend bent?

Het antwoord is dat perf toegang biedt tot de Performance Monitoring Unit in de CPU, en ons dus in staat stelt het gedrag van de hardware en de bijbehorende gebeurtenissen van dichtbij te bekijken.

Daarnaast kan het ook softwaregebeurtenissen monitoren en rapporten maken op basis van de verzamelde gegevens.

Je kunt perf installeren in op RPM gebaseerde distributies met:

yum update && yum install perf     [CentOS / RHEL / Fedora]
dnf update && dnf install perf     [Fedora 23+ releases]

In Debian en derivaten:

sudo aptitude update && sudo aptitude install linux-tools-$(uname -r) linux-tools-generic

Als uname -r in de bovenstaande opdracht extra tekenreeksen retourneert naast de daadwerkelijke versie (3.2.0-23-generic in mijn geval), moet je mogelijk typen linux-tools-3.2.0-23 in plaats van de uitvoer van uname te gebruiken.

Het is ook belangrijk op te merken dat perf onvolledige resultaten oplevert wanneer het in een gast bovenop VirtualBox of VMWare wordt uitgevoerd, omdat ze geen toegang tot hardwaretellers toestaan, zoals andere virtualisatietechnologieën (zoals KVM of XEN) doen. .

Houd er bovendien rekening mee dat sommige perf-opdrachten standaard beperkt kunnen zijn tot root, wat kan worden uitgeschakeld (totdat het systeem opnieuw wordt opgestart) door het volgende te doen:

echo 0 > /proc/sys/kernel/perf_event_paranoid

Als u de paranoïde modus permanent wilt uitschakelen, update dan de volgende instelling in het bestand /etc/sysctl.conf.

kernel.perf_event_paranoid = 0

Subopdrachten

Zodra u perf heeft geïnstalleerd, kunt u naar de manpagina ervan gaan voor een lijst met beschikbare subcommando's (u kunt subcommando's zien als speciale opties die een specifiek venster in het systeem openen). Voor de beste en completere resultaten gebruikt u perf als root of via sudo.

Perf-lijst

perf list (zonder opties) retourneert alle symbolische gebeurtenistypen (lange lijst). Als je de lijst met evenementen wilt bekijken die beschikbaar zijn in een specifieke categorie, gebruik dan de perf lijst gevolgd door de categorienaam ([hw|sw|cache|tracepoint|pmu|event_glob ]), zoals:

Lijst met vooraf gedefinieerde softwaregebeurtenissen in Linux weergeven:

perf list sw 

Prestatiestat

perf stat voert een opdracht uit en verzamelt Linux-prestatiestatistieken tijdens de uitvoering van een dergelijke opdracht. Wat gebeurt er in ons systeem als we dd uitvoeren?

perf stat dd if=/dev/zero of=test.iso bs=10M count=1

De hierboven getoonde statistieken geven onder meer het volgende aan:

  1. De uitvoering van de opdracht dd kostte 21,812281 milliseconden CPU. Als we dit getal delen door de waarde voor 'verstreken seconden' hieronder (23,914596 milliseconden), levert dit 0,912 op (gebruikte CPU).
  2. Terwijl de opdracht werd uitgevoerd, geven 15 contextschakelaars (ook wel processchakelaars genoemd) aan dat de CPU's 15 keer van het ene proces (of thread) naar het andere zijn overgeschakeld.
  3. 2 CPU-migraties zijn het verwachte resultaat wanneer bij een 2-core CPU de werklast gelijkmatig wordt verdeeld over het aantal cores.
    Gedurende die tijd (21,812281 milliseconden) bedroeg het totale aantal verbruikte CPU-cycli 62.025.623, wat gedeeld door 0,021812281 seconden oplevert 2,843 GHz.
  4. Als we het aantal cycli delen door het totale aantal instructies, krijgen we 4,9 cycli per instructie, wat betekent dat elke instructie (gemiddeld) bijna 5 CPU-cycli in beslag nam. We kunnen dit (althans gedeeltelijk) wijten aan het aantal branches en branch-missers (zie hieronder), waardoor CPU-cycli worden verspild of misbruikt.
  5. Toen de opdracht werd uitgevoerd, werden er in totaal 3.552.630 vertakkingen aangetroffen. Dit is de weergave op CPU-niveau van beslissingspunten en lussen in de code. Hoe meer vertakkingen, hoe lager de prestatie. Om dit te compenseren proberen alle moderne CPU's de stroom die de code zal doorlopen te voorspellen. 51.348 branch-missers geven aan dat de voorspellingsfunctie 1,45% van de tijd onjuist was.

Hetzelfde principe is van toepassing op het verzamelen van statistieken (of met andere woorden: profilering) terwijl een applicatie actief is. Start eenvoudigweg de gewenste applicatie en sluit deze na een redelijke periode (wat u zelf kunt bepalen), waarna perf de statistieken op het scherm zal weergeven. Door deze statistieken te analyseren, kunt u potentiële problemen identificeren.

Perf top

perf top is vergelijkbaar met top command, in die zin dat het een bijna realtime systeemprofiel weergeeft (ook bekend als live-analyse).

Met de optie -a geeft u alle bekende gebeurtenistypen weer, terwijl u met de optie -e een specifieke gebeurteniscategorie kunt kiezen (zoals geretourneerd door prestatielijst):

Zal alle cycligebeurtenissen weergeven.

perf top -a 

Toont alle CPU-klokgerelateerde gebeurtenissen.

perf top -e cpu-clock 

De eerste kolom in de bovenstaande uitvoer vertegenwoordigt het percentage monsters dat is genomen sinds het begin van de run, gegroepeerd op functiesymbool en gedeeld object. Er zijn meer opties beschikbaar in man perf-top.

Perf-record

perf record voert een opdracht uit en slaat de statistische gegevens op in een bestand met de naam perf.data in de huidige werkmap. Het werkt op dezelfde manier als perf stat.

Typ perf record gevolgd door een opdracht:

perf record dd if=/dev/null of=test.iso bs=10M count=1

Perf-rapport

perf report formatteert de gegevens verzameld in perf.data hierboven in een prestatierapport:

sudo perf report

Alle bovenstaande subopdrachten hebben een speciale manpagina die kan worden aangeroepen als:

man perf-subcommand

waarbij subcommando lijst, stat, top, record of is >rapport. Dit zijn de meest gebruikte subopdrachten; andere worden vermeld in de documentatie (zie het gedeelte Samenvatting voor de link).

Samenvatting

In deze handleiding hebben we u kennis laten maken met perf, een prestatiebewakings- en analysetool voor Linux. We raden u ten zeerste aan om vertrouwd te raken met de documentatie die wordt bijgehouden op https://perf.wiki.kernel.org.

Als u toepassingen tegenkomt die een hoog percentage bronnen verbruiken, kunt u overwegen de broncode aan te passen of andere alternatieven te gebruiken.

Als u vragen heeft over dit artikel of suggesties voor verbetering, zijn wij een en al oor. Neem gerust contact met ons op via het onderstaande reactieformulier.