| Écrit en | c |
|---|---|
| Système d'exploitation | Linux |
| Environnement | Noyau Linux |
| Formats lus | Linux perf file format (d) |
| Formats écrits | Linux perf file format (d) |
| Licence | GNU GPL |
| Site web | perf.wiki.kernel.org/index.php/Main_Page |
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 version 2.6.31 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.
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 version 3.14 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 version 6 publiée en 2010) et Debian dans le paquet linux-tools-common (depuis Debian 6.0 (Squeeze) sorti en 2011).
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. |
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.
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.