1 回答

TA貢獻2080條經驗 獲得超4個贊
為什么 -call_tree 不影響 -tree 的輸出
我認為該-call_tree
選項不會改變輸出-tree
的輸出實際上不是一棵樹,它輸出樹的節點(更多關于這在額外的信用部分)。
一般來說,-call_tree 是做什么的?
當您查看使用-png
標志生成的圖像時,您會看到不同之處,沒有-call_tree
標志:
和使用-call_tree
標志:
因此,pprof 沒有嘗試創建 1 個調用樹,而是嘗試根據上下文創建單獨的樹。在我的情況下(將列出它們,因為圖像上的文本不可讀)根是:
testing.(*B).launch
(基準/測試框架)runtime.gcBgMarkWorker
(運行時 GC 的一部分)runtime.bgsweep
(運行時 GC 的一部分)runtime.mcall
(運行時調度程序的一部分)runtime.morestack
(與堆棧有關:))
在非-call_tree
圖像中,這些節點仍然存在,但是從中間樹開始,就好像我們的代碼直接調用這些背景處理一樣。
基本上,該選項的作用是刪除/隱藏函數之間的不頻繁調用,因此您最終會為每組經常相互調用的函數生成一棵樹。
我沒有對此進行測試,但我想 pprof 也會對用戶代碼進行這種上下文感知樹分離??偠灾?,它返回一個主觀上更具可讀性的樹,或者至少是一個更相關的樹。
我上面顯示的輸出節點的確切含義是什么?
該-tree
選項嘗試輸出樹,如圖所示。但是由于它是文本輸出,它一次顯示樹的 1 個節點,context
列中的非縮進行是當前節點,上面的行是調用當前節點的節點,下面的行是調用當前節點的節點(圖中的箭頭)。
這calls%
是傳入或傳出邊緣的“權重”,因此實際上是來自函數或函數調用的百分比。
- 1 回答
- 0 關注
- 121 瀏覽
添加回答
舉報