perf (parfois appelé perf_events[1] ou perf tools, à l'origine Performance Counters for Linux, PCL ) [2] est un outil d'analyse des performances sous Linux, disponible à partir de la version 2.6.31 du noyau Linux en 2009[3]. 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)[4]. 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[5].
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[6]. 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 ( LBNL ), le profilage effectué par perf implique un surcoût très faible[6].
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. Utilise les 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 31 mars 2014, perf prend également en charge la limite de puissance moyenne d'exécution (RAPL) pour les mesures de consommation d'énergie, qui est disponible en tant que fonctionnalité de certains 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) [7] et Debian dans le paquet linux-tools-common (depuis Debian 6.0 (Squeeze) sorti en 2011)[8].
Sous-commandes
perf est utilisé avec plusieurs sous-commandes :
stat : mesure le nombre total d'événements pour un seul programme ou pour le système pendant un certain temps
top : vue dynamique de type top des fonctions les plus chaudes
record : mesure et enregistre les données d'échantillonnage pour un seul programme
report : analyse le fichier généré par perf record ; peut générer un profil plat ou graphique[9].
annotate : annoter les sources ou l'assemblage
sched : trace/mesure des actions de l'ordonnanceur et des latences [10]
list : liste les événements disponibles
Critique
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)[11],[12]. Les outils de performance ne peuvent pas non plus établir de profil basé sur l'heure réelle de l'horloge murale[12].
Sécurité
L’utilisation de perf peut permettre l'accès non autorisé aux données sensibles qui se trouvent dans la mémoire utilisée par les process surveillés[13].
↑Jake Edge, Perfcounters added to the mainline, LWN July 1, 2009, "perfcounters being included into the mainline during the recently completed 2.6.31 merge window"