GCC/GProf - получить программный доступ к текущей функции / трассировке стека потока

Я пытаюсь сделать небольшое настенное профилирование.

GCC добавляет определенный код инструментария времени выполнения (например, для GProf) при компиляции с -pg,

Я предполагаю, что эта информация хранится в некоторой глобальной или локальной поточной структуре данных перед записью в gmon.out?

Можно ли прочитать эту информацию (stacktrace) из другого потока в самом коде? (Если это так, то я мог бы добавить свой поток профилирования настенного времени, не добавляя инструменты самостоятельно.)

1 ответ

gprof не принимает трассировки стека и работает в режиме CPU, а не в режиме wall. Он просто выбирает счетчик программ по времени ЦП и приписывает его функциям, о которых он знает. По сравнению с предыдущими профилировщиками его главное требование славы состоит в том, что, поскольку выборка только на ПК ("самостоятельное время") довольно бесполезна в приложениях приличного размера, где стек вызовов имеет многоуровневую структуру, он также подсчитывает, сколько раз любая функция A вызывает любую функцию B. Затем он пытается угадать (с помощью довольно шаткой математики), сколько процессорного времени может быть возвращено подпрограммам более высокого уровня, которые вызывают подпрограммы более низкого уровня.

Есть профилировщики, которые следят за стеками во время игры. (Время ЦП означает, что если ваше приложение каким-то образом расходует время на очень низком уровне из-за сна, ввода-вывода, зависания на семафоре или какой-либо другой блокировки, вы никогда не увидите его.) Я знаю, что такое стек образцы на стену, а именно Zoom. Мне сказали, что OProfile может это сделать, но я не могу это проверить. То же самое для DTrace.

Но это только говорит о переднем конце, взятии образцов.

Не менее важен и бэкэнд, часть, которая представляет вам вещи. Обычно вы получаете "горячие пути", "графы вызовов", "графы пламени" и т. Д. И т. Д.

Лично я смотрю на все эти изящные игрушки. Что они делают, они делают хорошо, без вопросов. Но если нужны результаты ускорения, то лучшая информация поступает из небольшого числа выборок из стека, взятых в то время, о которых вы заботитесь, которые на самом деле рассматриваются и понимаются, а не просто суммируются.

Не существует сумматора, который распознает шаблоны лучше, чем голова программиста, и любая проблема, достаточно большая, чтобы ее можно было исправить, будет очевидна в небольшом числе примеров.

Вот пример, а вот еще один, и если вы хотите увидеть реальную математику за этим, посмотрите здесь.

Другие вопросы по тегам