Linux命令-perf

发布于:2025-05-01 ⋅ 阅读:(9) ⋅ 点赞:(0)

perf 命令概述
perf 是一个强大的性能分析工具,用于分析 Linux 系统和应用程序的性能。它提供了多种子命令和参数,可以用于性能数据的收集、分析和可视化。
perf 子命令
以下是 perf 常用的子命令及其功能说明:

子命令 功能说明
annotate 解析 生成的 文件,显示被注释的代码
archive
bench 中内置的 benchmark 工具,目前包含两套针对调度器和内存管理子系统的 benchmark
buildid-cache 管理 的 缓存,每个 ELF 文件都有一个独一无二的 , 用 来关联性能数据与 ELF 文件
buildid-list 列出数据文件中记录的所有
diff 对比两个数据文件的差异,能够给出每个符号(即函数)在热点分析上的具体差异
evlist 列出数据文件 中所有性能事件
inject 该工具读取 工具记录的事件流,并将其定向到标准输出,在被分析代码中的任何一点,都可以向事件流中注入其他事件
kmem 针对内核内存(slab)子系统进行追踪测量的工具
kvm 用来追踪运行在 KVM 虚拟机上的 guest OS
list 列出当前系统支持的所有性能事件,包括硬件性能事件、软件性能事件,以及检查点
lock 分析内核中的锁信息,包括锁的竞争情况、等待延迟等
mem 分析内存存取情况
record 收集采样信息,并将其记录在数据文件中,随后可通过其他工具对数据文件进行分析
report 读取 创建的数据文件,并给出热点分析结果
sched 针对调度器子系统的分析工具
script 执行 或 Python 编写的功能扩展脚本、生成脚本框架、读取数据文件中的数据信息等
stat 执行某个命令,收集特定进程的性能概况,包括 CPI、缓存不命中率等
test 对当前软硬件平台进行健全性测试,可用此工具测试当前的软硬件平台是否能支持 的所有功能
timechart 针对测试期间系统行为进行可视化的工具
top 类似 Linux 中的 命令,对系统性能进行实时分析
trace 关于系统调用的工具
probe 用于定义动态检查点

常用参数
以下是一些常用的 perf 参数及其功能说明:

参数 功能说明
-a, --all-cpus 监控所有 CPU 的性能
-c, --count 设置事件计数周期
-F, --freq 设置采样频率
-g 启用调用图记录
-p, --pid 监控特定进程的性能
-e, --event 指定要监控的事件
-o 指定 的输出文件名称
-i 指定 的输入文件名称
-G, --cgroup 仅在指定的控制组中监控事件
-t 监控指定线程的性能
-C 指定要监控的 CPU 核心
-D, --delay 指定在程序启动后等待多少毫秒再开始测量
-d, --detailed 详细运行 - 启用许多事件
-I, --interval-print 每隔指定毫秒定期打印计数
-n, --null 空运行 - 不启动任何计数器
-r, --repeat 重复命令并打印平均值 + 标准差(最大值:100,永远:0)
-s, --sync 在开始运行前调用
-T, --transaction 硬件事务统计
-v, --verbose 更详细输出(显示计数器打开错误等)

常用示例
记录系统范围的性能数据
使用以下命令记录系统范围的性能数据:

sudo perf record -a -g sleep 10

这将记录系统 10 秒钟的性能数据,并生成一个报告供分析。
查看性能统计信息
使用 perf stat 命令查看性能统计信息:

perf stat -a

这将显示系统范围内的性能统计信息。
实时查看性能热点
使用 perf top 命令实时查看当前系统中的性能热点函数和指令:

perf top --call-graph fractal

这将帮助快速了解系统中的性能瓶颈,并定位到最耗时的函数。
生成火焰图
使用 perf script 和火焰图生成脚本生成火焰图:

perf script > output.txt
./flamegraph.pl output.txt > flame.svg

这将生成一个火焰图,用于可视化性能热点。
分析特定进程的性能
使用 perf record 和 perf report 分析特定进程的性能:

perf record -p <PID> -g sleep 10
perf report -i perf.data

这将记录指定进程 10 秒钟的性能数据,并生成一个报告供分析。
查看支持的性能事件
使用 perf list 命令查看当前系统支持的所有性能事件:

perf list

这将列出所有可用的硬件和软件性能事件。


网站公告

今日签到

点亮在社区的每一天
去签到