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 关注
- 85 浏览
添加回答
举报