You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

perf采用fp调用图生成火焰图失败,提示无栈计数求解

解决perf生成火焰图时"ERROR: No stack counts found"的问题

针对你在x86 CentOS系统上使用GCC 10编译的RelWithDebInfo版本Google Benchmark,用--call-graph fp采集perf数据后无法生成火焰图的问题,以下是几种可行的排查和解决方法:

1. 过滤无效栈帧并强制解析

--call-graph fp生成的栈帧可能包含无法被stackcollapse-perf.pl识别的内容(比如[unknown]函数、寄存器标记),可以先过滤无效行,或强制解析所有栈帧:

  • 过滤未知函数:
    perf script | grep -v "\[unknown\]" | ~/FlameGraph/stackcollapse-perf.pl | ~/FlameGraph/flamegraph.pl > flamegraph.svg
    
  • 使用--all参数强制解析:
    perf script | ~/FlameGraph/stackcollapse-perf.pl --all | ~/FlameGraph/flamegraph.pl > flamegraph.svg
    

2. 编译时强制保留帧指针

RelWithDebInfo模式下GCC 10可能默认开启了-fomit-frame-pointer,导致--call-graph fp的栈回溯不完整,符号信息缺失。重新编译时添加帧指针保留选项:

cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_CXX_FLAGS="-fno-omit-frame-pointer" ..

编译完成后重新运行基准测试并采集perf数据。

3. 增加perf采样量

如果采样次数过少,stackcollapse-perf.pl可能无法统计到有效栈计数。提高采样频率或延长采样时长:

perf record -F 99 -g fp ./your_benchmark_binary

-F 99表示每秒采样99次(避免超过系统默认的采样上限),-g fp指定帧指针调用图,采集完成后再执行火焰图生成命令。

4. 适配stackcollapse-perf.pl的解析规则

旧版本的stackcollapse-perf.pl可能无法匹配当前perf的输出格式。打开脚本查看解析栈帧的正则表达式,调整规则以适配你的perf script输出(比如匹配函数名、地址的格式)。


内容的提问来源于stack exchange,提问作者thebugger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 22:57:38