是否可以对二进制文件中的某些代码片段使用vtune而不是整个二进制文件?

时间:2012-07-31 23:03:50

标签: c linux performance profiling vtune

我正在将一个小型库的使用添加到现有的大型软件中,并希望分析(在查找详细信息而不仅仅是在& out rdtsc()或gettimeofday调用中)开销和小库的归属。使用像rdtsc()之类的东西我可以了解调用我的库函数所具有的延迟,但我不能做延迟归因,除非我还能看到分支是否被预测得不好,缓存是否正常工作等等。我查看了PAPI,因为我想到了在更大的二进制文件的上下文中查看进出模块中的例程的某些硬件事件,但似乎我需要一个特定的内核模块供PAPI工作(Linux 2.6。 18&& Intel Xeon 5570)...有Vtune是专门针对英特尔处理器的,但似乎它可以分析整个二进制文件的性能而不是特定的代码片段(3-4次调用我的库)。

我有没有办法让Vtune用于我的目标,或者可能让我可以访问这些计数器而无需修补我的内核?

2 个答案:

答案 0 :(得分:5)

Matias是对的 - 您可以开始暂停分析(在VTune中说“开始暂停”),然后在程序中使用来自VTune API的__itt_pause / __itt_resume API将数据收集限制在感兴趣的代码区域。 / p>

您可能还希望在项目属性中将“目标持续时间类型”设置为“不到一分钟” - 这使得采样更精细(10 KHz而不是默认的1 KHz频率)。或者手动调整要收集的事件列表中的Sample After值。当您想要分析像错误预测的分支这样的特定内容时,后者通常更有用。

答案 1 :(得分:3)

无法在vtune中定义入口点以开始录制。

但是,您可以做的是在没有录制的情况下启动跟踪,然后当您希望打到库时,启动跟踪并让它记录调用。通话结束后,您可以再次停止它,现在可以使用vtune中的上下选项卡查找库调用。

有了它,您应该能够看到有关呼叫的所有信息以及每个呼叫所花费的时间。

如果您想确保在调用处于活动状态时仅跟踪,则可以在gdb下启动应用程序并在访问和离开要检查的函数时插入断点,然后适当地启动和停止探查器。