【问题标题】:Is it possible to use vtune on certain code snippets in a binary and not an entire binary?是否可以在二进制文件而不是整个二进制文件中的某些代码片段上使用 vtune?
【发布时间】:2012-07-29 19:42:03
【问题描述】:

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

有没有办法让我使用 Vtune 来实现我的目标,或者可以让我无需修补内核就可以访问此类计数器的方法?

【问题讨论】:

    标签: c linux performance profiling intel-vtune


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-25
        • 2010-11-11
        • 1970-01-01
        • 2020-09-25
        • 2015-05-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多