分析程序执行的一部分

d3j*_*nes 5 c++ linux profiling

我有一个复杂的应用程序,分多个阶段执行。我只想介绍其中一个阶段。

C++ 应用程序在 Linux x86-64 上运行。

该程序需要几分钟才能运行。如果我使用 perf 来分析整个事情,则生成的数据集太大,无法处理 perf 报告。然而,此时我只对分析程序的一个阶段的执行感兴趣,该阶段可能花费总时间的 1/3。也许这个数据集更容易让性能报告。

理想情况下,我想要类似“向自己发送 SIGUSR1 来开始分析,并发送 SIGUSR2 来停止它”。那时,我可以轻松地描述我想要的配置信息的执行阶段。

我总是可以使用 SIGPROF 编写自己的(尽管是基本的)分析器,但是有没有办法可以使用现有的工具(例如 perf)来做到这一点?

gez*_*eza 0

一种可能的方法是附加perf到现有流程。

所以,启动你的程序,检查它的 pid。然后-p <pid>在适当的时候开始使用该选项进行分析。并使用 CTRL-C 或 SIGINT 停止分析。但只有当您不需要多次启动/停止分析时,此技巧才有效,因为数据附加功能早已被删除perf

或者,您可以使用 降低采样频率-F,以便生成的数据变得更容易处理。