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

如何用perf测量进程中所有函数执行时间并批量创建探针事件?

批量创建函数perf探针事件的方案

针对你需要批量跟踪大量函数执行时间的场景,以下几种方法可以避免逐个手动创建探针:

1. 利用perf probe的通配符匹配

perf probe支持通配符批量匹配函数名,直接为符合规则的所有函数创建入口和返回探针:

匹配二进制文件中所有函数

# 为目标二进制的所有函数添加入口和返回探针
sudo perf probe -x ./binary_file_name --add '*' --add '*%return'

按规则过滤函数

如果不需要跟踪所有函数(比如排除编译器生成的内置函数),可以用通配符或过滤规则精准匹配:

# 仅跟踪以"calc_"开头的业务函数
sudo perf probe -x ./binary_file_name --add 'calc_*' --add 'calc_*%return'
# 排除以"__"开头的内置函数
sudo perf probe -x ./binary_file_name --add '*' --add '*%return' --filter 'name !~ "^__"'

2. 结合nm工具批量生成探针命令

通过nm工具提取二进制文件中的函数列表,再批量生成perf probe命令:

步骤1:提取全局函数列表

# 提取二进制中的全局函数(T标记),过滤掉内置函数
nm -D ./binary_file_name | grep ' T ' | grep -v '__' | awk '{print $3}' > func_list.txt

步骤2:批量创建探针

# 循环处理函数列表,逐个添加入口和返回探针
cat func_list.txt | while read func; do
    sudo perf probe -x ./binary_file_name --add "$func" --add "$func%return"
done

或者用xargs简化命令:

nm -D ./binary_file_name | grep ' T ' | grep -v '__' | awk '{print "--add "$3" --add "$3"%return"}' | xargs sudo perf probe -x ./binary_file_name

3. 改用ftrace的function_graph跟踪器

如果不需要单独的perf探针事件,ftrace的function_graph追踪器可以直接记录所有函数的调用、返回及执行时长,无需手动创建探针:

记录函数调用数据

# 跟踪目标程序的所有函数调用,生成trace文件
sudo trace-cmd record -p function_graph ./a.out

查看执行时间报告

# 解析trace文件,查看每个函数的调用次数和执行时长
sudo trace-cmd report

该方案输出会按函数展示调用次数、平均执行时间、总耗时等数据,更适合批量跟踪场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:12:38