gperf工具github内容翻译学习笔记
这是我们在谷歌使用的CPU分析器。使用它有三个部分:将库链接到应用程序、运行代码和分析输出。
如果您可能需要了解它,CPU profiler数据文件格式将在此处单独记录。
Linking in the Library 链接gperf工具库
在库中链接要将CPU分析器安装到可执行文件中,请将-lprofiler在代码编译阶段添加到可执行文件的链接中。(也可以在运行时使用LD_PRELOAD添加分析器,例如%env LD_PRELOAD=“/usr/lib/libprofiler.so”,但不一定推荐这样做。)
这不会打开CPU分析;它只是插入代码。出于这个原因,在开发过程中总是将-lprofiler链接到二进制文件中是很常见而且可行的;这就是我们在谷歌所做的。(但是,由于任何用户都可以通过设置环境变量来打开探查器,因此不一定建议在生产运行系统中安装与探查器链接的二进制文件。)
Running the Code 运行你的代码
对于给定的可执行文件的运行,有几种方法可以实际启用CPU评测:
-
将环境变量CPUPROFILE定义为要将分析结果转储到的文件名。例如,如果您有一个与libprofiler链接的/bin/ls版本,您可以运行:
% env CPUPROFILE=ls.prof /bin/ls
-
除了定义环境变量CPUPROFILE,还可以定义CPUPROFILESIGNAL。这允许通过你指定的信号号码(signal number)来控制分析。在正常运行情况下,程序必须不使用信号信号号码。在内部,它充当开关,由信号触发,默认情况下,该信号处于关闭状态。例如,如果您有一个/bin/chrome的副本,该副本已链接到libprofiler,那么您可以运行:
% env CPUPROFILE=chrome.prof CPUPROFILESIGNAL=12 /bin/chrome &
然后,您可以启动分析:
% killall -12 chrome
一段时间后,您可以告诉它停止,这将生成分析文件:
% killall -12 chrome
-
在代码中,将要在对
ProfilerStart()
和ProfilerStop()
的调用中分析的代码括起来。(这些函数在<gperftools/profiler.h>
中声明。)
ProfilerStart()
将把分析结果文件名作为参数。
在Linux2.6及更高版本中,评测可以正确地与线程一起工作,自动评测所有线程。在Linux2.4中,评测只评测主线程(由于涉及itimers和线程的内核错误)。分析可以正确地处理子进程:每个子进程都有自己的配置文件和自己的名称(通过将CPUPROFILE与子进程id组合生成)。
出于安全原因,CPU评测不会写入文件,因此无法用于setuid程序。
请参阅头文件gperftools/profiler.h
来查看高级用法相关的函数,包括ProfilerFlush()
和ProfilerStartWithOptions()
。
原网站:https://gperftools.github.io/gperftools/cpuprofile.html