perf top详解

Perf Top 参数详解(按给定顺序)

1. 基础选项

-a, --all-cpus

作用: 在所有CPU上进行系统级收集

perf top -a                    # 监控所有CPU
perf top                       # 默认就是-a

-b, --branch-any

作用: 对任何已执行的分支进行采样

perf top -b                    # 启用分支采样
perf top --branch-any          # 同-b

-c, --count <n>

作用: 采样的事件周期数(每发生n次事件采样一次)

perf top -c 1000000            # 每100万次事件采样一次
perf top -e cache-misses -c 1000  # 每1000次缓存未命中采样一次

-C, --cpu <cpu>

作用: 指定要监控的CPU列表

perf top -C 0                  # 只监控CPU 0
perf top -C 0,1,2              # 监控CPU 0,1,2
perf top -C 0-3                # 监控CPU 0-3
perf top -a -C 0,2-4           # 监控所有CPU,但只显示CPU 0,2,3,4

-d, --delay <n>

作用: 刷新间隔的秒数

perf top -d 1                  # 每秒刷新一次
perf top -d 0.5                # 每0.5秒刷新一次
perf top -d 0                  # 尽可能快地刷新

-D, --dump-symtab

作用: 转储用于性能分析的符号表

perf top -D                    # 转储符号表
perf top -D > symtab.txt       # 将符号表保存到文件

-E, --entries <n>

作用: 显示的条目数

perf top -E 20                 # 显示前20个函数
perf top --entries 50          # 显示前50个函数

-e, --event <event>

作用: 事件选择器。使用'perf list'列出可用事件

perf top -e cycles             # 监控CPU周期(默认)
perf top -e cache-misses       # 监控缓存未命中
perf top -e instructions       # 监控指令数
perf top -e 'cpu-cycles,instructions'  # 监控多个事件
perf top -e '{cycles,instructions}'    # 事件分组

-f, --count-filter <n>

作用: 只显示事件数超过此值的函数

perf top -f 1000               # 只显示采样超过1000次的函数
perf top --count-filter 500    # 只显示采样超过500次的函数

-F, --freq <freq or 'max'>

作用: 采样频率

perf top -F 99                 # 99Hz采样频率
perf top -F 1000               # 1000Hz采样频率
perf top -F max                # 使用最大采样频率
perf top --freq 4000           # 4000Hz采样频率(默认)

-g

作用: 启用调用图记录和显示

perf top -g                    # 启用调用图(默认方式)
perf top -g dwarf              # 使用DWARF调试信息
perf top -g fp                 # 使用帧指针
perf top -g lbr                # 使用最后分支记录

-i, --no-inherit

作用: 子任务不继承计数器

perf top -i                    # 子进程不继承性能计数器
perf top -p 1234 -i            # 监控PID 1234,但不监控其子进程

-j, --branch-filter <branch filter mask>

作用: 分支栈过滤器模式

perf top -j any                # 任何分支
perf top -j any_call           # 任何调用分支
perf top -j any_ret            # 任何返回分支
perf top -j ind_call           # 间接调用
perf top -j aborts             # 事务中止
perf top -j in_tx              # 在事务中
perf top -j no_tx              # 不在事务中
perf top -j cond               # 条件分支
perf top -j save_type          # 保存分支类型

-K, --hide_kernel_symbols

作用: 隐藏内核符号

perf top -K                    # 只显示用户空间符号
perf top --hide_kernel_symbols # 同-K

-k, --vmlinux <file>

作用: 指定vmlinux文件路径

perf top -k /boot/vmlinux-$(uname -r)  # 指定vmlinux文件
perf top --vmlinux /path/to/vmlinux    # 同-k

-M, --disassembler-style <disassembler style>

作用: 指定反汇编器风格

perf top -M intel              # 使用Intel语法反汇编
perf top -M att                # 使用AT&T语法反汇编(默认)
perf top --disassembler-style intel  # 同-M

-m, --mmap-pages <pages>

作用: mmap数据页数

perf top -m 256                # 使用256页缓冲区
perf top --mmap-pages 512      # 使用512页缓冲区
perf top -m 16K                # 使用16KB缓冲区

