2011-01-12 88 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.