Critères de tri

Fondamentalement, perf report produit un histogramme : on groupe les échantillons d’activité système observée selon certains critères, pour l’activité CPU c’est par défaut la commande (comm), le binaire (dso) et la fonction (sym) où une activité a été observée. Puis on indique dans quels cas, selon ces critères, on observe le plus d’activité système.

Il est possible, si on le souhaite, de modifier ces critères de tri. Par exemple, on peut demander un histogramme à gros grain, qui ne trie que par commande et par binaire…

perf report --sort comm,dso

Rapport à gros grain

…et on en déduit qu’au plus 39% du temps CPU écoulé est attribuable au code directement écrit dans TPhysics.cpp et TPhysics.hpp, le reste étant passé dans du code de la bibliothèque standard. Autrement dit, si l’on ne modifiait que le code de la simulation sans affecter le nombre et le type d’appels à la bibliothèque standard, le programme irait au mieux 39% plus vite.

(“Au mieux” parce qu’une partie du code de la bibliothèque standard se retrouve inlinée dans TPhysics.bin et ne serait pas affectée par ces manipulations, et aussi parce qu’il faudrait pour atteindre ce gain maximal ramener le temps d’exécution du code métier à zéro.)

A l’inverse, on peut demander un histogramme à grain plus fin, par exemple en demandant pour quelles lignes de code source la plus forte activité système est observée :

perf report --sort comm,dso,sym,srcline

Rapport à grain fin

Ce ne sont que des exemples, bien d’autres critères sont disponibles, notamment le PID (utile pour discriminer le processus source dans des environnements multi-processus) et le TID (pour discriminer le thread source dans des programmes multi-thread). Consultez la partie sur l’option --sort de perf help report pour en savoir plus.

Exercice : Utiliser perf report pour afficher un histogramme où les échantillons sont groupés par binaire et par ligne de code source uniquement.

Vous observerez quelques erreurs de BFD (la bibliothèque issue de binutils utilisée par perf pour manipuler des binaires ELF), qui sont liées au fait que l’interprétation d’informations de déboguage n’est malheureusement pas une science exacte, surtout au niveau du code noyau.

Dans le cas présent, vous pouvez éviter ces erreurs en ne mesurant que l’activité applicative, sans regarder celle du noyau. Il suffit pour cela de relancer la commande perf record en y ajoutant l’option -e cycles:uP (relisez la partie sur perf list si vous avez oublié ce que ce :uP signifie).