-n, --show-nr-samples

作用: 显示采样数列

perf top -n                    # 显示采样数
perf top --show-nr-samples     # 同-n

-p, --pid <pid>

作用: 监控现有进程ID的事件

perf top -p 1234               # 监控PID 1234
perf top -p 1234,5678          # 监控多个PID
perf top --pid $(pgrep nginx)  # 监控nginx进程

-r, --realtime <n>

作用: 使用指定的RT SCHED_FIFO优先级收集数据

perf top -r 99                 # 使用RT优先级99
perf top --realtime 80         # 使用RT优先级80

-s, --sort <key[,key2...]>

作用: 按指定键排序

perf top -s comm               # 按进程名排序
perf top -s dso,symbol         # 按DSO和符号排序
perf top -s pid,comm,dso,symbol # 多字段排序

# 可用排序键:
# pid, tid, comm, dso, symbol, parent, cpu, srcline, 
# weight, local_weight, period, period_sys, period_us,
# period_guest_sys, period_guest_us, samples, sample,
# ip, time, addr, simd, type, typeoff, retired, latency

-t, --tid <tid>

作用: 监控现有线程ID的事件

perf top -t 1235               # 监控线程TID 1235
perf top -t 1235,1236          # 监控多个线程

-U, --hide_user_symbols

作用: 隐藏用户空间符号

perf top -U                    # 只显示内核空间符号
perf top --hide_user_symbols   # 同-U

-u, --uid <user>

作用: 要监控的用户

perf top -u root               # 监控root用户
perf top -u 1000               # 监控UID 1000的用户
perf top -u user1,user2        # 监控多个用户

-v, --verbose

作用: 更详细的输出(显示计数器打开错误等)

perf top -v                    # 详细模式
perf top -vv                   # 更详细
perf top -vvv                  # 最详细
perf top --verbose             # 同-v

-w, --column-widths <width[,width...]>

作用: 不调整列宽,使用这些固定值

perf top -w 10,30,20          # 设置列宽为10,30,20
perf top --column-widths 15,40,25  # 设置列宽为15,40,25

-z, --zero

作用: 更新时清零历史记录

perf top -z                    # 每次更新都从零开始
perf top --zero                # 同-z

2. 高级选项

--asm-raw

作用: 显示汇编指令的原始编码(默认)

perf top --asm-raw             # 显示原始汇编编码

--call-graph <record_mode[,record_size],print_type,threshold[,print_limit],order,sort_key[,branch]>

作用: 设置并启用调用图(堆栈链/回溯)

# 完整格式:record_mode[,record_size],print_type,threshold[,print_limit],order,sort_key[,branch]
perf top --call-graph fp,graph,0.5,caller,function
perf top --call-graph dwarf,8192,graph,1.0,callee,address
perf top --call-graph lbr,fractal,0.1,10,caller,function,branch

# 参数详解:
# record_mode:    记录模式 (fp|dwarf|lbr)
# record_size:    如果record_mode是'dwarf',堆栈记录的最大大小(字节),默认:8192
# print_type:     调用图打印风格 (graph|flat|fractal|folded|none)
# threshold:      调用图包含的最小阈值(百分比)
# print_limit:    调用图条目的最大数量
# order:          调用图顺序 (caller|callee)
# sort_key:       调用图排序键 (function|address)
# branch:         将最后分支信息包含到调用图中 (branch)
# value:          调用图值 (percent|period|count)

--children

作用: 累积子函数的调用链并显示总开销

perf top --children            # 显示子函数累积开销

--comms <comm[,comm...]>

作用: 只考虑这些进程中的符号

perf top --comms nginx         # 只显示nginx进程的符号
perf top --comms nginx,httpd   # 只显示nginx和httpd的符号

--demangle-kernel

作用: 启用内核符号反修饰

perf top --demangle-kernel     # 内核符号反修饰

--dsos <dso[,dso...]>

作用: 只考虑这些DSO(动态共享对象)中的符号

perf top --dsos libc.so.6      # 只显示libc中的符号
perf top --dsos libc.so.6,libpthread.so.0  # 只显示多个库中的符号

