Autres commandes
J’ai exclu de ce TP un certain nombre de commandes de la suite perf
,
principalement parce qu’elles me semblaient moins utiles dans la vie de tous les
jours ou parce qu’il était difficile pour X ou Y raison d’en enseigner le
maniement sur srv-calcul-ambulant
.
Dans cette annexe, nous allons cependant faire quand même un point rapide sur ces commandes, leur fonction, et la cause de leur non-inclusion dans le TP.
Gestion des symboles de déboguage
Nous l’avons vu au cours du TP, perf
fait un usage assez intensif des symboles
de déboguage. Ce qui pose quelques problèmes en pratique.
Tout d’abord, sous les distributions Linux actuelles, les symboles de déboguage
des bibliothèques systèmes sont stockés dans des fichiers distincts des
bibliothèques elle-mêmes. Cela permet aux personnes qui n’ont pas besoin de
ces symboles de ne pas les installer dans un premier temps, quitte à revenir sur
cette décision plus tard. Mais cela signifie aussi qu’un outil comme perf
ou
GDB qui utilise des symboles de déboguage doit, à chaque fois qu’il en a besoin,
faire une série de requêtes dans un certain nombre de répertoires dans l’espoir
de les trouver, ce qui peut devenir coûteux quand on s’y réfère souvent.
Pour éviter ces requêtes à répétition, perf
garde en cache l’emplacement où il
a trouvé les symboles de déboguage de tous les binaires ELF qu’il a analysés,
indexés par le build-id, un identifiant interne partagé par le binaire ELF
et ses informations de déboguage. Vous pouvez gérer ce cache au moyen de la
commande perf buildid-cache
.
Un problème connexe est la répétabilité des analyses effectués avec perf
sur
une machine différente de celle où des mesures ont été acquises. Cette
répétabilité est déjà, à la base, restreinte par l’interopérabilité limitée
qui existe entre différentes versions de perf
. Mais quand les informations de
déboguage entrent dans l’équation, le problème devient encore plus complexe,
puisqu’il est difficile de répliquer de façon exacte les versions de binaires
existant sur une machine A sur une autre machine B en utilisant uniquement le
gestionnaire de paquets.
perf
propose donc la commande perf archive
, qui combine un fichier
perf.data
avec les différents symboles de déboguage dont il dépend dans une
archive pour faciliter la répétition d’analyses de performance sur une machine
distante.
Dans une logique similaire, nous pouvons aussi mentionner la commande
perf kallsyms
, qui permet de connaître l’emplacement en mémoire virtuelle où
sont chargés les différents symboles du noyau, ce qui est utilisé en interne par
perf report
lors de l’analyse de l’utilisation CPU du noyau.
Manipulation de fichiers perf.data
Quelques outils permettent de manipuler les fichiers perf.data
produits par
perf record
:
perf data
a vocation a devenir un outil généraliste pour manipuler ces fichiers, mais à l’heure où sont écrites ces lignes il ne peut que les convertir au format Common Trace Format.perf diff
permet de calculer les différences entre les profils de deux fichiersperf.data
. Sur le principe, ça pourrait être très intéressant dans une activité d’optimisation de performances. Mais pour l’instant, cet outil ne travaille qu’en terme de fonctions, (overhead “Self” deperf report
) et pas de graphes d’appels (overhead “Children”). L’information qu’il affiche est donc généralement trop bas niveau pour être utilisable.perf evlist
permet de savoir quels événements ont été enregistrés dans un fichier.perf inject
permet de partir d’un fichierperf.data
et en tirer un second fichierperf.data
contenant quelques données supplémentaires : build-ids des fichiers profilés, événements artificiels indiquant pendant combien de temps un thread s’est assoupi… Pour l’instant, ses fonctionnalités sont très spécifiques à des cas d’utilisation bien particuliers.
Commandes incompatibles avec srv-calcul-ambulant
Les commandes perf
suivantes sont intéressantes dans l’absolu, mais ne peuvent
pas être présentées dans le cadre d’un TP sur srv-calcul-ambulant
car elles
sont incompatibles avec certaines des décisions de conception de ce serveur :
perf ftrace
propose un mécanisme alternatif de suivi des événements système basé sur l’infrastructureftrace
. Cette commande est hardcodée pour n’être utilisable parroot
, et n’est donc pas utilisable par des utilisateurs non administrateurs du serveur.perf lock
permet d’analyser l’utilisation des mutex, mais utilise pour ça des tracepoints qui ne sont pas activés sur les noyaux fournis par la distribution openSUSE que nous utilisons.
Autres commandes semblant peu intéressantes
Ces commandes perf
peuvent être utilisées sur srv-calcul-ambulant
, mais leur
utilité ne semblait pas énorme pour l’audience Reprises, c’est pourquoi elles
ne font pas partie du TP actuel :
perf bench
contient une série de microbenchmarks de diverses fonctionnalités du noyau Linux. Il me semble que d’autres logiciels comme Stress-NG font mieux ce travail.perf config
permet de régler certains paramètres de façon permanente pour ne pas avoir à passer les mêmes flags encore et encore. L’ensemble de paramètres configurables est toutefois quelque peu limité…perf daemon
permet de déléguer l’exécution de commandesperf record
à un groupe de services en tâche de fond. L’intérêt par rapport à une simple utilisation interactive deperf record
ne semble pas évident, sauf peut-être dans une optique d’administration système…perf kmem
permet de mesurer quelques statistiques d’activité de l’allocateur mémoire interne du noyau linux. L’information obtenue est limitée, et je n’ai à ce jour jamais rencontré un problème de performances où il jouait un rôle.perf kvm
permet d’obtenir des informations sur des machines virtuelles hébergées par une infrastructure KVM. Les membres du projet Reprises ont peu de chance d’avoir un jour un accès shell à l’hyperviseur d’une infrastructure KVM, donc il semble peu utile d’aborder cela.perf sched
permet d’obtenir des informations sur l’ordonnancement des tâches et notamment les latences d’ordonnancement, c’est à dire le délai entre le moment où une tâche est exécutable et le moment où elle commence vraiment à s’exécuter. Cette information n’est généralement pertinente que sur des systèmes temps réels ou hébergeant un nombre de tâches actives supérieur au nombre de coeurs CPU, deux configurations qui me semblent peu courantes pour l’audience Reprises.perf timechart
permet de mesurer l’activité CPU et E/S de l’ensemble du système et de la visualiser sous forme d’un énorme graphique SVG avec une ligne par coeur CPU et une ligne par processus système en vol. Mais le résultat est difficilement exploitable, car le SVG résultant est si riche en détails qu’il met à genoux la plupart des outils de visualisation.perf version
ne fait que dupliquer le résultat de la commandeperf --version
à laquelle vous aurez probablement déjà pensé…