Perf- Εργαλείο παρακολούθησης και ανάλυσης απόδοσης για Linux


Όταν μιλάμε για απόδοση στους υπολογιστές, αναφερόμαστε στη σχέση μεταξύ των πόρων μας και των εργασιών που μας επιτρέπουν να ολοκληρώσουμε σε μια δεδομένη χρονική περίοδο.

Σε μια μέρα σκληρού ανταγωνισμού μεταξύ εταιρειών, είναι σημαντικό να μάθουμε πώς να χρησιμοποιούμε όσα έχουμε στο μέγιστο των δυνατοτήτων τους. Η σπατάλη πόρων υλικού ή λογισμικού ή η έλλειψη ικανότητας να γνωρίζουμε πώς να τα χρησιμοποιούμε πιο αποτελεσματικά, καταλήγει να είναι μια απώλεια που απλά δεν μπορούμε να αντέξουμε οικονομικά αν θέλουμε να είμαστε στην κορυφή του παιχνιδιού μας.

Ταυτόχρονα, πρέπει να προσέχουμε να μην φέρουμε τους πόρους μας σε ένα όριο όπου η διαρκής χρήση θα επιφέρει ανεπανόρθωτη ζημιά.

Σε αυτό το άρθρο θα σας παρουσιάσουμε ένα σχετικά νέο εργαλείο ανάλυσης απόδοσης και θα παρέχουμε συμβουλές που μπορείτε να χρησιμοποιήσετε για την παρακολούθηση των συστημάτων σας Linux, συμπεριλαμβανομένου υλικού και εφαρμογών. Αυτό θα σας βοηθήσει να διασφαλίσετε ότι λειτουργούν έτσι ώστε να είστε σε θέση να παράγετε τα επιθυμητά αποτελέσματα χωρίς να σπαταλάτε πόρους ή τη δική σας ενέργεια.

Εισαγωγή και εγκατάσταση του Perf στο Linux

Μεταξύ άλλων, το Linux παρέχει ένα εργαλείο παρακολούθησης και ανάλυσης απόδοσης που ονομάζεται βολικά perf. Τι ξεχωρίζει λοιπόν το perf από άλλα γνωστά εργαλεία με τα οποία είστε ήδη εξοικειωμένοι;

Η απάντηση είναι ότι το perf παρέχει πρόσβαση στη Μονάδα Παρακολούθησης Απόδοσης της CPU, και έτσι μας επιτρέπει να έχουμε μια προσεκτική ματιά στη συμπεριφορά του υλικού και των σχετικών συμβάντων.

Επιπλέον, μπορεί επίσης να παρακολουθεί συμβάντα λογισμικού και να δημιουργεί αναφορές από τα δεδομένα που συλλέγονται.

Μπορείτε να εγκαταστήσετε το perf σε διανομές που βασίζονται σε RPM με:

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

Στο Debian και σε παράγωγα:

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

Εάν το uname -r στην παραπάνω εντολή επιστρέφει επιπλέον συμβολοσειρές εκτός από την πραγματική έκδοση (3.2.0-23-generic στην περίπτωσή μου), ίσως χρειαστεί να πληκτρολογήσετε linux-tools-3.2.0-23 αντί να χρησιμοποιήσετε την έξοδο του uname.

Είναι επίσης σημαντικό να σημειωθεί ότι το perf αποφέρει ελλιπή αποτελέσματα όταν εκτελείται σε έναν επισκέπτη πάνω από το VirtualBox ή το VMWare, καθώς δεν επιτρέπουν την πρόσβαση σε μετρητές υλικού όπως άλλες τεχνολογίες εικονικοποίησης (όπως το KVM ή το XEN). .

Επιπλέον, έχετε υπόψη σας ότι ορισμένες εντολές perf ενδέχεται να περιορίζονται στο root από προεπιλογή, το οποίο μπορεί να απενεργοποιηθεί (μέχρι να γίνει επανεκκίνηση του συστήματος) κάνοντας:

echo 0 > /proc/sys/kernel/perf_event_paranoid

