http://www.brendangregg.com/perf.html#FlameGraphs
Generation
The example flame graph was generated using perf_events and the FlameGraph tools:
# git clone https://github.com/brendangregg/FlameGraph # or download it from github # cd FlameGraph # perf record -F 99 -ag -- sleep 60 # perf script | ./stackcollapse-perf.pl > out.perf-folded # cat out.perf-folded | ./flamegraph.pl > perf-kernel.svg
The first perf command profiles CPU stacks, as explained earlier. I adjusted the rate to 99 Hertz here; I actually generated the flame graph from a 1000 Hertz profile, but I'd only use that if you had a reason to go faster, which costs more in overhead. The samples are saved in a perf.data file, which can be viewed using perf report:
# perf report --stdio [...] # Overhead Command Shared Object Symbol # ........ ............... ..................... ................................... # 72.18% iperf [kernel.kallsyms] [k] iowrite16 | --- iowrite16 | |--99.53%-- vp_notify | virtqueue_kick | start_xmit | dev_hard_start_xmit | sch_direct_xmit | dev_queue_xmit | ip_finish_output | ip_output | ip_local_out | ip_queue_xmit | tcp_transmit_skb | tcp_write_xmit | | | |--98.16%-- tcp_push_one | | tcp_sendmsg | | inet_sendmsg | | sock_aio_write | | do_sync_write | | vfs_write | | sys_write | | system_call | | 0x369e40e5cd | | | --1.84%-- __tcp_push_pending_frames [...]
没有评论:
发表评论