FlameGraph/火焰图
FlameGraph(火焰图)是Brendan Gregg提出来的:
http://www.brendangregg.com/flamegraphs.html:
Flame graphs are a visualization of profiled software, allowing the most frequent code-paths to be identified quickly and accurately. They can be generated using my open source programs on github.com/brendangregg/FlameGraph, which create interactive SVGs. See the Updates section for other implementations. Recently I've been helping with d3-flame-graph.
火焰图示例如下(dd+brd+ext4写入,生成方式参见本文后面的case):
其中:
- y轴是调用栈,调用栈越深火焰越高;
- x轴表示抽样数,函数占的越宽,表示被抽到的次数越多。
如果存在"平顶"(plateaus),则该函数可能存在问题,至少是热点:大多数时间都花费在 这个函数上了。
1 Debian install and test
~$ sudo apt-get install linux-perf-4.19 ~$ sudo perf top $ sudo perf top Samples: 4K of event 'cycles:ppp', 4000 Hz, Event count (approx.): 1996089456 Overhead Shared Object Symbol 77.57% emacs-27.1 [.] encode_coding_object 1.35% emacs-27.1 [.] assq_no_quit 0.50% emacs-27.1 [.] face_attr_equal_p 0.48% emacs-27.1 [.] internal_equal.part.36 0.41% [kernel] [k] ___bpf_prog_run 0.34% [kernel] [k] inode_init_always 0.33% emacs-27.1 [.] CHECK_BUFFER 0.33% emacs-27.1 [.] get_visually_first_element 0.28% emacs-27.1 [.] exec_byte_code 0.27% emacs-27.1 [.] set_buffer_internal_2 0.26% emacs-27.1 [.] fast_looking_at 0.25% libc-2.28.so [.] 0x0000000000082528 0.23% emacs-27.1 [.] do_symval_forwarding 0.23% emacs-27.1 [.] line_draw_cost.isra.30
2 CPU火焰图
2.1 test dd for block and ext4
用brd生成4GB的block device,测试裸设备:
~$ sudo modprobe brd rd_size=4000000 ~$ sudo dd if=/dev/urandom of=/dev/ram0 bs=512 # in another start perf: ~$ sudo perf record -F 99 -p $(pidof dd) -g -- sleep 10
查看数据:
# Children Self Samples Command Shared Object Symbol # ........ ........ ............ ....... ................. ....................................... # 93.56% 0.26% 8 dd [kernel.kallsyms] [k] entry_SYSCALL_64_after_hwframe | --93.30%--entry_SYSCALL_64_after_hwframe | --93.27%--do_syscall_64 | |--82.90%--ksys_read | | | --82.74%--vfs_read | | | --82.06%--urandom_read | | | |--54.42%--_extract_crng | | | | | --34.66%--chacha20_block | | | |--18.29%--_crng_backtrack_protect | | | | | --18.13%--_extract_crng | | | | | --11.02%--chacha20_block | | | |--4.45%--crng_backtrack_protect | | | --4.15%--_copy_to_user
生成火焰图: