3

我找到了两个很棒的分析器:

有没有人试过他们两个?哪个更好?

4

1 回答 1

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 中的特殊硬件,该硬件可以精确到几个刻度。它可以在每 100000 或 1000000 个 CPU 滴答声中测量您的程序所在的位置,并且该值与 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 甚至可以使用callgrind命令通过 kcachegrind 绘制)
  • 将测量真实的配置文件(不是像 kcachegrind/callgrind/其他基于 valgrind 的模拟配置文件)
  • 便携(oprofile 需要 CPU 的支持和支持,但它适用于 intel/amd/via/许多 arm;perftools 可以在任何可以获取调用堆栈并要求操作系统安装 setitimer 的地方工作)
于 2011-11-10T17:19:25.270 回答