答案 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: