Interfaces graphiques

Bien que perf fournisse en standard quelques interfaces graphiques, celles-ci sont… hautement oubliables, et l’on est généralement bien plus avisé d’utiliser les outils en ligne de commande.

Toutefois, ce fort accent sur la ligne de commande peut rebuter certains publics, et plus particulièrement des personnes qui ne sont pas informaticiennes de métier ou de vocation.

Dans cette annexe, nous allons donc interfaces graphiques pour utiliser perf et plus particulièrement visualiser les données produites.

Hotspot

Quand on fait une recherche sur internet à la recherche d’une interface graphique pour perf, l’un des premiers résultats sur lequel on tombe est Hotspot de KDAB.

Malheureusement, ce n’est pas le choix que je recommanderais en première intention, car il n’utilise pas le moteur de perf pour lire les fichiers perf.data mais une bibliothèque maison, appelée perfparser. Or, mon expérience est que la compatibilité de cette bibliothèque avec les fichiers produits par perf est très imparfaite, particulièrement dans le domaine des graphes d’appels, ce qui conduit à observer des profils corrompus là où perf report aurait produit de bons résultats.

La fonction de capture de données est également minimaliste et peu compatible avec un usage sur serveur (application Qt sans version ligne de commande), donc on gagnera à enregistrer les données avec une commande perf record manuelle et à n’utiliser Hotspot que pour la visualisation. Les auteurs fournissent des instructions pour cela sur leur README.

Si l’on oublie ces deux limites, Hotspot fournit bien les fonctionnalités essentielles d’une interface graphique pour visualiser des données issues de perf record :

  • Visualisation hiérarchique d’un graphe d’appels (flame graph).
  • Visualisation temporelle des instants où des échantillons ont été enregistrés (ce qui permet d’identifier facilement des moments où l’application n’utilise pas les CPUs : E/S, attente d’un mutex ou processus fils…) avec possibilité de “zoomer” facilement sur une fenêtre de temps.
  • Possibilité de parcourir facilement le graphe d’appels dans les deux sens (vers les appelants et vers les appelés), alors qu’avec perf report il faut plusieurs commandes.

En revanche, on n’aura pas accès à des fonctions plus avancées de perf report comme la visualisation d’assembleur annoté, l’affichage configurable (option --sort). Et le support des tracepoints est anecdotique. Ne vous attendez donc pas à remplacer perf report à 100%…

Firefox Profiler

Si l’on accepte le constat qu’il n’existe pas, à l’heure actuelle, de bonne interface graphique pour effectuer des mesures avec perf, seulement pour les visualiser, Firefox Profiler est intéressant.

Bien que cet outil soit à la base pensé pour le profilage de sites web, il est possible d’y importer des profils perf avec des résultats plutôt satisfaisants. Voici un exemple issu de l’expérience Belle 2.

Comme Hotspot, Firefox Profiler supporte la visualisation en flame graph, en ligne temporelle, et en graphe d’appels bidirectionnel. Et comme Hotspot, Firefox Profiler ne supporte pas les fonctionnalités plus avancées de perf report (assembleur annoté, tracepoints, …).

En revanche…

  • Le décodage des fichiers perf.data est effectué avec perf lui-même, donc la visualisation est rigoureusement identique à ce qu’aurait produit perf report.
  • La visualisation en ligne temporelle est plus ergonomique qu’avec Hotspot, il suffit notamment de passer la souris dessus pour visualiser un échantillon des piles d’appels à un instant T.
  • Les menus contextuels (par clic droit) sont très puissants, et permettent notamment de cacher facilement des étapes de la pile d’appels non pertinentes pour l’analyse effectuée afin de rendre la visualisation plus claire pour le non initié.
  • Et surtout, la possibilité de partager facilement son profil en ligne sur une instance hébergée par Mozilla est très précieuse dans les collaborations, particulièrement quand on doit échanger avec des utilisateurs d’autres systèmes d’exploitation. En effet, la plupart des autres interfaces graphiques pour visualiser des profils perf sont soit spécifiques à Linux, soit des applications web à installer sur son propre serveur avec toute la lourdeur que cela entraîne.

Autres applications web

Pour explorer quelques autres options, incluant SysProf du projet GNOME (que je ne détaille pas ici car il est vraiment trop basique en termes de fonctionnalité par rapport aux deux autres) et l’import de profils perf dans KCacheGrind, vous pouvez consulter la page suivante : https://www.markhansen.co.nz/profiler-uis/.