--fields <key[,keys...]>

作用: 输出字段:overhead, period, sample 加上所有排序键

perf top --fields overhead,symbol,dso
perf top --fields overhead,comm,pid,symbol

--force

作用: 不抱怨,直接执行

perf top --force               # 强制执行,不显示警告

--group

作用: 将计数器放入计数器组

perf top --group               # 启用计数器分组

--hierarchy

作用: 以层次结构显示条目

perf top --hierarchy           # 层次化显示

--ignore-callees <regex>

作用: 在调用图中忽略这些函数的被调用者

perf top --ignore-callees '^__'  # 忽略以__开头的函数的被调用者
perf top --ignore-callees '^_?malloc'  # 忽略malloc相关函数的被调用者

--ignore-vmlinux

作用: 即使找到vmlinux也不加载

perf top --ignore-vmlinux      # 不加载vmlinux

--kallsyms <file>

作用: 指定kallsyms文件路径

perf top --kallsyms /proc/kallsyms  # 指定kallsyms文件(默认)

--max-stack <n>

作用: 设置解析调用链时的最大堆栈深度。默认:kernel.perf_event_max_stack 或 127

perf top --max-stack 64        # 最大堆栈深度64
perf top --max-stack 256       # 最大堆栈深度256

--num-thread-synthesize <n>

作用: 运行事件合成的线程数

perf top --num-thread-synthesize 4  # 使用4个线程进行事件合成

--objdump <path>

作用: 用于反汇编和注解的objdump二进制文件

perf top --objdump /usr/bin/objdump  # 指定objdump路径

--overwrite

作用: 使用后向环形缓冲区,默认:否

perf top --overwrite           # 启用覆盖模式

--percent-limit <percent>

作用: 不显示低于此百分比的条目

perf top --percent-limit 1     # 只显示1%以上的条目
perf top --percent-limit 0.5   # 只显示0.5%以上的条目

--percentage <relative|absolute>

作用: 如何显示过滤条目的百分比

perf top --percentage relative # 相对百分比(默认)
perf top --percentage absolute # 绝对百分比

--proc-map-timeout <n>

作用: 每个线程处理proc mmap的超时时间(毫秒)

perf top --proc-map-timeout 1000  # 超时时间1秒

--raw-trace

作用: 显示原始跟踪事件输出(不使用print fmt或插件)

perf top --raw-trace           # 显示原始跟踪

--show-total-period

作用: 显示总周期数列

perf top --show-total-period   # 显示总周期数

--source

作用: 将源代码与汇编代码交错显示(默认)

perf top --source              # 显示源代码

--stdio

作用: 使用stdio界面

perf top --stdio               # 使用非交互式文本输出
perf top -b --stdio            # 批处理模式+文本输出

--sym-annotate <symbol name>

作用: 要注解的符号

perf top --sym-annotate malloc # 注解malloc函数

--symbols <symbol[,symbol...]>

作用: 只考虑这些符号

perf top --symbols malloc      # 只显示malloc符号
perf top --symbols malloc,free # 只显示malloc和free符号

--tui

作用: 使用TUI界面

perf top --tui                 # 使用文本用户界面(默认)

3. 实用示例

示例1:标准系统级监控

sudo perf top -a -g -d 1 --percent-limit 0.5

示例2:监控特定进程

sudo perf top -p $(pgrep nginx) -g dwarf --stdio

示例3:批处理模式生成报告

sudo perf top -b -n 1 -a -g --percent-limit 0.1 --stdio > top_report.txt

示例4:高级调用图配置

sudo perf top --call-graph dwarf,16384,graph,0.5,10,caller,function -a

示例5:过滤特定符号

sudo perf top --symbols malloc,free,calloc --dsos libc.so.6 -a

示例6:内存访问分析

sudo perf top -e cache-misses --mem-mode load --sort dso,symbol

这些参数可以根据具体需求灵活组合使用。记住,大多数perf top命令需要root权限才能访问所有性能计数器。

posted @ 2025-12-16 14:43  再熬夜是狗呀  阅读(2)  评论(0)    收藏  举报