2011-01-12 80 views
7

我正在研究轮廓仪之间的主要仪器和取样。 我已经想出了以下信息:轮廓仪检测与取样

  • 采样:停止程序的执行,以PC,因而推断是该方案是
  • 插桩:增加一些额外开销代码 的程序,所以它会增加 一些知道程序的指针

如果上面的信息是错误的纠正我。

之后,我正在看执行的时间,有人说仪表比取样需要更多的时间!它是否正确?

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

我是否错过了什么?

干杯! =)

+0

告诉什么程序是通过采样PC做就像是试图通过只采样秒报时。应用于真正的软件,通常它说程序“在”内核中没有任何意义。堆栈样本更有用,因为它们告诉*为什么*它在那里。仪器就像试图告诉时间,其中几个数字已被擦除,就像它从2点跳到7点。这是因为它使用函数而不是代码行。打了一个大功能,你又回来猜测。 –

回答

6

除非采样间隔非常短(例如< 1 ms),否则采样分析器产生的中断通常会在整个执行时间内增加一个微不足道的时间量。使用仪器化的分析可能会有大的开销,例如,在调用多次的小叶函数上,因为与函数的执行时间相比,对仪表库的调用可能很重要。

4

这取决于你想要的传统。

gprof可以完成你提到的两件事。 Here are some comments on that.

有一个思想流派认为是测量。测量什么?那么,任何事情 - 只要测量。随着这一点,你想要得到的是一个关于发生的事情的“大图”。 这所学校看起来主要是试图找到“慢速功能”,而没有明确界定甚至意味着什么,并告诉你在那里寻找优化。

另一所学校说你真的在调试。你想精确定位某种类型的错误 - 那些错误不会导致程序错误,而是花费太长时间。这些不是大事。在代码中,它们是非常精确的点,发生的事情会花费比必要更多的时间。 究竟多少不重要。重要的是它的位置可以固定。 从这个角度来看,分析开销并不重要,测量的准确性也是如此。 测量的是看到节省了多少时间。

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

我在第二所学校,here's an example你可以用它来完成。

Here's a more brief discussion of the issues.