gperf工具github内容翻译学习笔记

本文介绍了如何在程序中链接gperf工具库进行CPU分析,包括编译时添加-lprofiler选项,通过环境变量控制分析过程,以及如何在代码中使用ProfilerStart()和ProfilerStop()。还讨论了不同运行方式和Linux平台上的线程支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是我们在谷歌使用的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评测:

  1. 将环境变量CPUPROFILE定义为要将分析结果转储到的文件名。例如,如果您有一个与libprofiler链接的/bin/ls版本,您可以运行:
    % env CPUPROFILE=ls.prof /bin/ls

  2. 除了定义环境变量CPUPROFILE,还可以定义CPUPROFILESIGNAL。这允许通过你指定的信号号码(signal number)来控制分析。在正常运行情况下,程序必须不使用信号信号号码。在内部,它充当开关,由信号触发,默认情况下,该信号处于关闭状态。例如,如果您有一个/bin/chrome的副本,该副本已链接到libprofiler,那么您可以运行:
    % env CPUPROFILE=chrome.prof CPUPROFILESIGNAL=12 /bin/chrome &
    然后,您可以启动分析:
    % killall -12 chrome
    一段时间后,您可以告诉它停止,这将生成分析文件:
    % killall -12 chrome

  3. 在代码中,将要在对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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值