我正在研究剖面仪,主要是仪器和采样。 我想出了以下信息:
如果以上信息错误,请纠正我。
在此之后,我正在查看执行时间,有些人说仪器需要比采样更多的时间!这是对的吗?
如果是,为什么会这样?在抽样中你必须支付过程之间的上下文切换价格,而在后者你在同一个程序中没有成本
我错过了什么吗?
喝彩! =)
答案 0 :(得分:9)
采样分析器生成的中断通常会给总执行时间增加一个不重要的时间,除非您的采样间隔非常短(例如<1 ms)。
使用检测分析可能会产生很大的开销,例如:对于多次调用的小叶函数,因为与函数的执行时间相比,对检测库的调用可能很重要。
答案 1 :(得分:7)
这取决于你想要的传统。
gprof
做了你提到的那些事情。 Here are some comments on that.
有一种思想流派认为分析是关于测量的。测量什么?好吧,任何事情 - 只是测量。与此同时,您想要得到的是对正在发生的事情的“全局”。 这所学校主要是试图找到“慢功能”,而没有明确定义甚至意味着什么,并告诉你去那里进行优化。
另一所学校说你真的在调试。您希望精确定位某种类型的错误 - 那些不会使程序错误的错误,而是需要太长时间。这些都不是大事。它们是代码中非常精确的点,其中发生的事情比必要的时间花费更多的时间。 究竟有多重要并不重要。重要的是它的位置可以固定。 在这种观点中,分析开销是无关紧要的,测量的准确性也是如此。 衡量的是观察节省了多少时间。
我认为,成功跨越两个阵营的一个分析器是Zoom,因为它在挂钟时间对呼叫堆栈进行采样,并在线路/指令级别显示该时间段的百分比。堆。其他一些分析师也这样做,但大多数不这样做。
我在第二所学校,here's an example你能用它完成的任务。