perf top主要用於實時分析各個函數在某個性能事件上的熱度,能夠快速的定位熱點函數,包括應用程序函數、
模塊函數與內核函數,甚至能夠定位到熱點指令。默認的性能事件爲cpu cycles。
[root@localhost neptuneTest]# perf top -p `pidof mysqld`
Samples: 221 of event 'cycles', Event count (approx.): 10810377, UID: mysql
10.34% mysqld [.] my_strnncollsp_utf8
5.70% [kernel] [k] _spin_lock_irqsave
5.66% libc-2.12.so [.] __memset_sse2
5.55% [kernel] [k] remove_wait_queue
5.16% libc-2.12.so [.] __GI___strcmp_ssse3
4.36% [kernel] [k] __audit_syscall_exit
3.39% [kernel] [k] lookup_ioctx
3.28% [kernel] [k] find_next_bit
3.22% mysqld [.] lex_one_token(YYSTYPE*, THD*)
2.69% mysqld [.] Item::val_bool()
2.60% [kernel] [k] __do_softirq
2.53% mysqld [.] Protocol::send_result_set_row(List<Item>*)
2.52% [kernel] [k] local_bh_enable_ip
2.51% mysqld [.] my_strnncoll_binary
2.51% libc-2.12.so [.] memcpy
第一列:符號引發的性能事件的比例,默認指佔用的cpu週期比例。
第二列:符號所在的DSO(Dynamic Shared Object),可以是應用程序、內核、動態鏈接庫、模塊。
第三列:DSO的類型。[.]表示此符號屬於用戶態的ELF文件,包括可執行文件與動態鏈接庫)。[k]表述此符號屬於內核或模塊。
第四列:符號名。有些符號不能解析爲函數名,只能用地址表示。
常用交互命令:
h:顯示幫助
UP/DOWN/PGUP/PGDN/SPACE:上下和翻頁。
a:annotate current symbol,註解當前符號。能夠給出彙編語言的註解,給出各條指令的採樣率。
d:過濾掉所有不屬於此DSO的符號。非常方便查看同一類別的符號。
P:將當前信息保存到perf.hist.N中。
常用命令行參數:
-e :指明要分析的性能事件。
-p :Profile events on existing Process ID (comma sperated list). 僅分析目標進程及其創建的線程。
-k :Path to vmlinux. Required for annotation functionality. 帶符號表的內核映像所在的路徑。
-K:不顯示屬於內核或模塊的符號。
-U:不顯示屬於用戶態程序的符號。
-d :界面的刷新週期,默認爲2s,因爲perf top默認每2s從mmap的內存區域讀取一次性能數據。
-G:得到函數的調用關係圖。
perf top -G [fractal],路徑概率爲相對值,加起來爲100%,調用順序爲從下往上。
perf top -G graph,路徑概率爲絕對值,加起來爲該函數的熱度。