Обычно для подготовки отчета по профилированию на Linux я использовал только самые простые варианты запуска perf report:
Отчет по модулям:
$ perf report --stdio --kallsyms=/boot/System.map-2.6.32-504.23.4.el6.x86_64 --sort=dso -g none
Отчет по функциям:
perf report -g none --stdio --kallsyms=/boot/System.map-2.6.32-504.23.4.el6.x86_64
Отчет по функциям с построением callgraph:
perf report --stdio --kallsyms=/boot/System.map-2.6.32-504.23.4.el6.x86_64 -g
Для многих ситуаций таких отчетов было вполне достаточно, чтобы найти проблемы с производительностью. Однако некоторое время назад я столкнулся с ситуацией когда отчет по callgraph показывал очень большое дерево вызовов и его было затруднительно понимать.