perf record
记录运行的程序数据
基本参数
-F, --freq=:设置采样频率(每秒的样本数)。
-p, --pid=:监控指定的进程 ID。
-t, --tid=:监控指定的线程 ID。
-g:记录调用栈信息,用于生成火焰图等。
-o, --output=:指定输出文件,默认为 perf.data
–sleep-max=:设置最大睡眠时间
–call-graph=:设置调用栈记录模式,如 dwarf(更精确)或 fp(基于帧指针)
使用示例
perf record -F 99 -p 12345 -g -- sleep 60
这条命令以 99 Hz 的频率监控 PID 为 12345 的进程,同时记录调用栈信息,并在 60 秒后结束
perf record -g -o perf2.data --call-graph=dwarf -b ./programanalysis/build-clang/bin/pa-llvm --pa-dir=/docker/pa --project=pa --log-level=info --cg-build /usr/local/bin/clang++ -DSQLITE_ENABLE_COLUMN_METADATA -DSQLITE_ENABLE_JSON1 -I/docker/programanalysis/external/SQLiteCpp/sqlite3 -I/docker/programanalysis/external/SQLiteCpp/include -O2 -gline-tables-only -Wall -Wextra -Wno-unused-variable -Wno-unused-parameter -fPIC -Wall -Wextra -Wpedantic -Wswitch-enum -Wshadow -Wno-long-long -g -fPIC -fstack-protector -std=c++17 -o CMakeFiles/SQLiteCpp.dir/src/Backup.cpp.o -c /docker/programanalysis/external/SQLiteCpp/src/Backup.cpp
生成perf2.data
perf report
基本参数
-i, --input=:指定输入文件,默认是 perf.data。
-g, --call-graph:显示调用图。这个选项后面可以跟不同的参数来指定调用图的样式,如 graph、flat 等
–dsos=<dso[,dso,…]>:仅显示指定动态共享对象(库)的性能数据。
–symbols=<symbol[,symbol,…]>:仅显示指定函数的性能数据。
perf annotate
基本参数
-s, --symbol=:指定要注释的符号(通常是函数名)
-l, --line:显示行号(如果可用)
–asm-raw:显示原始汇编代码
–no-source:不显示源代码,只显示汇编代码
–source:强制显示源代码(如果可用)
-d, --dso=:指定动态共享对象(库)
-i, --input=:从指定的文件读取性能数据(默认是 perf.data)
使用示例
perf record -g -o perf2.data --call-graph=dwarf -b ./programanalysis/build-clang/bin/pa-llvm --pa-dir=/docker/pa --project=pa --log-level=info --cg-build /usr/local/bin/clang++ -DSQLITE_ENABLE_COLUMN_METADATA -DSQLITE_ENABLE_JSON1 -I/docker/programanalysis/external/SQLiteCpp/sqlite3 -I/docker/programanalysis/external/SQLiteCpp/include -O2 -gline-tables-only -Wall -Wextra -Wno-unused-variable -Wno-unused-parameter -fPIC -Wall -Wextra -Wpedantic -Wswitch-enum -Wshadow -Wno-long-long -g -fPIC -fstack-protector -std=c++17 -o CMakeFiles/SQLiteCpp.dir/src/Backup.cpp.o -c /docker/programanalysis/external/SQLiteCpp/src/Backup.cpp
perf annotate -i perf2.data --source
annotate界面操作
enter:光标call汇编命令进行跳转
l:显示代码所在的文件路径
s:切换源码显示
p:切换百分比类型(局部/全局)
FlameGraph
Log in as a root user.
git clone https://github.com/brendangregg/FlameGraph # or download it from GitHub
cd FlameGraph
perf record -F 99 -a -g – sleep 60
perf script | ./stackcollapse-perf.pl > out.perf-folded
./flamegraph.pl out.perf-folded > perf.svg
firefox perf.svg # or any other web browser, etc.