我一直在寻找Linux采样探查器,而callgrind最接近显示有用的结果。但是,开销估计为20--100x slower than normal。此外,我只对每个函数所花费的时间感兴趣(特别强调阻止诸如read()write()之类的调用,其他任何探查器都不会如实显示这些调用)。

  • 是否有办法关闭多余的选项,以便仅记录最少的数据以生成在各种调用堆栈中花费的时间?
  • callgrind的cachegrind传承是否暗示在缓存配置文件等方面已做过多工作?
  • 我假设callgrind像调试器一样运行。是否可以将其调整为以一定间隔而不是每条指令对过程进行采样?
  • 最佳答案

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

    我有一个小型的采样探查器,其作用类似于调试器。它的确向应用程序中注入(inject)了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更快地工作。

    关于c - 使用callgrind作为采样探查器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3682312/

    10-11 16:44