Recherche de site Web

Perf - Un outil de surveillance et d'analyse des performances pour Linux


Lorsque nous parlons de performance en informatique, nous faisons référence à la relation entre nos ressources et les tâches qu'elles nous permettent d'accomplir dans un laps de temps donné.

À une époque de concurrence acharnée entre les entreprises, il est important que nous apprenions à utiliser ce dont nous disposons au mieux de ses capacités. Le gaspillage de ressources matérielles ou logicielles, ou l’incapacité de savoir comment les utiliser plus efficacement, finit par être une perte que nous ne pouvons tout simplement pas nous permettre si nous voulons être au sommet de notre forme.

Dans le même temps, nous devons veiller à ne pas pousser nos ressources jusqu’à une limite où une utilisation soutenue entraînerait des dommages irréparables.

Dans cet article, nous vous présenterons un outil d'analyse des performances relativement nouveau et vous fournirons des conseils que vous pouvez utiliser pour surveiller vos systèmes Linux, y compris le matériel et les applications. Cela vous aidera à garantir qu'ils fonctionnent de manière à ce que vous soyez capable de produire les résultats souhaités sans gaspiller de ressources ni votre propre énergie.

Présentation et installation de Perf sous Linux

Entre autres, Linux fournit un outil de surveillance et d'analyse des performances appelé commodément perf. Alors, qu'est-ce qui distingue perf des autres outils bien connus que vous connaissez déjà ?

La réponse est que perf donne accès à l'unité de surveillance des performances du processeur, et nous permet ainsi d'examiner de près le comportement du matériel et ses événements associés.

En outre, il peut également surveiller les événements logiciels et créer des rapports à partir des données collectées.

Vous pouvez installer perf dans les distributions basées sur RPM avec :

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

Dans Debian et ses dérivés :

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

Si uname -r dans la commande ci-dessus renvoie des chaînes supplémentaires en plus de la version réelle (3.2.0-23-generic dans mon cas), vous devrez peut-être taper linux-tools-3.2.0-23 au lieu d'utiliser la sortie de uname.

Il est également important de noter que perf donne des résultats incomplets lorsqu'il est exécuté dans un invité sur VirtualBox ou VMWare, car ils ne permettent pas d'accéder aux compteurs matériels comme le font d'autres technologies de virtualisation (telles que KVM ou XEN). .

De plus, gardez à l'esprit que certaines commandes perf peuvent être limitées à root par défaut, qui peuvent être désactivées (jusqu'à ce que le système soit redémarré) en faisant :

echo 0 > /proc/sys/kernel/perf_event_paranoid

Si vous devez désactiver le mode paranoïaque de manière permanente, mettez à jour le paramètre suivant dans le fichier /etc/sysctl.conf.

kernel.perf_event_paranoid = 0

Sous-commandes

Une fois que vous avez installé perf, vous pouvez vous référer à sa page de manuel pour une liste des sous-commandes disponibles (vous pouvez considérer les sous-commandes comme des options spéciales qui ouvrent une fenêtre spécifique dans le système). Pour des résultats optimaux et plus complets, utilisez perf soit en tant que root, soit via sudo.

Liste des performances

perf list (sans options) renvoie tous les types d'événements symboliques (longue liste). Si vous souhaitez afficher la liste des événements disponibles dans une catégorie spécifique, utilisez la liste perf suivie du nom de la catégorie ([hw|sw|cache|tracepoint|pmu|event_glob ]), tel que:

Afficher la liste des événements prédéfinis par logiciel sous Linux :

perf list sw 

Statistique de performances

perf stat exécute une commande et collecte des statistiques de performances Linux lors de l'exécution d'une telle commande. Que se passe-t-il dans notre système lorsque nous exécutons dd ?

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

