Linux命令-perf
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
这将列出所有可用的硬件和软件性能事件。