如何在Linux上配置多线程C++应用程序?

ano*_*non 46 c++ multithreading gprof

我曾经用gprof做我所有的Linux分析.

但是,对于我的多线程应用程序,它的输出似乎不一致.

现在,我挖了这个:

http://sam.zoy.org/writings/programming/gprof.html

但是,从很久以前开始,在我的gprof输出中,看来我的gprof列出了非主线程使用的函数.

所以,我的问题是:

1)2010年,我可以轻松使用gprof来分析多线程Linux C++应用程序吗?(Ubuntu 9.10)2)我应该研究哪些其他工具进行性能分析?

Lau*_*nis 13

编辑:在穷人的探查器上添加了另一个答案,恕我直言更适合多线程应用程序.

看看oprofile.此工具的分析开销可以忽略不计,它支持多线程应用程序---只要您不想分析互斥争用(这是分析多线程应用程序的一个非常重要的部分)


Lau*_*nis 7

看看穷人的探查员.令人惊讶的是一些其他的工具,为多线程应用两者都做CPU剖析和互斥争剖析和PMP同时做两,而甚至不需要安装任何东西(只要你有GDB).


ste*_*anB 6

看看Valgrind.

  • 导致我进入此线程的问题是Callgrind奇怪的调度差异,以及它在单个线程中运行所有内容的事实。我试图从我的原子操作和自旋锁中发现瓶颈,单线程处理一切都可能杀死可能引起的争用和性能问题。因此,尽管我有相反的愿望,但Valgrind并不总是首选的分析器。 (2认同)

Pau*_*l R 6

看看Zoom.


Mik*_*vey 6

保罗R说,看看Zoom.你也可以使用lsstack,这是一种低技术方法,但gprof相比,效果惊人.

补充:既然你澄清了你在33ms运行OpenGL,我之前的建议就是.此外,我个人在这种情况下所做的事情既有效又不直观.只需让它与典型或有问题的工作负载一起运行,然后手动停止它,并查看它正在做什么以及为什么.这样做几次.现在,如果只是偶尔行为不端,你只想在它行为不端的时候停止它.这并不容易,但我已经使用闹钟中断设置来实现正确的延迟.例如,如果100帧中的一帧超过33毫秒,则在帧开始时将计时器设置为35毫秒,在帧结束时将其关闭.这样,它只会在代码耗时太长时才会中断,它会显示原因.当然,一个样本可能会错过有罪的代码,但是20个样本不会错过它.


osg*_*sgx 6

尝试现代 linux 分析工具perf(perf_events):https : //perf.wiki.kernel.org/index.php/Tutorial和http://www.brendangregg.com/perf.html

perf record ./application
# generates profile file perf.data
perf report
Run Code Online (Sandbox Code Playgroud)