ToB企服应用市场:ToB评测及商务社交产业平台
标题:
Linux监控&性能调优分析-perf(3)火焰图
[打印本页]
作者:
光之使者
时间:
2024-8-31 12:03
标题:
Linux监控&性能调优分析-perf(3)火焰图
10 火焰图(flamegraph)
perf火焰图是一种可视化性能分析工具,它通过将性能数据绘制成一个雷同火焰的图,直观地展示了步伐的调用栈,资助开发者快速定位性能瓶颈。特点如下:
可视化性能数据:火焰图将性能数据映射到一个二维的图中,横轴表现采样时间,纵轴表现调用栈。
火焰形状:图中每个矩形代表一个函数调用,矩形的宽度表现该函数占用的时间比例,高度表现调用栈的深度。
颜色:火焰图通常使用热力图的颜色来表现性能开销,红色表现开销较大,蓝色表现开销较小。
perf火焰图的优势
直观:火焰图将复杂的性能数据以一种直观的方式展示出来,让人一目了然。
快速定位题目:通偏激焰图,可以快速定位到占用CPU时间最多的函数,从而有针对性地进行优化。
深入分析:火焰图可以展示完备的调用栈,资助开发者相识步伐的执行流程,并找到性能瓶颈的根源。
可以使用 flamegraphs 创建用 perf 工具记录的体系性能数据的可视化效果。
堆栈跟踪采样是使用 perf 工具剖析 CPU 性能的常用技术。遗憾的是,使用 perf 分析堆栈跟踪的结果大概非常冗长,分析起来也非常耗费精力。 flamegraph 是根据 perf 记录的数据创建的可视化图形,可以更快、更轻松地识别热门代码路径。
10.1 安装 flamegraphs
# yum install js-d3-flame-graph
# 如果没有可到此处下载
# wget https://www.rpmfind.net/linux/centos-stream/9-stream/AppStream/aarch64/os/Packages/js-d3-flame-graph-4.0.7-1.el9.noarch.rpm
复制代码
10.2 在整个体系中创建火焰图
# perf script flamegraph -a -F 99 sleep 60
------------------------------------------------------------
perf_event_attr:
size 120
{ sample_period, sample_freq } 99
sample_type IP|TID|TIME|CALLCHAIN|ID|CPU|PERIOD
read_format ID
disabled 1
inherit 1
freq 1
precise_ip 3
sample_id_all 1
exclude_guest 1
------------------------------------------------------------
------------------------------------------------------------
perf_event_attr:
type 1
size 120
config 0x9
{ sample_period, sample_freq } 99
sample_type IP|TID|TIME|CALLCHAIN|ID|CPU|PERIOD
read_format ID
inherit 1
mmap 1
comm 1
freq 1
task 1
sample_id_all 1
mmap2 1
comm_exec 1
ksymbol 1
bpf_event 1
------------------------------------------------------------
------------------------------------------------------------
perf_event_attr:
type 1
size 120
config 0x9
watermark 1
sample_id_all 1
bpf_event 1
{ wakeup_events, wakeup_watermark } 1
------------------------------------------------------------
dumping data to flamegraph.html
复制代码
10.3 在特定历程上创建 flamegraph
# perf script flamegraph -a -F 99 -p 2041785 sleep 20
复制代码
10.4 表明火焰图
火焰图中的每个方框代表堆栈中的差别函数。y 轴显示堆栈的深度,每个堆栈中最顶端的方框代表实际运行在 CPU 上的函数,下面的所有方框都是其祖先。x 轴显示的是调用图采样数据的群体。
在给定行中,堆栈的子堆栈是根据每个函数的采样次数按x轴降序显示的;x 轴并不代表时间的流逝。单个方框越宽,表现在数据采样时,CPU 上的函数或 CPU 上祖先函数的频率越高。
要显示以前大概未显示的函数名称并进一步研究数据,请单击火焰图中的方框,放大该位置的堆栈:
要返回火焰图的默认视图,请单击 “重置缩放”。
在 flamegraph 中,代表用户空间函数的方框大概被标记为未知,由于函数的二进制被剥离。必须安装可执行文件的 debuginfo 包,假如可执行文件是当地开发的应用步伐,则必须使用调试信息编译该应用步伐。在这种情况下,使用 GCC 中的 -g 选项来显示函数名称或符号。
10.5 利用鲲鹏开发套件下令行工具生成火焰图
下载:
https://www.hikunpeng.com/developer/devkit/download
比如:
# wget https://kunpeng-repo.obs.cn-north-4.myhuaweicloud.com/Kunpeng%20DevKit/Kunpeng%20DevKit%2024.0.RC2/DevKit-CLI-24.0.RC2-Linux-Kunpeng.tar.gz
# tar xzvf DevKit-CLI-24.0.RC2-Linux-Kunpeng.tar.gz
# cd DevKit-CLI-24.0.RC2-Linux-Kunpeng
复制代码
注意X86版本暂时没有生成火焰图功能。
生成火焰图
$ sudo ./devkit tuner hotspot -c 0-56 -d 3 -i 1 -o ./hotspot_cpu -g --package --long-name
[sudo] password for test:
Hotspot Summary Report-1 Time:2024/08/29 11:08:51
================================================================================
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Function Cycles Module Cycles(%)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
MX_Sim_Explicit::NodeData::updateVelocity(double, double) [clon 3,353,102,915 /home/projects/maixi/packages/102/packed/lib/libMxSimExplicit.s 56.29
e ._omp_fn.0] o
MX_Sim_Explicit::Hexa1stR::computeHourglassForce(int, double co 674,768,176 /home/projects/maixi/packages/102/packed/lib/libMxSimExplicit.s 11.33
nst (*) [3][8], double const (*) [3][8], int, double const (*) o
[8][8], double (*) [8], double (*) [3][8], double, double (*) [
...
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
3044 milliseconds time elapsed
Callstack is saved to ./callstack-20240829-110851.log
Flamegraph is saved to ./Flamegraph-20240829-110851.html
The report ./hotspot_cpu.tar is generated successfully.
To view summary report. you can run: devkit report -i ./hotspot_cpu.tar
To view detail report. you can import the report to the WebUI or IDE to view details.
复制代码
生成的火焰图html文件默认生成在用户所在目次,火焰图html文件可使用欣赏器检察。
参考资料
软件测试精品书籍文档下载持续更新
https://github.com/china-testing/python-testing-examples
请点赞,谢谢!
本文涉及的python测试开发库
谢谢点赞!
https://github.com/china-testing/python_cn_resouce
python精品书籍下载
https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
Linux精品书籍下载
https://www.cnblogs.com/testing-/p/17438558.html
https://medium.com/@techhara/profiling-visualize-program-bottleneck-with-flamegraph-3e0c5855b2fe
https://github.com/grafana/pyroscope
https://github.com/flamegraph-rs/flamegraph
https://crates.io/crates/flamegraph
https://middleware.io/blog/flame-graphs/
https://www.hikunpeng.com/document/detail/zh/kunpengdevps/userguide/cliuserguide/KunpengDevKitCli_0065.html
https://joemario.github.io/blog/2016/09/01/c2c-blog/
如需技术支持联系钉ding或微信pythontesting , 邮箱: xurongzhong#126.com
10.6 传统生成火焰图的方法
https://github.com/flamegraph-rs/flamegraph
# git clone https://github.com/brendangregg/FlameGraph # or download it from github
# cd FlameGraph
# perf record -F 99 -a -g -- sleep 60
# perf script | ./stackcollapse-perf.pl > out.perf-folded
# ./flamegraph.pl out.perf-folded > perf.svg
复制代码
参考:
https://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html
这种方式生成的火焰图没有搜索功能。
10.7 Rust flamegraph生成火焰图的方法
https://github.com/flamegraph-rs/flamegraph是Rust开发的火焰图生成工具
# cargo install flamegraph
# flamegraph --open --cmd "record -g" -- gunzip < cmake-3.19.8-Linux-x86_64.tar.gz > cm
[ perf record: Woken up 3 times to write data ]
[ perf record: Captured and wrote 0.690 MB perf.data (4844 samples) ]
复制代码
会在当前目次生成flamegraph.svg
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4