Introduction

perf (également appelé perf_events) est un ensemble d’outils pour analyser la performance des systèmes Linux. Ces outils s’appuient sur une infrastructure présente dans le noyau Linux depuis sa version 2.6.31 (2009), avec laquelle ils entretiennent une relation très étroite, les outils perf étant maintenus au sein du code source du noyau Linux. Une analyse à grain fin de l’activité CPU est également possible via des compteurs de performance (Performance Monitoring Unit ou PMU), définis par chaque microarchitecture CPU.

En seulement une dizaine d’années d’existence, perf est devenu une référence dans plusieurs domaines, incluant notamment l’étude à grain fin de l’activité CPU et l’instrumentation dynamique de code noyau et applicatif. Dans ce TP, nous allons explorer les différentes possibilités offertes par perf aujourd’hui (2022), en l’utilisant pour analyser l’exécution de programmes simples mais néanmoins représentatifs des différentes formes d’activité logicielle qu’il sait décortiquer.

Le TP est pensé pour être suivi dans l’ordre, chaque section pouvant ainsi se référer aux informations présentées dans la section précédente. Il se décompose en trois grandes parties :

  • Dans une première partie, nous étudierons les fonctionnalités élémentaires que tout utilisateur de perf devrait connaître, du simple comptage d’événements (perf stat) au profilage de code (perf report) en passant par le suivi d’activité noyau (perf trace).
  • Dans une seconde partie, nous aborderons des fonctionnalités plus avancées, allant du profilage en temps réel du système entier (perf top) à l’analyse détaillée des accès mémoire (perf mem, perf c2c) en passant par l’instrumentation de code arbitraire (perf probe).
  • Enfin, des annexes abordent plusieurs thématiques qui ne sont pas couvertes en TP pour diverses raisons (manque de temps, intérêt plus faible, nécessitent des privilèges trop importants…), mais sont utiles à connaître dans la pratique quotidienne de l’outil.

Le TP est pensé pour être suivi sur srv-calcul-ambulant, nous supposerons donc que vous avez déjà un compte sur cette plate-forme et savez vous en servir. En cas de besoin, une copie de la documentation du serveur est disponible en local à l’URL http://srv-calcul-ambulant/ 🇬🇧, et cette documentation est également publiée sur Internet 🇬🇧.

Si vous souhaitez adapter le TP à une autre plate-forme, son code source est disponible sur https://gitlab.in2p3.fr/grasland/tp-perf sous licence CC-BY-SA 4.0. Le rendu Markdown est assuré par mdBook et les petits programmes utilisés pour les TPs sont stockés dans le répertoire code/.