perf top

Premier contact

Dans la partie sur perf report, nous avons vu que perf permet d’étudier comment l’utilisation d’une ressources système, par exemple sa consommation de temps CPU, se répartit entre les fonctions d’un programme et des bibliothèques qu’il utilise.

perf top étend ce suivi à l’ensemble des programmes en cours d’exécution sur le système, fournissant en cela une alternative plus détaillée aux moniteurs systèmes traditionnels :

srun --pty perf top

Statistiques perf top

Sur cette capture d’écran, vous voyez la répartition du temps CPU entre les différentes fonctions des applications en cours d’exécution (indicateur [.]) ou du noyau Linux (indicateur [k]). Au moment où cette capture d’écran a été prise, il n’y avait pas d’autre tâche que perf top en cours d’exécution, par conséquent nous voyons surtout la consommation CPU de perf et l’activité noyau associée.

Même si l’analogie avec les outils de monitoring système aide à se faire une première idée, il y a quand même une nuance importante à retenir : contrairement aux outils classiques, perf top affiche par défaut un rapport sur l’ensemble des événements survenus depuis son lancement. Donc si par exemple une tâche qui ne consommait rien se met brusquement à consommer du CPU alors que perf top surveille le CPU depuis longtemps, la sortie de perf top ne va changer que progressivement, puisqu’au début cette nouvelle activité ne représentera qu’une part négligeable du temps CPU utilisé depuis le lancement de perf top. En retour, l’intérêt de cette approche est que sur un système “stationnaire”, la précision des statistiques s’améliorera au fil du temps.

Pour obtenir un comportement plus analogue à celui d’un moniteur système classique, où l’on n’affiche que l’activité système survenue depuis le dernier rafraîchissement de l’affichage, il faut utiliser l’option --zero, qui s’abbrévie en -z et que l’on peut aussi activer avec le raccourci clavier Z quand perf top est déjà en cours d’exécution.

Dans une telle utilisation, on aura souvent intérêt à ajuster aussi le paramètre --delay, abbrévié en -d, qui contrôle la fréquence de rafraîchissement de l’affichage.

Précautions d’emploi

En s’exécutant, perf top va faire l’équivalent d’un perf record -a et d’un perf report à intervalles de temps régulier. Par conséquent…

  • Pour des résultats optimaux, perf top doit disposer des symboles déboguages de l’ensemble des programmes et bibliothèques en cours d’utilisation. Selon la distribution Linux que vous utilisez, cela peut nécessiter une préparation système assez conséquente et laborieuse. Sur srv-calcul-ambulant, cette préparation a été effectuée pour l’ensemble des applications et bibliothèques du système disposant de symboles de déboguage.
  • La durée de traitement du rapport “perf report” doit être inférieure au temps entre deux rafraîchissements, sinon des cycles de rafraîchissement seront ratés. Et comme ce traitement s’exécute en parallèle des applications étudiées, il peut affecter leurs performances d’une façon qui biaisera la mesure. Il faut donc se restreindre à des mesures relativement économes en ressources CPU, et en particulier être très prudent avec l’option --call-graph=dwarf.

En dehors de ces points de vigilance, l’utilisation de perf top est très proche de celle de perf record et perf report. La quasi-totalité des options de perf top sont communes avec l’une ou l’autre de ces commandes, et je vous invite donc à vous référer aux sections associées pour plus d’informations.