哪种分析器更准确:OProfile或Google Performance Tools?

时间:2009-10-11 12:45:50

标签: profiling oprofile google-perftools

我发现了两个很棒的个人资料:

有没人试过这两个?哪个更好?

1 个答案:

答案 0 :(得分:3)

oprofile更准确;它使用CPU性能监控(内置硬件监控,具有100个性能事件);

和google-perftools libprofiler.so使用setitimer - 操作系统内核的intreval计时器:

$ nm -D libprofiler.so | grep timer
     U getitimer
     U setitimer

间隔计时器由操作系统模拟,它不能超过HZ,据我所知(每秒100次或每秒1000次或300或250次)。我刚刚尝试了10000和100000,但有效率是1000(程序的运行时间是2秒,并且只有来自谷歌的cpu profiler收集的约2000个样本)。这是我的HZ:

$ zgrep HZ= /proc/config.gz
CONFIG_HZ=1000

不知道这对无滴答内核有什么作用。

反过来,oprofile在CPU中使用特殊硬件,这个硬件精确到几个滴答。它可以在您的程序所在的位置测量CPU的每100000或1000000个刻度,并且该值与OS HZ设置无关。此外,它不仅可以在CPU的每个第N个刻度上进行分析,还可以对每个第N个L2高速缓存未命中或每个第N个jmp误预测等进行分析......有数百个硬件性能事件Pentium Pro之后的任何CPU。

oprofile的另一个更好的方面是它可以分析任何内容,任何用户应用程序或所有用户应用程序或内核以及每个应用程序。

但是oprofile需要root才能使用它(AFAIK),它可以用错误的用法冻结你的系统;它需要在内核中启用(内核构建时)。

google-perftools更好的一面是:易于使用;良好的图形和分析功能;不需要root工作。此外,google-perftools中有一个很好的堆分析器。

oprofile和google-perftools / cpuprofiler:

  • 不需要重新编译应用程序(就像gprof / gcov需要的那样)
  • 可以绘制部分调用图(就像在kcachegind中完成的那样,例如1 2; pprof甚至可以通过kcachegrind用callgrind命令绘制)
  • 将测量真实的个人资料(不是像kcachegrind / callgrind /其他基于valgrind的模仿的个人资料)
  • 可移植(oprofile需要来自和支持CPU,但它适用于intel / amd / via / many arms; perftools可以在任何可以获得callstack并要求操作系统安装setitimer的地方工作)