
Ce projet est un effort KDAB R&D pour créer une interface graphique autonome pour les données de performance. En tant que premier objectif, nous voulons fournir une interface utilisateur comme Kcachegrind autour de Linux Perf. Pour l'avenir, nous avons l'intention de prendre en charge divers autres formats de données de performance dans le cadre de ce parapluie.
Voici quelques captures d'écran montrant les caractéristiques les plus importantes de Hotspot en action:
La principale caractéristique de Hotspot est la visualisation graphique d'un fichier perf.data .


Remarque: les fonctions inclinées ont une bordure plus sombre que celles non entinées.





Le délai permet de filtrer les résultats par temps, processus ou thread. Les vues de données sont mises à jour en conséquence.



Vous pouvez également lancer perf à partir de HotSpot, pour profiler une application nouvellement démarrée ou pour vous attacher à des processus déjà en cours d'exécution. Tenez compte des mises en compte ci-dessous.


Remarque: le hotspot n'est pas encore emballé sur toutes les distributions Linux. Dans de tels cas, ou si vous souhaitez utiliser la dernière version, veuillez utiliser l'AppIMage qui fonctionnera très bien sur n'importe quelle distribution Linux récente.
Hotspot est disponible dans AUR (https://aur.archlinux.org/packages/hotspot).
Hotspot est disponible dans Debian (https://packages.debian.org/hotspot) et Ubuntu (https://packages.ubuntu.com/hotspot).
Hotspot Ebuilds est disponible à partir de notre superposition (https://github.com/kdab/kdab-overlay).
Hotspot est disponible dans Fedora (https://packages.fedoraproject.org/pkgs/hotspot/hotspot/).
Vous pouvez vous diriger vers la version la plus récente ou la construction continue. Dans les deux cas, vous trouverez l'AppIMage sous des "actifs" que vous pouvez télécharger. Untar le fichier AppImage (dans le cas de la dernière version), puis faites-le exécutable, puis exécutez-le.
Veuillez utiliser la dernière version pour obtenir la version la plus récente. Si cela ne fonctionne pas, veuillez signaler un bogue et tester la dernière version stable.
Remarque: vos bibliothèques ou préférences système ne sont pas modifiées. Dans le cas où vous souhaitez supprimer à nouveau Hotspot, supprimez simplement le fichier téléchargé. En savoir plus sur AppImage ici.
Pour découvrir comment déboguer l'AppImage, voir le piratage.
La construction de hotspot de Source vous donne les plus récents et les meilleurs, mais vous devrez vous assurer que toutes ses dépendances sont disponibles. La plupart des utilisateurs devraient probablement installer Hotspot à partir du Gestionnaire de packages Distro ou en tant qu'AppIMage.
Pour tous ceux qui souhaitent contribuer à Hotspot ou utiliser la dernière version sans que les notes détaillées AppImage se trouvent lors du piratage.
Tout d'abord, enregistrez des données avec perf . Pour obtenir des backtraces, vous devrez activer le mode callgraph nain:
perf record --call-graph dwarf < your application >
...
[ perf record: Woken up 58 times to write data ]
[ perf record: Captured and wrote 14.874 MB perf.data (1865 samples) ] Maintenant, si vous avez des hotspot disponibles sur la même machine, tout ce que vous avez à faire est de le lancer. Il ouvrira automatiquement le fichier perf.data dans le répertoire actuel (similaire au perf report ).
Alternativement, vous pouvez spécifier le chemin d'accès au fichier de données sur la console:
hotspot /path/to/perf.data Selon vos besoins, vous souhaiterez peut-être transmettre des options de ligne de commande supplémentaires à Hotspot. Cela permet de définir des options de configuration uniques qui se trouvent dans l'interface graphique dans "Paramètres" et permet également de convertir les fichiers de données Linux Perf en format perfdata plus petit et portable (voir l'importation / exportation pour plus de détails). Toutes les options de ligne de commande sont affichées avec --help :
Usage: hotspot [options] [files...]
Linux perf GUI for performance analysis.
Options:
-h, --help Displays help on commandline options.
--help-all Displays help including Qt specific options.
-v, --version Displays version information.
--sysroot <path> Path to sysroot which is used to find libraries.
--kallsyms <path> Path to kallsyms file which is used to resolve
kernel symbols.
--debugPaths <paths> Colon separated list of paths that contain debug
information. These paths are relative to the
executable and not to the current working directory.
--extraLibPaths <paths> Colon separated list of extra paths to find
libraries.
--appPath <path> Path to folder containing the application executable
and libraries.
--sourcePaths <paths> Colon separated list of search paths for the source
code.
--arch <path> Architecture to use for unwinding.
--exportTo <path> Path to .perfparser output file to which the input
data should be exported. A single input file has to
be given too.
--perf-binary <path> Path to the perf binary.
--objdump-binary <path> Path to the objdump binary.
Arguments:
files Optional input files to open on startup, i.e.
perf.data files.
Hotspot prend en charge une façon très puissante de faire une analyse des temps d'attente ou un profilage hors CPU. Cette analyse est basée sur des tracepoints de noyau dans le planificateur Linux. En enregistrant ces données, nous pouvons trouver l'heure Delta pendant laquelle un thread ne fonctionnait pas sur le CPU, mais était à la place hors CPU. Il peut y avoir plusieurs raisons à cela, qui peuvent tous être trouvés en utilisant cette technique:
read() ou write()mmap() 'ednanosleep() ou yield()futex() etc.En tirant parti des points de trace du noyau dans le planificateur, les frais généraux sont assez gérables et nous ne payons que le prix, lorsque le processus est réellement éteint. Plus particulièrement, nous ne payons pas de prix lorsque une opération de verrouillage mutex peut être gérée directement dans l'espace utilisateur.
Pour effectuer une analyse hors CPU avec Hotspot, vous devez enregistrer les données avec une commande très spécifique:
perf record
-e cycles # on-CPU profiling
-e sched:sched_switch --switch-events # off-CPU profiling
--sample-cpu # track on which core code is executed
-m 8M # reduce chance of event loss
--aio -z # reduce disk-I/O overhead and data size
--call-graph dwarf # we definitely want backtraces
< your application >Alternativement, vous pouvez utiliser la case à cocher OFF-CPU dans la page d'enregistrement intégrée de Hotspot.
Au cours de l'analyse, vous pouvez ensuite basculer entre la vue de coût "Cycles" pour les données sur la CPU à la vue de coûts "Off-CPU" pour l'analyse des temps d'attente. Souvent, vous voudrez changer entre les deux, par exemple pour trouver des endroits dans votre code qui peuvent nécessiter une parallélisation supplémentaire (voir également la loi d'Amdahl).
Le coût "sched: sched_switch" vous sera également montré. Mais à mon avis, c'est moins utile, car il indique seulement le nombre de commutateurs de planificateur. La durée du temps entre les deux est souvent beaucoup plus intéressante pour moi - et c'est ce qui vous est montré dans la métrique "Off-CPU Time".
Si vous enregistrez sur un système embarqué, vous voudrez analyser les données sur votre machine de développement avec Hotspot. Pour ce faire, assurez-vous que votre système contienne les informations de débogage requises pour le déroulement (voir ci-dessous). Ensuite, enregistrez les données sur votre système intégré:
embedded$ perf record --call-graph dwarf < your application >
...
[ perf record: Woken up 58 times to write data ]
[ perf record: Captured and wrote 14.874 MB perf.data (1865 samples) ]
embedded$ cp /proc/kallsyms /tmp/kallsyms # make pseudo-file a real fileC'est OK si votre machine intégrée utilise une plate-forme différente de votre hôte. Sur votre hôte, effectuez les étapes suivantes ensuite pour analyser les données:
host$ scp embedded:perf.data embedded:/tmp/kallsyms .
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms
perf.dataSi vous déployez manuellement une application à partir d'un chemin à l'extérieur de votre système, faites-le à la place:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
perf.dataSi votre application utilise également des bibliothèques à l'extérieur de votre système sysroélectrique et de l'APPPATH, faites-le:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
perf.dataEt, le pire des cas, si vous utilisez également des fichiers de débogage divisé dans des emplacements non standard, faites-le:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
--debugPaths /path/to/debug1:/path/to/debug2:...
perf.data Le format de fichier perf.data n'est pas autonome. Pour l'analyser, vous avez besoin d'accéder aux exécutables et aux bibliothèques du processus profilé, ainsi que des symboles de débogage. Cela rend lourde de partager de tels fichiers sur des machines, par exemple pour obtenir l'aide d'un collègue pour enquêter sur un problème de performance ou à des fins de reporting de bogues.
Hotspot vous permet d'exporter les données analysées, qui sont ensuite entièrement autonomes. Cette fonctionnalité est accessible via le "fichier> Enregistrer sous" Action de menu. Les données sont ensuite enregistrées dans un fichier autonome *.perfparser . Pour importer à nouveau les données dans Hotspot, ouvrez simplement ce fichier directement à la place du fichier perf.data d'origine.
En tant qu'alternative, vous pouvez également faire l'exportation de la ligne de commande (sans GUI, donc c'est également utilisable avec des builds automatisés) en utilisant l'option --exportTo .
Remarque: le format de fichier n'est pas encore stable. Ce qui signifie que les données exportées par une version de Hotspot ne peuvent être lues que par la même version. Ce problème sera résolu à l'avenir, selon le temps.
Hotspot ne montre actuellement que le nom des tracepoints dans la chronologie.


Hotspot comprend un désassembleur, qui peut vous montrer le coût par instruction. Le désassembleur utilise des couleurs pour indiquer quelles lignes de montage correspondent à la ligne de code source. Pour une navigation plus facile, vous pouvez simplement cliquer sur une ligne et l'autre vue s'y sautera. Vous pouvez suivre les appels de fonction avec un double clic. Dans la vue SourceCode, vous pouvez appuyer sur Ctrl + F ou appuyer sur l'icône de recherche pour ouvrir une fenêtre de recherche.
Si vous disposez des sources dans différents répertoires, vous pouvez utiliser --sourcePaths ou les paramètres pour sélectionner indiquer au désassembleur de rechercher le code source.
Si quelque chose se casse dans ce qui précède et que la sortie est moins utilisable que perf report , veuillez signaler un problème sur GitHub. Cela dit, il y a des problèmes connus sur lesquels les gens peuvent trébucher:
Déteindre la pile pour produire une droite est un art sombre et peut se tromper à bien des égards. Hotspot s'appuie sur perfparser (voir ci-dessous), qui à son tour s'appuie sur libdw d'Elfutils pour détendre la pile. Cela fonctionne assez bien la plupart du temps, mais peut toujours se tromper. Plus particulièrement, le déroulement échouera quand:
perf.data est manquant--debugPaths <paths> : utilisez-le lorsque vous avez des fichiers de débogage divisé dans des emplacements non standard--extraLibPaths <paths> : Utilisez-le lorsque vous avez déménagé les bibliothèques vers un autre endroit depuis l'enregistrement--appPath <paths> : Il s'agit d'une sorte de combinaison des deux champs ci-dessus. Le chemin est traversé récursivement, à la recherche de fichiers de débogage et de bibliothèques.--sysroot <path> : Utilisez-le lorsque vous essayez d'inspecter un fichier de données enregistré sur une plate-forme intégrée-O2 -g . Vous devrez répéter l'étape perf record Par défaut, perf record ne copie qu'une partie de la pile dans le fichier de données. Cela peut entraîner des problèmes avec des piles d'appels très profondes, qui seront coupées à un moment donné. Ce problème rompra les arbres d'appel descendants de Hotspot, comme visualisé dans la vue descendante ou le graphique de flamme. Pour résoudre ce problème, vous pouvez essayer d'augmenter la taille du vidage de la pile, c'est-à-dire:
perf record --call-graph dwarf,32768
Notez que cela peut augmenter considérablement la taille des fichiers perf.data - utilisez-le avec soin. Jetez également un œil à man perf record .
Pour certains scénarios, les appels de fonction récursifs ne parviennent tout simplement pas. Voir aussi # 93
Hotspot prend en charge le téléchargement des symboles de débogage via Debuginfod. Cela peut être activé en ajoutant des URL de téléchargement dans les paramètres ou en lançant des hotspot avec DEBUGINFOD_URLS définis dans l'environnement.
Par rapport au perf report , Hotspot manque beaucoup de fonctionnalités. Certains d'entre eux devraient être résolus à l'avenir. D'autres peuvent potentiellement ne jamais être mis en œuvre. Mais sachez que les fonctionnalités suivantes ne sont pas disponibles dans Hotspot actuellement:
--itrace , --mem-mode , --branch-stack et --branch-history , ne sont pas prises en charge Ce n'est pas une bonne idée de lancer Hotspot avec sudo ou en tant qu'utilisateur root . Voir par exemple l'édition de fichiers comme root pour un article à ce sujet. Le numéro 83 est également pertinent dans ce contact.
Mais sans droits de superutilisateurs, vous pouvez voir des messages d'erreur tels que les suivants lors de l'utilisation de la fonction d'enregistrement de Hotspot:
You may not have permission to collect stats.
Consider tweaking /proc/sys/kernel/perf_event_paranoid:
-1 - Not paranoid at all
0 - Disallow raw tracepoint access for unpriv
1 - Disallow cpu events for unpriv
2 - Disallow kernel profiling for unpriv
Pour contourner cette limitation, le hotspot peut fonctionner lui-même avec des privilèges élevés.
L'exportation de données actuelle est limitée à un format qui ne peut être lu que par hotspot de la même version. Cela rend l'interopération avec d'autres outils de visualisation quasi impossible. Ceci est connu et s'améliorera à l'avenir. La prise en charge notamment des exportations vers des visionneuses Web telles que Perfetto ou le Mozilla Profiler est planifiée mais pas encore mise en œuvre. Les correctifs sont les bienvenus!
Ce projet tire parti de l'excellent utilitaire perfparser créé par la société QT pour leur IDE Créateur QT. Si vous utilisez déjà QT Creator, envisagez de tirer parti de son analyseur d'utilisation CPU intégré.
Hotspot est concédé sous licence sous le GPL V2 +. Voir licence.gpl.txt pour plus d'informations, ou contactez [email protected] si des conditions de cette licence ne sont pas claires pour vous.