2

我正在将小型库的使用添加到现有的大型软件中,并希望分析(在查找器详细信息中,而不仅仅是 in&out rdtsc() 或 gettimeofday 调用)开销及其对小型库的归属。使用 rdtsc() 之类的东西,我可以了解调用我的库函数所具有的延迟,但我无法进行延迟归因,除非我还能够查看分支是否没有被很好地预测,缓存是否工作不正常等等。我研究了 PAPI,因为我想象着在更大的二进制文件的上下文中查看进出库中例程的某些硬件事件,但似乎我需要一个特定的内核模块才能让 PAPI 为我工作(Linux 2.6. 18 && Intel Xeon 5570)...有专门为 Intel 处理器设计的 Vtune,但它看起来像

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

4

2 回答 2

5

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

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

于 2012-08-03T07:02:27.067 回答
3

无法在 vtune 中定义一个入口点来开始录制。

但是,您可以做的是在不记录的情况下启动跟踪,然后当您希望访问您的库时,您启动跟踪并让它记录调用。调用后,您可以再次停止它,现在可以使用 vtune 中的上下选项卡查找库调用。

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

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

于 2012-08-01T00:41:04.420 回答