perf (parfois appelé perf_events ou perf tools, à l'origine Performance Counters for Linux, PCL ) est un outil d'analyse des performances sous Linux, disponible à partir de la du noyau Linux en 2009. L'utilitaire de contrôle de l'espace utilisateur, nommé perf, est accessible depuis la ligne de commande et fournit un certain nombre de sous-commandes. Il est capable de profiler statistiquement l'ensemble du système (à la fois noyau et code utilisateur).
Il prend en charge les compteurs de performances matériels, les points de trace, les compteurs de performances logiciels (par exemple, hrtimer) et les sondes dynamiques (par exemple, kprobes ou uprobes). En 2012, deux ingénieurs d'IBM ont reconnu perf (avec OProfile) comme l'un des deux outils de profilage de compteur de performances les plus couramment utilisés sous Linux.
Mise en œuvre L'interface entre l'utilitaire perf et le noyau consiste en un seul appel système et se fait via un descripteur de fichier et une région de mémoire mappée. Contrairement à LTTng ou aux anciennes versions de OProfile, aucun démon de service n'est nécessaire, car la plupart des fonctionnalités sont intégrées au noyau. L'utilitaire perf vide les données brutes du tampon mappé sur le disque lorsque le tampon est plein. Selon R. Vitillo, le profilage effectué par perf implique un surcoût très faible.
En 2010, les architectures qui supportent les compteurs matériels sont : x86, PowerPC64, UltraSPARC (III et IV), ARM (v5, v6, v7, Cortex-A8 et -A9), Alpha EV56 et SuperH. L'utilisation des enregistrements de la dernière branche, une implémentation de traçage de branche disponible dans les CPU Intel depuis le Pentium 4, est disponible sous forme de patch. Depuis la de la ligne principale du noyau Linux, publiée le , perf prend également en charge la limite de puissance moyenne d'exécution pour les mesures de consommation d'énergie, qui est disponible en tant que fonctionnalité de certaines CPU Intel . . Perf est pris en charge nativement dans de nombreuses distributions Linux populaires, y compris Red Hat Enterprise Linux (depuis sa publiée en 2010) et Debian dans le paquet linux-tools-common (depuis Debian 6.0 (Squeeze) sorti en 2011).
Sous-commandes L'outil perf est utilisé avec plusieurs sous-commandes :
Commande Objectif stat Mesurer le nombre total d'événements pour un seul programme ou pour le système pendant un certain temps. top Avoir une vue dynamique de type top des fonctions les plus utilisées. record Mesurer et enregistrer les données d'échantillonnage pour un seul programme. Les données sont ensuite consultables par la commande perf report. report Analyser le fichier généré par perf record. Cette sous-commande peut générer un profil plat ou graphique. annotate Annoter les sources ou l'assemblage. sched Tracer/mesurer des actions de l'ordonnanceur et des latences. list Lister les événements disponibles.
Critiques La documentation de perf n'est pas très détaillée (à partir de 2014). Par exemple, il ne documente pas la plupart des événements ou n'explique pas leurs alias (souvent des outils externes sont utilisés pour obtenir des noms et des codes d'événements). Les outils de performance ne peuvent pas non plus établir de profil basé sur l'heure réelle de l'horloge murale.
Sécurité Le sous-système perf des noyaux Linux de 2.6.37 à 3.8.8 et du noyau RHEL6 2.6.32 contenait une vulnérabilité de sécurité (CVE|2013-2094), qui pouvait être exploitée pour obtenir des privilèges root par un utilisateur local.
L’utilisation de perf pouvait permettre l'accès non autorisé aux données sensibles qui se trouvent dans la mémoire utilisée par les process surveillés.
Articles connexes Liste des outils d'analyse de performance OProfil Interface de programmation d'applications de performances Profilage (programmation informatique)
Notes
Références
Bibliographie
Liens externes
wiki de perf sur kernel.org Profilage du noyau Linux avec tutoriel perf Tableaux de prise en charge du matériel PMU - vérifiez la colonne perf_event Exemples de performances par Brendan Gregg
Catégorie:Noyau Linux