Профилирование части выполнения программы - PullRequest
4 голосов
/ 25 июня 2019

У меня сложное приложение, которое выполняется в несколько этапов.Я хотел бы профилировать только один из этапов.

Приложение C ++ работает в Linux, x86-64.

Для запуска этой программы требуется несколько минут.Если я использую perf для профилирования всего, результирующий набор данных будет слишком большим для обработки отчета perf.Однако на данный момент меня интересует только профилирование выполнения одной фазы программы, которая занимает, возможно, 1/3 общего времени.Возможно, этот набор данных будет удобнее для отчета.

В идеале я хотел бы что-то вроде «отправь себе SIGUSR1, чтобы начать профилирование, и SIGUSR2, чтобы остановить его».На этом этапе я могу легко определить фазу выполнения, для которой мне нужна информация профиля.

Я всегда могу написать свой собственный (хотя и базовый) профилировщик, используя SIGPROF, но есть ли способ сделать это с помощью существующих инструментов, таких каккак перф?

1 Ответ

0 голосов
/ 25 июня 2019

Возможный способ сделать это - присоединить perf к существующему процессу.

Итак, запустите вашу программу, проверьте ее pid. Затем начните профилирование с опцией -p <pid>, когда это уместно. И используйте CTRL-C или SIGINT, чтобы остановить профилирование. Но этот прием работает только в том случае, если вам не нужно много раз запускать / останавливать профилирование, поскольку функция добавления данных была удалена из perf давно.

Или, может быть, вы можете просто уменьшить частоту дискретизации с помощью -F, чтобы результирующие данные стали более удобными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...