2010-09-25 23 views
2

什麼是「自我」和「全部」列? 「總計」列不會達到100%(更高),看起來像自己。我懷疑自己是非累積性的,總數是。因此,如果methodA調用methodB調用methodC,則在self ID中可以單獨查看每個方法調用的%,而在總方法中,將顯示所有三個方法的總和,methodB將顯示2,依此類推。webkit profiler

這是正確的嗎?

回答

3

假設有此程序:

main()調用A()調用B()調用C(),和C在10秒的循環掛起。 的CPU-分析器會說這樣的事情:

total time: 10 sec 
routine self% inclusive% 
    main  0   100 
    A   0   100 
    B   0   100 
    C  100   100 

C的自我時間爲10秒,100%。其他人的自我時間基本爲零。

其中每一個的總(含)時間將是10秒或100%。你不要添加這些。

另一方面,假設C花了10秒做I/O。 那麼唯一的CPU-分析器會說這樣的事情:

total time: 0 sec 
routine self% inclusive% 
    main  ?   ? 
    A   ?   ? 
    B   ?   ? 
    C   ?   ? 

,因爲它使用的唯一實際的CPU時間很短,基本沒有樣品打它,所以要得到它除以零的百分比。

OTOH如果樣品在掛鐘時間,您將獲得第一個輸出。

更好的探查器類型是在掛鐘時間對採樣堆棧進行採樣,並將包含時間作爲總數的百分比,並在代碼行級別將其提供給您,而不僅僅是函數。這很有用,因爲這是直接測量如果線條執行得少的話可以節省多少,幾乎沒有問題可以隱藏起來。這種分析器的例子是ZoomLTProf,我被告知OProfile可以做到這一點。有a simple method可以與任何語言一起使用,只需要一個調試器。

Here's a discussion of the issues.