发布于 2011-11-10 09:19:25
oprofile更精确;它使用CPU性能监视(内置在硬件监控中的性能事件为100个);
libprofiler.so使用操作系统内核的setitimer
- intreval计时器:
$ nm -D libprofiler.so | grep timer
U getitimer
U setitimer
据我所知,间隔计时器是由OS模拟的,它不能超过HZ
(每秒100次,每秒1000次,或300次或250次)。我刚刚尝试了10000和100000,但有效速率是1000 (运行时的程序是2秒,只有~2000个样本从谷歌收集的cpu分析器)。这是我的HZ:
$ zgrep HZ= /proc/config.gz
CONFIG_HZ=1000
不知道这将如何在无痒内核上工作。
反过来,oprofile在CPU中使用特殊的硬件,这个硬件可以精确到几个刻度。它可以测量程序所在的位置,在CPU的每1000000或1000000个刻度处,并且这个值不绑定到OS设置。它不仅可以描述CPU的每一个N-刻度,而且还可以描述每一个N- L2缓存丢失或每一个N- jmp
错误预测等.Pentium Pro之后的任何CPU中都有数百个硬件性能事件。
oprofile的另一个更好的方面是它可以分析任何东西,任何用户应用程序或所有用户应用程序或内核以及每个应用程序。
但是oprofile需要root才能使用它(AFAIK),它可以冻结您的系统,错误的使用;它需要在内核中启用(当内核构建时)。
谷歌工具更好的一面是:易于使用;良好的绘图和分析能力;不需要根本的工作。另外,google工具中有一个很好的堆分析器。
oprofile和google-perftools/cpuprofiler:
https://stackoverflow.com/questions/1550615
复制相似问题