我正在将一个小型库的使用添加到一个现有的大型软件中,并且想要分析(更详细地分析,而不是简单地使用rdtsc()或gettimeofday调用)小型库的开销和它的属性。使用像rdtsc()这样的东西,我可以获得调用我的库函数的延迟的感觉,但是我不能做延迟属性,除非我还能够看到分支预测得不好,缓存不能正常工作,我研究了PAPI,因为我想象着在更大的二进制文件的上下文中,我的库中的某个特定硬件事件进出我的库中的例程,但似乎我需要一个特定的内核模块才能让PAPI为我工作(Linux2.6.18 && Intel Xeon5570)...there是Vtune,它是专门针对英特尔处理器的,但它似乎会分析整个二进制文件的性能,而不是特定的代码片段(对我的库的3-4个调用)。
有没有一种方法可以让我使用Vtune来实现我的目标,或者是可以让我在不打内核补丁的情况下访问这些计数器的方法?
发布于 2012-08-01 08:41:04
无法在vtune中定义开始录制的入口点。
但是,您可以做的是在不记录的情况下启动跟踪,然后当您希望命中库时,启动跟踪并让它记录调用。调用之后,您可以再次停止它,现在可以使用vtune中的自上而下选项卡来查找库调用。
有了它,您应该能够看到有关调用的所有信息,以及每次调用所花费的时间。
如果您希望确保仅在调用处于活动状态时进行跟踪,则可以在gdb下启动应用程序,并在访问和离开要检查的函数时插入断点,然后适当地启动和停止分析器。
发布于 2012-08-03 15:02:27
Matias是对的-您可以启动暂停的评测( VTune中的“start paused”),然后在您的程序中使用VTune应用编程接口中的__itt_pause / __itt_resume API,将数据收集限制在感兴趣的代码区域。
您可能还希望在项目属性中将“目标持续时间类型”设置为“低于一分钟”-这将使采样更加细粒度(10 KHz而不是默认的1 KHz频率)。或手动调整要收集的事件列表中的Sample After值。当您想要分析特定的内容时,后者通常更有用,比如预测错误的分支。
https://stackoverflow.com/questions/11750297
复制相似问题