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