perf (Linux)

Un article de Wikipédia, l'encyclopédie libre.

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 [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[modifier | modifier le code]

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[modifier | modifier le code]

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[modifier | modifier le code]

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é[modifier | modifier le code]

Le sous-système perf des noyaux Linux de 2.6.37 à 3.8.8 et du noyau 2.6.32 de RHEL6 contenait une vulnérabilité de sécurité (CVE-2013-2094), qui a été exploitée pour obtenir les privilèges root par un utilisateur local. Le problème était dû à l'utilisation d'un type incorrect (32-bit int au lieu de 64-bit) dans le chemin de code de vérification event_id.

Articles connexes[modifier | modifier le code]

Références[modifier | modifier le code]

  1. Vince Weaver, The Unofficial Linux Perf Events Web-Page
  2. Linux perf event Features and Overhead // 2013 FastPath Workshop, Vince Weaver
  3. 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"
  4. Arnaldo Carvalho de Melo, The New Linux ’perf’ tools, presentation from Linux Kongress, September, 2010
  5. A. Zanella, R. Arnold. Evaluate performance for Linux on POWER. Analyze performance using Linux tools, 12 Jun 2012 // IBM DeveloperWorks Technical library
  6. a et b Roberto A. Vitillo (LBNL). PERFORMANCE TOOLS DEVELOPMENTS, 16 June 2011, presentation from "Future computing in particle physics" conference
  7. 6.4. Performance Counters for Linux (PCL) Tools and perf // RHEL Developer Guide
  8. « Debian - Details of package linux-tools-2.6.32 in squeeze », Packages.debian.org (consulté le )
  9. (en) Urs Fässler, « perf file format » [archive du ] [PDF], sur cern.ch, .
  10. Ingo Molnar, 'perf sched': Utility to capture, measure and analyze scheduler latencies and behavior, 17 Sep 2009
  11. How to monitor the full range of CPU performance events // Bojan Nikolic, 2012
  12. a et b Robert Haas (PostgreSQL), perf: the good, the bad, the ugly // June 06, 2012

Liens externes[modifier | modifier le code]