Les statistiques présentées ci-dessus indiquent, entre autres :

  1. L'exécution de la commande dd a pris 21,812281 millisecondes de CPU. Si nous divisons ce nombre par la valeur « secondes de temps écoulé » ci-dessous (23,914596 millisecondes), cela donne 0,912 (CPU utilisé).
  2. Pendant l'exécution de la commande, 15 commutateurs de contexte (également appelés commutateurs de processus) indiquent que les processeurs ont été basculés 15 fois d'un processus (ou thread) à un autre.
  3. 2 migrations de processeurs sont le résultat attendu lorsque, dans un processeur à 2 cœurs, la charge de travail est répartie uniformément entre le nombre de cœurs.
    Pendant cette période (21,812281 millisecondes), le nombre total de cycles CPU consommés était de 62 025 623, ce qui divisé par 0,021812281 secondes donne 2,843 GHz.
  4. Si nous divisons le nombre de cycles par le nombre total d'instructions, nous obtenons 4,9 cycles par instruction, ce qui signifie que chaque instruction a nécessité près de 5 cycles CPU (en moyenne). Nous pouvons attribuer cela (au moins en partie) au nombre de branches et d'échecs de branchement (voir ci-dessous), qui finissent par gaspiller ou utiliser à mauvais escient les cycles du processeur.
  5. Lors de l'exécution de la commande, un total de 3 552 630 branches ont été rencontrées. Il s'agit de la représentation au niveau CPU des points de décision et des boucles dans le code. Plus il y a de branches, plus les performances sont faibles. Pour compenser cela, tous les processeurs modernes tentent de prédire le flux que prendra le code. 51 348 échecs de branchement indiquent que la fonction de prédiction était erronée 1,45 % du temps.

Le même principe s'applique à la collecte de statistiques (ou en d'autres termes, au profilage) pendant l'exécution d'une application. Lancez simplement l'application souhaitée et après un délai raisonnable (qui dépend de vous) fermez-la, et perf affichera les statistiques à l'écran. En analysant ces statistiques, vous pouvez identifier les problèmes potentiels.

Haut de performance

perf top est similaire à la commande top, dans le sens où elle affiche un profil système presque en temps réel (également appelé analyse en direct).

Avec l'option -a vous afficherez tous les types d'événements connus, tandis que l'option -e vous permettra de choisir une catégorie d'événement spécifique (telle que renvoyée par liste des performances) :

Affichera tous les événements de cycles.

perf top -a 

Affichera tous les événements liés à l'horloge du processeur.

perf top -e cpu-clock 

La première colonne du résultat ci-dessus représente le pourcentage d'échantillons prélevés depuis le début de l'analyse, regroupés par symbole de fonction et objet partagé. Plus d'options sont disponibles dans man perf-top.

Record de performances

perf record exécute une commande et enregistre les données statistiques dans un fichier nommé perf.data dans le répertoire de travail actuel. Son fonctionnement est similaire à statistiques de performances.

Tapez perf record suivi d'une commande :

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

Rapport de performances

Le rapport de performances formate les données collectées dans perf.data ci-dessus dans un rapport de performances :

sudo perf report

Toutes les sous-commandes ci-dessus ont une page de manuel dédiée qui peut être invoquée comme :

man perf-subcommand

sous-commande est soit list, stat, top, record ou rapport. Ce sont les sous-commandes les plus fréquemment utilisées ; d'autres sont répertoriés dans la documentation (reportez-vous à la section Résumé pour le lien).

Résumé

Dans ce guide, nous vous avons présenté perf, un outil de surveillance et d'analyse des performances pour Linux. Nous vous encourageons fortement à vous familiariser avec sa documentation qui est conservée sur https://perf.wiki.kernel.org.

Si vous trouvez des applications qui consomment un pourcentage élevé de ressources, vous pouvez envisager de modifier le code source ou d'utiliser d'autres alternatives.

Si vous avez des questions sur cet article ou des suggestions d’amélioration, nous sommes tout ouïe. N'hésitez pas à nous contacter en utilisant le formulaire de commentaires ci-dessous.