使用callgrind作为采样分析器?

时间:2010-09-10 04:48:56

标签: c linux profiling valgrind callgrind

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

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

3 个答案:

答案 0 :(得分:1)

3)Callgrind就像动态翻译一样工作,它使用计数仪器代码检测原始代码。对代码中的每个存储器访问指令(用于高速缓存模拟)进行检测,并且(我建议)对每个跟踪执行的类似jmp的指令进行检测。每个基本块的计数。

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

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

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

编号问题:

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

速度:根据http://www.valgrind.org/docs/manual/nl-manual.html - Nul valgrind工具(又名nulgrind)的手册,没有额外的仪器,减速是5倍。这是因为程序是由valgrind本身动态翻译的。因此,valgrind可能没有工具,它可以比nulgrind更快地工作。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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