Как получить профилирование графа вызовов при работе со скомпилированным кодом gcc и целью ARM Cortex A8? - PullRequest
4 голосов
/ 30 ноября 2011

Я кусаю зубы на этом ...

Мне нужно выполнить профилирование на плате ARM и мне нужно просмотреть графики вызовов.Я пробовал использовать OProfile, Kernel perf и Google Performance Tools.Все работают нормально, но не выводят никакой информации о графе вызовов.

Это привело меня к выводу, что я неправильно компилирую свой код.

Я использую следующие флаги при компиляции своего кода C ++:

Специфика арки:

-march=armv7-a -mtune=cortex-a8 -mfloat-abi=hard -mfpu=vfpv3

Общие сведения:

-fexceptions -fno-strict-aliasing -D_REENTRANT -Wall -Wextra

Отладка (с оптимизацией):

-O2 -g -fno-omit-frame-pointer

Я сделал многоПоиск Google и нашел некоторые связанные темы:

  • libunwind?
  • dwarf
  • (асинхронный-) таблицы раскрутки
  • -mapcs-frame

Однако я не до конца понимаю, как все это связано.Любые советы о том, как заставить работать графы вызовов?

Примечание (из-за ответа Риана): Мне интересно узнать, почему некоторые методы занимают больше времени (по сравнению с другими) в ARM, чем x86-64.Это не поможет сделать это на другой платформе (хотя мой код компилируется на обоих, и я могу создавать графы вызовов на x86-64).

1 Ответ

3 голосов
/ 30 ноября 2011

Я знаю, что вы хотите выполнить профилирование на ARM cortex-A8, но если вы заинтересованы в графах вызовов, почему бы не скомпилировать для x86 и запустить инструмент callgrind valgrind и проверить результаты с помощью kcachegrind?

Графики вызовов должны быть одинаковыми между двумя архитектурами, даже если они компилируют функции немного по-разному, отношения между функциями не должны меняться.

Не требуется специальных флагов:

valgrind --tool=callgrind -v --dump-every-bb=10000000 ./some-app
kcachegrind &
...