simpleperf火焰图-3-perf工具
一、命令介绍
1. perf --help
usage: perf [--version] [--help] [OPTIONS] COMMAND [ARGS]
最常用的 perf 命令有:
annotate: 读取 perf.data(由 perf record 创建)并显示带注释的代码.
archive: 创建一个归档文件,其中包含在 perf.data 文件中找到的 build-id 对应的目标文件.
bench: 基准测试套件的通用框架
buildid-cache: 管理 build-id 缓存
buildid-list: 列出 perf.data 文件中的 buildid
c2c: 共享数据 C2C/HITM 分析器
config: 获取和设置配置文件中的变量
data: 数据文件相关处理
diff: 读取 perf.data 文件并显示差异分析结果
evlist: 列出 perf.data 文件中的事件名称
ftrace: 内核 ftrace 功能的简单包装器
inject: 过滤器,用于向事件流中添加附加信息
kallsyms: 在正在运行的内核中搜索符号
kmem: 用于跟踪/测量内核内存属性的工具
kvm: 用于跟踪/测量 kvm 客户操作系统的工具
list: 列出所有符号事件类型
lock: 分析锁事件
mem: 分析内存访问
record: 运行命令并将其分析结果记录到 perf.data 中
report: 读取 perf.data(由 perf record 创建)并显示分析结果
sched: 跟踪/测量调度程序属性(延迟)的工具
script: 读取 perf.data(由 perf record 创建)并显示跟踪输出
stat: 运行命令并收集性能计数器统计信息
test: 运行健全性测试。
timechart: 用于可视化工作负载期间系统总体行为的工具
top: 系统分析工具。
version: 显示 perf 二进制文件的版本
trace strace: 启发的工具
有关特定命令的更多信息,请参阅“perf help COMMAND”。
2. perf record --help
用法:perf record [<options>] [<command>]
或:perf record [<options>] -- <command> [<options>]
-a, --all-cpus 从所有 CPU 收集系统范围的数据
-b, --branch-any 采样所有已执行的分支
-B, --no-buildid 不收集 perf.data 中的 buildid
-c, --count <n> 采样的事件周期
-C, --cpu <cpu> 需要监控的 CPU 列表 ####
-d, --data 记录采样地址
-D, --delay <n> 程序启动后开始测量前等待的毫秒数(-1:禁用事件启动)
-e, --event <event> 事件选择器。使用“perf list”列出可用事件
-F, --freq <freq 或 'max'> 以此频率进行分析
-g 启用调用图记录
-G, --cgroup <name> 仅监控 cgroup 名称中的事件
-I, --intr-regs[=<任意寄存器>] 在中断时对选定的机器寄存器进行采样,使用“-I?”列出寄存器名称
-i, --no-inherit 子任务不继承计数器
-j, --branch-filter <分支过滤器掩码> 分支堆栈过滤模式
-k, --clockid <clockid> 用于事件的 clockid,参见 clock_gettime()
-m, --mmap-pages <pages[,pages]> mmap数据页和AUX区域跟踪mmap页的数量
-N, --no-buildid-cache 不更新buildid缓存
-n, --no-samples 不采样
-o, --output <file> 输出文件名
-P, --period 记录采样周期
-p, --pid <pid> 记录现有进程id的事件
-q, --quiet 不打印任何消息
-R, --raw-samples 从所有打开的计数器收集原始样本记录
-r, --realtime <n> 使用此RT SCHED_FIFO 优先级收集数据
-S, --snapshot[=<opts>] AUX区域跟踪快照模式
-s, --stat 每个线程计数
-t, --tid <tid> 记录现有线程 ID 上的事件
-T, --timestamp 记录样本时间戳
-u, --uid <user> 要分析的用户
-v, --verbose 更详细(显示计数器打开错误等)
-W, --weight 按权重采样(仅限特殊事件)
--affinity <node|cpu> 将跟踪读取线程的亲和性掩码设置为 NUMA 节点 CPU 掩码或已处理的 mmap 缓冲区的 CPU
--aio[=<n>] 在异步跟踪写入模式下使用 <n> 个控制块(默认值:1,最大值:4)
--all-cgroups 记录 cgroup 事件
--all-kernel 将所有使用的事件配置为在内核空间运行。
--all-user 将所有使用的事件配置为在用户空间运行。
--aux-sample[=<opts>] 示例 AUX 区域
--buildid-all 记录所有 DSO 的 build-id,无论是否命中
--call-graph <record_mode[,record_size]> 设置并启用调用图(堆栈链/回溯):
record_mode:调用图记录模式 (fp|dwarf|lbr)
record_size:如果 record_mode 为 'dwarf',则堆栈记录的最大大小 (<bytes>) 默认值:8192 (bytes) 默认值:fp
--clang-opt <clang options> 编译 BPF scriptlet 时传递给 clang 的选项(由于 NO_LIBBPF=1,因此非内置)
--clang-path <clang path> 用于编译 BPF scriptlet 的 clang 二进制文件(由于 NO_LIBBPF=1,因此非内置)
--control <fd:ctl-fd[,ack-fd] 或 fifo:ctl-fifo[,ack-fifo]> 监听用于控制测量的命令的 ctl-fd 描述符('enable':启用事件,'disable':禁用事件,'snapshot':AUX 区域跟踪快照)。可选地将控制命令完成信息 ('ack\n') 发送到 ack-fd 描述符。或者,ctl-fifo / ack-fifo 将打开并用作 ctl-fd / ack-fd。
--dry-run 解析选项然后退出
--exclude-perf 不记录来自 perf 本身的事件
--filter <filter> 事件过滤器
--group 将计数器放入计数器组
--kcore 复制 /proc/kcore
--kernel-callchains 收集内核调用链
--max-size <size> 限制输出文件的最大大小
--mmap-flush <number> 从 mmap 数据页中提取的最小字节数(默认值:1)
--namespaces 记录命名空间事件
--no-bpf-event 不记录 bpf 事件
--no-buffering 收集数据但不进行缓冲
--num-thread-synthesize <n> 事件合成所需的线程数
--overwrite 使用覆盖模式
--per-thread 使用每线程 mmaps
--phys-data 记录样本物理地址
--proc-map-timeout <n> 每线程 proc mmap 处理超时时间(毫秒)
--running-time 记录 read (:S) 事件的运行/启用时间
--sample-cpu 记录样本 CPU
--strict-freq 如果无法使用指定的频率,则失败
--switch-events 记录上下文切换事件
--switch-max-files <n> 限制切换输出生成的文件数量
--switch-output[=<signal 或 size[BKMG] 或 time[smhd]>] 收到 SIGUSR2(信号)或超过大小或时间阈值时切换输出
--switch-output-event <切换输出事件>切换输出事件选择器。使用“perf list”列出可用事件
--tail-synthesize 在输出末尾合成非样本事件
--timestamp-boundary 记录时间戳边界(第一个/最后一个样本的时间)
--timestamp-filename 将时间戳附加到输出文件名
--transaction 样本事务标志(仅限特殊事件)
--user-callchains 收集用户调用链
--user-regs[=<任意寄存器>] 在中断时对选定的机器寄存器进行采样,使用“--user-regs=?”列出寄存器名称
--vmlinux <file> vmlinux 路径名(由于 NO_DWARF=1,因此非内置路径)
二、使用介绍
1. 测试命令
/data/perf record -a -g -o perf_sos_1.data //可运行, 解析后大都是二进制函数名 /data/perf record -a -g -o perf_sos_2.data --call-graph dwarf //也是都只有符号地址值
没有设置抓几秒的时间参数。
posted on 2025-09-09 15:29 Hello-World3 阅读(45) 评论(0) 收藏 举报