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

如何优化perf数据呈现?过滤内核调用仅展示自研程序函数耗时

嗨,针对你想聚焦自研board pilot程序函数耗时占比、过滤内核调用的需求,不管是用perf原生工具直接输出,还是生成火焰图后筛选,都有成熟的解决方案,完全可以避开那些标记为(k)和(.)的内核调用,下面给你详细拆解:

一、用perf直接过滤,只展示自研程序函数

如果你不想生成火焰图,直接通过perf报告查看函数耗时占比,可以通过以下方式过滤:

  • 采集阶段精准定位进程:先找到board pilot的进程ID(用pidof board_pilot获取),然后只采集该进程的调用栈数据:
    perf record -g -p $(pidof board_pilot) -- sleep 30
    
    这里-g是记录调用栈,sleep 30是采集30秒的数据,你可以根据需求调整时长。
  • 生成报告时过滤内核与非目标进程:采集完成后,用以下命令生成只包含board pilot用户态函数的报告:
    perf report --exclude-kernel --comm=board_pilot
    
    其中--exclude-kernel会直接排除所有内核空间的样本(对应你提到的(k)和(.)标记),--comm=board_pilot确保只展示属于目标进程的函数,这样你就能看到自研程序各函数的耗时占比了。
二、火焰图的过滤方案

如果习惯用火焰图做可视化分析,也有两种方式过滤内核调用:

1. 生成火焰图前过滤数据

用FlameGraph工具链时,可以在转换折叠栈的阶段就过滤掉内核相关的行:

# 导出perf脚本数据并过滤内核调用,生成折叠栈文件
perf script | grep -v "(k)" | grep -v "\." | stackcollapse-perf.pl > board_pilot.folded
# 生成过滤后的火焰图
flamegraph.pl board_pilot.folded > board_pilot_flame.svg

这里grep -v "(k)"和grep -v "\."会剔除所有带内核标记的栈帧,剩下的就只有自研程序的函数调用栈了。

2. 生成火焰图后交互过滤

如果你已经生成了包含内核调用的火焰图(SVG格式),不用重新生成,打开SVG后可以利用火焰图的交互功能过滤:

  • 在火焰图的搜索框中输入board_pilot(或者你的自研函数的前缀/关键词),匹配的函数栈会被高亮;
  • 点击搜索结果旁的「Hide unmatched」按钮,就能隐藏所有不匹配的内核调用部分,只保留自研程序的函数栈进行分析。

另外,如果你的自研函数有统一的命名前缀(比如bp_开头),可以把搜索关键词换成前缀,过滤会更精准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:07:57