【问题标题】:Use callgrind as a sampling profiler?使用 callgrind 作为采样分析器?
【发布时间】:2010-09-10 04:48:56
【问题描述】:

我一直在寻找 Linux 采样分析器,callgrind 最接近显示有用的结果。然而,开销估计为20--100x slower than normal。此外,我只对每个函数花费的时间感兴趣(特别强调阻塞调用,例如 read()write(),其他分析器不会忠实地显示这些调用)。

  1. 有没有办法关闭多余的选项,以便只记录最小数据以生成在各种调用堆栈中花费的时间?
  2. callgrind 的 cachegrind 传统是否意味着在缓存分析等方面做了多余的工作?
  3. 我假设 callgrind 像调试器一样运行。是否可以对其进行调整以按间隔而不是每条指令对过程进行采样?

【问题讨论】:

    标签: c linux profiling valgrind callgrind


    【解决方案1】:

    3) Callgrind 就像动态翻译器一样工作,它使用计数工具代码来处理原始代码。对代码中的每条内存访问指令(用于缓存模拟)和(我建议)对每条类似 jmp 的指令进行检测以跟踪 exec。每个基本块的计数。

    我有一个小型采样分析器,其作用类似于调试器;它确实将setitimer() 分析计数器注入应用程序,然后它会拦截所有 SIGALRM 并打印当前的$eip 值。

    之前有一些采样分析器采用setitimer 方法,也有类似的profil()。这由glibc/gmon/gmon.cgprof -p 使用(确切地说,由gcc -pg 使用)。 profil() 函数能够分析单个连续代码片段,每 1 或 10 毫秒采样一次虚拟 CPU 时间。还有sprofil()功能。

    还要检查 LD_PRELOAD=/lib/libpcprofile.so PCPROFILE_OUTPUT=output.file - 但我不知道它是否工作或如何工作

    编号问题:

    2) “Callgrind 是 Cachegrind 的扩展。它提供了 Cachegrind 所做的所有信息,以及有关调用图的额外信息。” - 所以它可以提供cachegrind中的任何东西,但它也允许用户关闭缓存模拟:--simulate-cache=no(这是默认值)

    对于速度:根据http://www.valgrind.org/docs/manual/nl-manual.html - Nul valgrind 工具(又名 nulgrind)的手册,它没有额外的仪器,减速是 5 倍。这是因为程序是由 valgrind 自己动态翻译的。所以,不会有 valgrind 比 nulgrind 运行得更快的工具。

    【讨论】:

    【解决方案2】:

    你试过 gprof 吗?它不像 valgrind 那样有很大的开销。

    【讨论】:

    • 不幸的是,gprof 不进行采样,它计算检测函数的 CPU 时间。 (如果您知道得更多,请随时纠正我,但这是我的理解)。
    • sourceware.org/binutils/docs/gprof/… "分析还包括在程序运行时观察程序,并保持程序计数器不时发生的位置的直方图。" - 所以来自 gprof 的直方图实际上是一个 pc 采样配置文件
    • sourceware.org/binutils/docs/gprof/… - 平面轮廓主要基于抽样。 gprof -p,前两列。
    • 它使用采样,但对 OP 没有用,因为它只测量 CPU 时间,而不是挂钟时间,并且 OP 提到他对 read() 和 write() 等阻塞调用特别感兴趣.另见stackoverflow.com/questions/11762372/…
    • @osgx:平面轮廓描述中使用的词语暗示了基于壁时间的采样,但我不相信这是真的。我错了吗?
    【解决方案3】:

    尝试使用来自 RotateRight 的Zoom。它有一个“线程时间”配置,可以对单个进程中的所有线程进行采样,无论它们是运行还是阻塞。

    【讨论】:

    • 是的,但是 399 美元。当然,对于我的目的来说,这似乎是最好的产品,但不是为了爱好编程。
    猜你喜欢
    • 1970-01-01
    • 2011-06-07
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    相关资源
    最近更新 更多