Подтвердить что ты не робот

Вызов стека в перфоленсе

Я запускаю "perf" следующим образом:

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

perf report --call-graph --stdio

Затем я вижу следующее:

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

Я не вижу, какие функции вызывают my_func(). Вместо этого я вижу "ноль" и "0x17f310000000a". Я делаю что-то неправильно? Вероятно, это не проблема с отладочной информацией, потому что некоторые символы отображаются, а другие не отображаются.

Дополнительная информация:

  • Я запускаю CentOS 6.2 (ядро 2.6.32-220.4.1).
  • perf rpm - perf-2.6.32-279.5.2.el6.x86_64.
4b9b3361

Ответ 1

Убедитесь, что вы скомпилировали код с опцией -fno-omit-frame-pointer gcc.

Ответ 2

Вы почти там, вам не хватает опции -G (вам может понадобиться более свежий перфоманс, чем тот, который установлен в вашей системе):

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

От perf help report:

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

Ответ 3

Вы пробовали профилировать с Zoom? Он может использовать perf, custom driver или oprofile для сбора образцов. Если вам просто интересно посмотреть на один процесс, попробуйте настроить "Время потока".

Мне было бы интересно узнать, являются ли какие-либо опции масштабирования лучшими/разными при получении информации о функции, чем автономный перформанс.