Perf (Linux)

Perf
Informations
Écrit en c
Système d'exploitation LinuxVoir et modifier les données sur Wikidata
Environnement Noyau Linux
Formats lus Linux perf file format (d)Voir et modifier les données sur Wikidata
Formats écrits Linux perf file format (d)Voir et modifier les données sur Wikidata
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.

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 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).

Sous-commandes

L'outil perf est utilisé avec plusieurs sous-commandes :

Commande Objectif
statMesurer le nombre total d'événements pour un seul programme ou pour le système pendant un certain temps.
topAvoir une vue dynamique de type top des fonctions les plus utilisées.
recordMesurer et enregistrer les données d'échantillonnage pour un seul programme. Les données sont ensuite consultables par la commande perf report.
reportAnalyser le fichier généré par perf record. Cette sous-commande peut générer un profil plat ou graphique.
annotateAnnoter les sources ou l'assemblage.
schedTracer/mesurer des actions de l'ordonnanceur et des latences.
listLister 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

Notes

  1. ↑ running average power limit RAPL

Références

  1. ↑ (en) Vince Weaver, « The Unofficial Linux Perf Events Web-Page » (consulté le )
  2. ↑ (en) Vince Weaver, « Linux perf event Features and Overhead : 2013 FastPath Workshop » [PDF], (consulté le )
  3. ↑ Jake Edge, « Perfcounters added to the mainline », sur Lwn.net, (consulté le ) : « perfcounters being included into the mainline during the recently completed 2.6.31 merge window »
  4. ↑ (en) Arnaldo Carvalho de Melo, « The New Linux ’perf’ tools - presentation from Linux Kongress »(Archive.org • Wikiwix • Que faire ?) [PDF],
  5. ↑ (en) A. Zanella et R. Arnold, « Evaluate performance for Linux on POWER. Analyze performance using Linux tools »(Archive.org • Wikiwix • Que faire ?), IBM DeveloperWorks Technical library,
  6. 1 2 3 (en) Roberto A. Vitillo, « Performance tools developments » [PDF], (consulté le )
  7. ↑ System Programming Guide, juin 2009, p. 19-2
  8. ↑ (en) Jake Edge, « Lots of new perf features », sur Lwn.net,
  9. ↑ (en) Jacob Pan, « RAPL (Running Average Power Limit) driver », sur Lwn.net,
  10. ↑ (en) « kernel/git/torvalds/linux.git - Linux kernel source tree », sur Git.kernel.org,
  11. ↑ (en) « 6.4. Performance Counters for Linux (PCL) Tools and perf », sur RHEL Developer Guide
  12. ↑ (en) « Debian - Details of package linux-tools-2.6.32 in squeeze », sur Packages.debian.org (consulté le )
  13. ↑ (en) « perf record - Linux man page », sur die.net (consulté le )
  14. ↑ (en) « perf report - Linux man page », sur die.net (consulté le )
  15. ↑ (en) Ingo Molnar, « 'perf sched': Utility to capture, measure and analyze scheduler latencies and behavior », sur Lwn.net,
  16. ↑ (en) Bojan Nikolic, « How to monitor the full range of CPU performance events »,
  17. 1 2 (en) Robert Haas, « perf: the good, the bad, the ugly »,
  18. ↑ (en) Michael Larabel, « New Linux Kernel Vulnerability Exploited », sur Phoronix,
  19. ↑ (en) Corbet, « Local root vulnerability in the kernel », sur LWN,
  20. ↑ (en) « Perf events and tool security », sur The Linux Kernel (consulté le )

Bibliographie

Liens externes