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權限才能訪問所有性能計數器。