2015-08-07 1 views
1

Je suis fasciné par la capacité de 'perf' à enregistrer des graphiques d'appel et j'essaie de comprendre comment l'utiliser pour comprendre une nouvelle base de code.Comment utiliser l'outil de perfusion linux pour la compréhension de code

Je compilé le code en mode débogage, et a effectué des tests unitaires à l'aide de la commande suivante:

make test

perf enregistrer le nain-graphique Cela crée un 230 meg perf. Les données. Je puis écrire sur le graphe d'appel

rapport perf --call-graph --stdio> callgraph.txt

Cela crée un fichier de 50 meg.

Idéalement, je voudrais seulement voir le code appartenant au projet, pas le code du noyau, les appels système, les bibliothèques standard C++, même boost et tout autre logiciel tiers. Actuellement, je vois des articles comme __GI___dl_iterate_phdr, _Unwind_Find_FDE, etc.

J'adore le projet de flammes. Cependant, cette visualisation n'est pas bonne pour la compréhension du code. Y a-t-il d'autres projets, des articles, des idées, qui pourraient être utiles?

+0

Essayez de filtrer votre rapport par "dso" de l'application. Et tout outil Xref sera plus utile pour comprendre la nouvelle base de code (cscope, lxr, http://osxr.org, code.metager.de/source, GUI IDEs) – osgx

+0

'perf rapport -g' pour une application énorme ne devrait pas être déversé dans un fichier externe; cela fonctionnera sans redirection avec l'interface TUI interactif de rapport de perf. Essayez également le script https://github.com/jrfonseca/gprof2dot pour visualiser la sortie du graphique d'appel du rapport de performance en tant qu'image (graphique); et aussi svg/js [FlameGraphs] interactif de Brendan D. Gregg (http://www.brendangregg.com/flamegraphs.html) (il montre souvent beaucoup de mégaoctets de décharges brutes de rapport comme beaucoup de pages A4) - instruction pour le perf: http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html#perf – osgx

Répondre

0

perf report -g pour une application énorme ne doit pas être sauvegardé dans un fichier externe trop bavard. Collecté perf.data (avec -g) fonctionnera sans redirection de fichier avec l'interface interactif TUI de rapport de perf. Vous pouvez désactiver la création de rapports de callgraph pour trouver les fonctions qui prennent le plus de temps avec perf record sans -g ou perf report --no-children.

Il existe un script gprof2dot (https://github.com/jrfonseca/gprof2dot) pour visualiser les graphes d'appel de rapport de perf lagre sous la forme d'une image compacte (graphique). Il y a aussi le FlameGraphs de Brendan D. Gregg dans svg/js; et il note souvent dans les présentations que perf report -g sortie montre beaucoup de méga-octets de décharges brutes de rapport comme beaucoup de pages A4. Il y a instruction d'utilisation pour la perf: http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html#perf:

# git clone https://github.com/brendangregg/FlameGraph # or download it from github 
# cd FlameGraph 
# perf record -F 99 -g -- ../command 
# perf script | ./stackcollapse-perf.pl > out.perf-folded 
# ./flamegraph.pl out.perf-folded > perf-kernel.svg 

PS: Pourquoi vous caractérisez faire du processus? Essayez de sélectionner un test et profilez-les seulement. Utilisez la fréquence de profil inférieure pour obtenir un fichier perf.data plus petit. Désactivez également les exemples en mode noyau avec le suffixe :u de l'événement par défaut "cycles": perf record -F 99 -g -e cycles:u -- ../command