【问题标题】:Which profiler is more accurate: OProfile or Google Performance Tools?哪个分析器更准确:OProfile 还是 Google 性能工具?
【发布时间】:2009-10-11 12:45:50
【问题描述】:

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

有人试过吗?哪个更好?

【问题讨论】:

    标签: profiling oprofile google-perftools


    【解决方案1】:

    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 错误预测等等......在任何 CPU 中都有数百个硬件性能事件Pentium Pro 之后。

    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/许多武器;perftools 可以在任何可以获取调用堆栈并要求操作系统安装 setitimer 的地方工作)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多