Εάν πρέπει να απενεργοποιήσετε οριστικά τη λειτουργία παρανοϊκής, ενημερώστε την ακόλουθη ρύθμιση στο αρχείο /etc/sysctl.conf.

kernel.perf_event_paranoid = 0

Υποεντολές

Αφού εγκαταστήσετε το perf, μπορείτε να ανατρέξετε στη σελίδα man για μια λίστα με τις διαθέσιμες υποεντολές (μπορείτε να σκεφτείτε τις υποεντολές ως ειδικές επιλογές που ανοίγουν ένα συγκεκριμένο παράθυρο στο σύστημα). Για καλύτερα και πληρέστερα αποτελέσματα, χρησιμοποιήστε το perf είτε ως root είτε μέσω του sudo.

Perf list

Η λίστα perf (χωρίς επιλογές) επιστρέφει όλους τους τύπους συμβολικών συμβάντων (μακριά λίστα). Εάν θέλετε να δείτε τη λίστα με τα συμβάντα που είναι διαθέσιμα σε μια συγκεκριμένη κατηγορία, χρησιμοποιήστε τη λίστα perf ακολουθούμενη από το όνομα της κατηγορίας ([hw|sw|cache|tracepoint|pmu|event_glob ]), όπως:

Εμφάνιση λίστας προκαθορισμένων συμβάντων λογισμικού στο Linux:

perf list sw 

Perf stat

Το perf stat εκτελεί μια εντολή και συλλέγει στατιστικά στοιχεία απόδοσης Linux κατά την εκτέλεση αυτής της εντολής. Τι συμβαίνει στο σύστημά μας όταν εκτελούμε dd;

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

Τα στατιστικά που εμφανίζονται παραπάνω δείχνουν μεταξύ άλλων:

  1. Η εκτέλεση της εντολής dd χρειάστηκε 21,812281 χιλιοστά του δευτερολέπτου της CPU. Εάν διαιρέσουμε αυτόν τον αριθμό με την τιμή "δευτερόλεπτα που πέρασε" κάτω από (23,914596 χιλιοστά του δευτερολέπτου), προκύπτει 0,912 (χρησιμοποιείται CPU).
  2. Ενώ εκτελούνταν η εντολή, 15 διακόπτες περιβάλλοντος (γνωστοί και ως διακόπτες διεργασίας) υποδεικνύουν ότι οι CPU άλλαξαν 15 φορές από τη μια διεργασία (ή το νήμα) σε μια άλλη.
  3. 2 Οι μετεγκαταστάσεις CPU είναι το αναμενόμενο αποτέλεσμα όταν σε μια CPU 2 πυρήνων ο φόρτος εργασίας κατανέμεται ομοιόμορφα μεταξύ του αριθμού των πυρήνων.
    Κατά τη διάρκεια αυτού του χρόνου (21,812281 χιλιοστά του δευτερολέπτου), ο συνολικός αριθμός των κύκλων CPU που καταναλώθηκαν ήταν 62.025.623, ο οποίος διαιρούμενος με 0,021812281 δευτερόλεπτα δίνει 2.843GHz.
  4. Αν διαιρέσουμε τον αριθμό των κύκλων με το συνολικό πλήθος εντολών, λαμβάνουμε 4,9 Κύκλοι ανά εντολή, που σημαίνει ότι κάθε εντολή χρειάστηκε σχεδόν 5 κύκλους CPU για να ολοκληρωθεί (κατά μέσο όρο). Μπορούμε να κατηγορήσουμε για αυτό (τουλάχιστον εν μέρει) τον αριθμό των διακλαδώσεων και των διακλαδώσεων (βλ. παρακάτω), που καταλήγουν σε σπατάλη ή κακή χρήση κύκλων CPU.
  5. Κατά την εκτέλεση της εντολής, συναντήθηκαν συνολικά 3.552.630 κλάδοι. Αυτή είναι η αναπαράσταση σε επίπεδο CPU των σημείων απόφασης και των βρόχων στον κώδικα. Όσο περισσότερα κλαδιά, τόσο χαμηλότερη είναι η απόδοση. Για να αντισταθμιστεί αυτό, όλες οι σύγχρονες CPU προσπαθούν να προβλέψουν τη ροή που θα λάβει ο κώδικας. 51.348 παραλείψεις διακλάδωσης υποδηλώνουν ότι η δυνατότητα πρόβλεψης ήταν λάθος 1,45% του χρόνου.

