用于检测采样的分析仪

时间:2011-01-12 16:10:11

标签: profiling profiler sampling

我正在研究剖面仪,主要是仪器和采样。 我想出了以下信息:

  • 抽样:停止执行程序,拿PC,从而演绎程序是
  • 检测:添加一些开销代码 到程序,所以它会增加 一些了解程序的指示

如果以上信息错误,请纠正我。

在此之后,我正在查看执行时间,有些人说仪器需要比采样更多的时间!这是对的吗?

如果是,为什么会这样?在抽样中你必须支付过程之间的上下文切换价格,而在后者你在同一个程序中没有成本

我错过了什么吗?

喝彩! =)

2 个答案:

答案 0 :(得分:9)

采样分析器生成的中断通常会给总执行时间增加一个不重要的时间,除非您的采样间隔非常短(例如<1 ms)。

使用检测分析可能会产生很大的开销,例如:对于多次调用的小叶函数,因为与函数的执行时间相比,对检测库的调用可能很重要。

答案 1 :(得分:7)

这取决于你想要的传统。

gprof做了你提到的那些事情。 Here are some comments on that.

有一种思想流派认为分析是关于测量的。测量什么?好吧,任何事情 - 只是测量。与此同时,您想要得到的是对正在发生的事情的“全局”。 这所学校主要是试图找到“慢功能”,而没有明确定义甚至意味着什么,并告诉你去那里进行优化。

另一所学校说你真的在调试。您希望精确定位某种类型的错误 - 那些不会使程序错误的错误,而是需要太长时间。这些都不是大事。它们是代码中非常精确的点,其中发生的事情比必要的时间花费更多的时间。 究竟有多重要并不重要。重要的是它的位置可以固定。 在这种观点中,分析开销是无关紧要的,测量的准确性也是如此。 衡量的是观察节省了多少时间。

我认为,成功跨越两个阵营的一个分析器是Zoom,因为它在挂钟时间对呼叫堆栈进行采样,并在线路/指令级别显示该时间段的百分比。堆。其他一些分析师也这样做,但大多数不这样做。

我在第二所学校,here's an example你能用它完成的任务。

Here's a more brief discussion of the issues.

相关问题