2014-10-27 91 views
0

我希望看到函數及其所有後代使用perf報表所花費的時間比例。也就是說,假如我有類似在perf圖中顯示累計週期

void foo() 
{ 
    biz(); // 3,300 cycles 
    baz(); // 3,300 cycles 
    // ...  100 cycles 
} 

int main() 
{ 
    foo(); 
    bar(); // 3,300 cycles 
    return 0; 
} 

和功能barbazbiz了每3300個週期,foo本身只用了100次,那麼我想看到這樣一個圖:

main 100% 
| 
+--- foo 67.0% (1.0%) 
| | 
| +--- biz 33.0% 
| +--- baz 33.0% 
| 
+--- bar 33.0% 

回答

0

你必須記錄與-g選項的數據收集調試信息(從命令的幫助:「你調用圖(堆棧鏈/回溯)記錄」)。

然後,顯示調用圖如預期,添加選項--stdio,有一個平坦的,但分層輸出,否則你將進入一個互動的ncurses模式。

+0

這是如何產生像上面這樣的圖形?所有'--stdio'都會轉儲調用堆棧。 – JRG 2014-10-28 16:57:27

+0

你是對的,我很抱歉,我玩過報告選項,但它似乎perf不能顯示這種累積遞減callgraph。它首先集中於符號排序,然後爲每個符號提供調用鏈。 – amigadev 2014-11-04 09:11:28

+0

你應該看看:http://www.rotateright.com/zoom/ 他們提到在縮放3.3.2(最新版本)發行說明,他們已經刪除的許可限制(移動到一個免費的軟件產品)。 – amigadev 2014-11-04 09:25:59