Gperftools如何在引擎盖下工作?
我正在寻找关于Gperftools如何工作的简单解释。 到目前为止,这是我所了解到的:
除了一般概述,以下是我想要回答的一些具体问题:
我在问这个问题,以推断在Go服务器上使用pprof引入的开销。
它是一个采样分析器。
基本上,有两种类型的分析:要么跟踪程序所做的一切(保持每次调用的计数,将每个函数包含在计时器中,换句话说,用仪器渗透代码),要么让它自己运行但只是暂时检查一下(取样)。
仪器的问题在于它改变了程序的执行方式。 它减慢了程序的速度,同时也扭曲了结果。 (例如,生产代码可能花费太多的时间等待IO,但是代码化代码可能不会展现这一点。)它还收集比统计上必需的更多的数据(如果最终你关心的是最终确定大部分时间花费)。
通过运行strace,您可以看到Google-perftools使用SIGPROF信号(HPCToolkit和Open | SpeedShop)。 据推测,它只是设置一个事件处理程序,然后在内存中徘徊,而不消耗任何CPU周期,直到硬件/操作系统中断您的程序(可能很少出现您喜欢的程序),然后推测它只会保存一份调用堆栈(并计划下一个中断),然后再让控制权返回到您的程序。 调用堆栈列出了程序的功能(以及哪个父功能调用了该功能,因此,“return”语句的工作原理是什么..)。
链接地址: http://www.djcxy.com/p/87955.html上一篇: How does gperftools work under the hood?
下一篇: profiling C code