web-dev-qa-db-fra.com

Pile d'appels dans le profileur de perf

Je lance "perf" de la manière suivante:

perf record -a --call-graph -p some_pid

perf report --call-graph --stdio

Ensuite, je vois ceci:

 1.60%     my_binary  my_binary                [.] my_func
           |
           --- my_func
              |          
              |--71.10%-- (nil)
              |          (nil)
              |          
               --28.90%-- 0x17f310000000a

Je ne vois pas quelles fonctions appellent my_func (). Je vois "nil" et "0x17f310000000a" à la place. Est-ce que je fais quelque chose de mal? Ce n'est probablement pas un problème d'information de débogage car certains symboles sont affichés alors que d'autres ne le sont pas.

Plus d'informations:

  • Je lance CentOS 6.2 (noyau 2.6.32-220.4.1).
  • perf rpm - perf-2.6.32-279.5.2.el6.x86_64.
22
erezz

Assurez-vous d’avoir compilé le code avec -fno-omit-frame-pointer gcc option.

24
Andriy

Vous y êtes presque, il manque l'option -G (vous aurez peut-être besoin d'une performance plus récente que celle installée sur votre système):

$ perf report --call-graph --stdio -G

De perf help report:

   -G, --inverted
       alias for inverted caller based call graph.
14
holygeek

Avez-vous essayé de profiler avec Zoom ? Il peut utiliser perf, un pilote personnalisé ou un oprofile pour recueillir des échantillons. Si vous souhaitez simplement consulter un processus, essayez la configuration "Thread Time". 

Je serais intéressé de savoir si l'une des options de Zoom est meilleure/différente pour obtenir les informations de fonction que la performance autonome.

0
federal