gperftools 是如何工作的?
How does gperftools work under the hood?
我正在寻找 gperftools 工作原理的简单说明。到目前为止,这是我学到的:
- 它运行是一个停止世界的采样器。换句话说,它会定期停止正在分析的程序以收集信息。
- Golang 的 pprof 库底层使用了 gperftools。
除了一般概述之外,这里还有一些我想回答的具体问题:
- gperftools 是“event based profiler" or "instrumentation profiler”吗?据我了解,这些分析器修改程序的方式 运行s 并通过这些修改收集样本
- gperftools 配置文件 OS 中的 'level' 是什么?它是否像 SystemTap or perf 那样分析内核?
- 在高流量生产服务器上 运行 gperftools 安全吗?
我问这个问题是为了推断在 Go 服务器上使用 pprof 引入的开销。
它是一个采样分析器。
基本上,有两种类型的分析:要么跟踪程序所做的一切(记录每次调用,将每个函数包装在计时器中,换句话说,用你的工具渗透代码)要么你让它 运行 自己但只是不时地检查一下(取样)。
检测的问题在于它改变了程序的执行方式。它会减慢程序速度,同时也会扭曲结果。 (例如,生产代码可能在等待 IO 上花费了太多时间,但经过检测的代码可能不会表现出这一点。)它还收集了比统计上必要的多得多的数据(如果最终你关心的只是确定大部分时间在哪里花了)。
通过 运行ning strace,您可以看到 Google-perftools 使用 SIGPROF 信号工作(HPCToolkit 和 Open|SpeedShop 也是如此)。据推测它只是设置一个事件处理程序然后在内存中徘徊,不消耗任何 CPU 周期,直到 hardware/OS 中断你的程序(这可以像你喜欢的那样不频繁),然后大概它只是保存在将控制 return 交给您的程序之前,调用堆栈的副本(并安排下一个中断)。调用堆栈列出了您的程序执行的函数(以及哪个父函数调用了该函数,等等,这就是 "return" 语句的工作方式......)。
我正在寻找 gperftools 工作原理的简单说明。到目前为止,这是我学到的:
- 它运行是一个停止世界的采样器。换句话说,它会定期停止正在分析的程序以收集信息。
- Golang 的 pprof 库底层使用了 gperftools。
除了一般概述之外,这里还有一些我想回答的具体问题:
- gperftools 是“event based profiler" or "instrumentation profiler”吗?据我了解,这些分析器修改程序的方式 运行s 并通过这些修改收集样本
- gperftools 配置文件 OS 中的 'level' 是什么?它是否像 SystemTap or perf 那样分析内核?
- 在高流量生产服务器上 运行 gperftools 安全吗?
我问这个问题是为了推断在 Go 服务器上使用 pprof 引入的开销。
它是一个采样分析器。
基本上,有两种类型的分析:要么跟踪程序所做的一切(记录每次调用,将每个函数包装在计时器中,换句话说,用你的工具渗透代码)要么你让它 运行 自己但只是不时地检查一下(取样)。
检测的问题在于它改变了程序的执行方式。它会减慢程序速度,同时也会扭曲结果。 (例如,生产代码可能在等待 IO 上花费了太多时间,但经过检测的代码可能不会表现出这一点。)它还收集了比统计上必要的多得多的数据(如果最终你关心的只是确定大部分时间在哪里花了)。
通过 运行ning strace,您可以看到 Google-perftools 使用 SIGPROF 信号工作(HPCToolkit 和 Open|SpeedShop 也是如此)。据推测它只是设置一个事件处理程序然后在内存中徘徊,不消耗任何 CPU 周期,直到 hardware/OS 中断你的程序(这可以像你喜欢的那样不频繁),然后大概它只是保存在将控制 return 交给您的程序之前,调用堆栈的副本(并安排下一个中断)。调用堆栈列出了您的程序执行的函数(以及哪个父函数调用了该函数,等等,这就是 "return" 语句的工作方式......)。