2012-07-31 75 views
2

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

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

回答

3

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

但是,您可以做的是在没有记录的情况下启动跟踪,然后在您期望击中库时启动跟踪并让其记录呼叫。在调用之后,您可以再次停止,现在可以使用vtune中的顶部选项卡查找库调用。

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

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

5

Matias是正确的 - 您可以开始暂停配置文件(在VTune中说“开始暂停”),然后在您的程序中使用VTune API中的__itt_pause/__itt_resume API将数据收集限制在感兴趣的代码区域。

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

相关问题