Η ίδια αρχή ισχύει για τη συλλογή στατιστικών στοιχείων (ή με άλλα λόγια, τη δημιουργία προφίλ) ενώ εκτελείται μια εφαρμογή. Απλώς εκκινήστε την επιθυμητή εφαρμογή και μετά από ένα εύλογο χρονικό διάστημα (το οποίο εξαρτάται από εσάς) κλείστε την και το perf θα εμφανίσει τα στατιστικά στοιχεία στην οθόνη. Αναλύοντας αυτά τα στατιστικά στοιχεία, μπορείτε να εντοπίσετε πιθανά προβλήματα.

Perf top

Το perf top είναι παρόμοιο με την εντολή top, καθώς εμφανίζει ένα προφίλ συστήματος σχεδόν σε πραγματικό χρόνο (γνωστό και ως ζωντανή ανάλυση).

Με την επιλογή -a θα εμφανίσετε όλους τους γνωστούς τύπους συμβάντων, ενώ η επιλογή -e θα σας επιτρέψει να επιλέξετε μια συγκεκριμένη κατηγορία συμβάντος (όπως επιστρέφεται από το perf list):

Θα εμφανίσει το συμβάν όλων των κύκλων.

perf top -a 

Θα εμφανίσει όλα τα συμβάντα που σχετίζονται με το cpu-clock.

perf top -e cpu-clock 

Η πρώτη στήλη στην παραπάνω έξοδο αντιπροσωπεύει το ποσοστό των δειγμάτων που ελήφθησαν από την αρχή της εκτέλεσης, ομαδοποιημένα κατά συνάρτηση Σύμβολο και Κοινόχρηστο αντικείμενο. Περισσότερες επιλογές είναι διαθέσιμες στο man perf-top.

Ρεκόρ Perf

Η εγγραφή perf εκτελεί μια εντολή και αποθηκεύει τα στατιστικά δεδομένα σε ένα αρχείο με το όνομα perf.data μέσα στον τρέχοντα κατάλογο εργασίας. Λειτουργεί παρόμοια με το perf stat.

Πληκτρολογήστε perf record ακολουθούμενο από μια εντολή:

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

Έκθεση Perf

Η αναφορά perf μορφοποιεί τα δεδομένα που συλλέγονται στο perf.data παραπάνω σε μια αναφορά απόδοσης:

sudo perf report

Όλες οι παραπάνω υποεντολές διαθέτουν μια αποκλειστική σελίδα man που μπορεί να γίνει επίκληση ως:

man perf-subcommand

όπου η υποεντολή είναι είτε λίστα, stat, κορυφαίο, εγγραφή ή αναφορά. Αυτές είναι οι πιο συχνά χρησιμοποιούμενες υποεντολές. άλλα παρατίθενται στην τεκμηρίωση (ανατρέξτε στην ενότητα Περίληψη για τον σύνδεσμο).

Περίληψη

Σε αυτόν τον οδηγό σας παρουσιάσαμε το perf, ένα εργαλείο παρακολούθησης και ανάλυσης απόδοσης για Linux. Σας ενθαρρύνουμε ιδιαίτερα να εξοικειωθείτε με την τεκμηρίωσή του που διατηρείται στη διεύθυνση https://perf.wiki.kernel.org.

Εάν βρείτε εφαρμογές που καταναλώνουν υψηλό ποσοστό πόρων, μπορείτε να εξετάσετε το ενδεχόμενο να τροποποιήσετε τον πηγαίο κώδικα ή να χρησιμοποιήσετε άλλες εναλλακτικές λύσεις.

Εάν έχετε ερωτήσεις σχετικά με αυτό το άρθρο ή προτάσεις για βελτίωση, είμαστε όλοι αυτιά. Μη διστάσετε να επικοινωνήσετε μαζί μας χρησιμοποιώντας την παρακάτω φόρμα σχολίων.