用于检测采样的分析仪

Syn*_*ror 9 profiler profiling sampling

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

  • 采样:停止程序的执行,取PC并由此推导出程序
  • 检测:向程序添加一些开销代码,以便增加一些指针以了解程序

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

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

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

我错过了什么吗?

干杯!=)

Pau*_*l R 9

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

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


Mik*_*vey 7

这取决于你想要的传统.

gprof做了你提到的那些事情.以下是对此的一些评论.

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

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

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

我在第二所学校,这里有一个你可以用它完成的例子.

以下是对这些问题的更简要讨论.