Łuk*_*Lew 4 profiling oprofile google-perftools
我发现了两个很棒的分析器:
有人尝试过两者吗?哪个更好?
oprofile更准确;它使用 CPU 性能监控(内置硬件监控,具有 100 个性能事件);
和 google-perftools libprofiler.so 使用setitimer- 操作系统内核的 intreval 计时器:
$ nm -D libprofiler.so | grep timer
U getitimer
U setitimer
Run Code Online (Sandbox Code Playgroud)
间隔计时器是由操作系统模拟的,据我所知,它不能超过HZ(每秒100次或每秒1000次或300或250)。我刚刚尝试了 10000 和 100000,但有效率为 1000(程序运行时间为 2 秒,并且 cpu profiler 从 google 收集到的样本只有约 2000 个)。这是我的HZ:
$ zgrep HZ= /proc/config.gz
CONFIG_HZ=1000
Run Code Online (Sandbox Code Playgroud)
不知道这在无滴答内核上如何工作。
反过来,oprofile 使用 CPU 中的特殊硬件,该硬件的精确度可达几个刻度。它可以在 CPU 每 100000 次或 1000000 次滴答时测量程序的位置,并且该值与操作系统 HZ 设置无关。此外,它不仅可以分析 CPU 的每个 N 个时钟周期,还可以分析每个 N 个 L2 缓存未命中或每个 N 个jmp错误预测等等......在 Pentium Pro 之后的任何 CPU 中都有数百个硬件性能事件。
oprofile 的另一个更好的方面是它可以分析任何内容,任何用户应用程序或所有用户应用程序或内核和每个应用程序。
但 oprofile 需要 root 才能使用它(AFAIK),如果使用错误,它可能会冻结您的系统;它需要在内核中启用(当内核构建时)。
google-perftools 更好的一面是:易于使用;良好的绘图和分析能力;无需 root 即可工作。另外,google-perftools 中有一个很好的堆分析器。
oprofile 和 google-perftools/cpuprofiler:
callgrindcommand 进行绘制)| 归档时间: |
|
| 查看次数: |
5763 次 |
| 最近记录: |