开源性能可视化工具——FlameScope模式识别

简介: # 文章翻译 [原文链接](http://www.brendangregg.com/blog/2018-11-08/flamescope-pattern-recognition.html) FlameScope是一个新的开源性能可视化工具,它使用次秒级偏移热图和火焰图来分析周期活动、方差、扰动。

文章翻译

原文链接

FlameScope是一个新的开源性能可视化工具,它使用次秒级偏移热图和火焰图来分析周期活动、方差、扰动。我们在Netflix TechBlog上面,发表了技术文章Netflix FlameScope,以及工具的源代码火焰图很好理解,次秒级偏移热图理解起来要困难些(我最近发明的它)。FlameScope可以该帮助你理解后者。

总而言之,次秒级偏移热图是这样的:x轴是一整秒,y轴是这一秒里的几分之一秒。这每个几分之一秒都被称作一个桶(或者说盒),表示这几分之一秒里,事件数量的聚合。盒子颜色深度表示发生的次数,颜色越深表示次数越多。

下图一个真实的CPU上的次秒级偏移热图样本:

1.png

这张图中能分析出什么信息来呢?为了能把各种不同模式区分开来展示,我在这篇文章里先画了一些人工合成的样本。实际使用FlameScope工具时,可以选择你的各个模式,还能生成火焰图,显示对应的代码路径(这里我不展示火焰图)。

周期活动

1 . 一个线程,每秒一次

2.png

线程在每秒钟内的同样的偏移里醒来,做几毫秒的工作,然后回到睡眠。

2 . 一个线程,两次每秒

3.png

每500ms唤醒一次。既可能是两个线程,也可能是一个线程500ms 唤醒一次。

3 . 两个线程

4.png

看起来像两个线程均1s唤醒一次

4 . 一个忙等待线程,每秒一次

5.png

这个线程做约20ms的工作,然后睡1s。这是一个常见的模式,导致每秒钟唤醒抵消匍匐前进。

5 . 一个忙等待线程,两次每秒

6.png

每500ms唤醒一次。有可能是单线程程序,每秒唤醒两次。

6 . 一个计算较密集的忙等线程

7.png

斜率高,每秒做更多的工作,大约是80毫秒。

7 . 一个计算较不密集的忙等线程

8.png

斜率低,每秒做的工作较少,可能只有几毫秒。

8 . 一个忙等待线程,每5秒钟唤醒一次

9.png

现在5秒唤醒一次。

我们可以根据夹角和唤醒的时间间隔,计算每个唤醒的CPU繁忙时间:
busy_time = (1000 ms / (热图行数 时间长度) tan(夹角)
例如45°夹角的线:
busy_time = (1000 ms / (501)) tan(45) = 20ms

方差

9 . cpu利用率100%

10.png

这是CPU完全被用满的样子

10 . cpu利用率50%

11.png

真实的工作负载更像是这样,是由短请求、随机到达组成的。

11 . cpu利用率25%

12.png

相同的工作负载类型,大小在25%。

12 . cpu利用率5%

13.png

相同的工作负载类型,大小在5%。

13 . 负载增加

14.png

在2分钟的尺度上,负载在变重。

14 . 变化的负荷

15.png

每30秒就有5秒的工作负载较重。

扰动

15 . CPU扰动
16.png

时不时地所有CPU都满载个100ms。(比如垃圾回收)

16 . CPU阻塞
17.png

时不时地所有CPU都空载个100ms。(比如等I/O)

17 . 单线程阻塞
18.png

时不时地,只有一个CPU没有idle(表现为粉红色长条,而不是白色长条)。(比如全局锁)

最后这个模式很有趣:它发生在一个当前运行的线程持有一把锁,而其它所有线程都阻塞在这把锁上。
那么该线程在做什么呢?点击FlameScope的粉色线,就能看到此时的火焰图。复杂的性能问题立刻变简单。

总结

你能从这张图中分析出什么结论?
19.png

实际使用FlameScope工具时,可以选择你的各个模式,还能生成火焰图,显示对应的代码路径。

我和同事Martin Spier(也是该工具的主开发人员)11月8日在LinkedIn性能meetup上发表演讲。

祝你使用FlameScope愉快,欢迎截图分享你遇到有趣的模式!

Brendan

实践

需要补充的是,作者最新的工作,将强大的Differential Flame Graph也集成到FlameScope中了,现在交互式地在FlameScope上,选择两个测试集以及对应的时间段,对比两个测试组的事件采样。

我在使用FlameScope时,发现并fix了FlameScope的若干bug。也包括Differential Flame Graph跑不起来的一些bug。之后我便用它来进行了一些性能问题的复现。还发现其中一些有趣的模式。

首先,我想分析两个测试组的调度特征。我对他们分别进行了perf sched record采样,并使用FlameScope进行了数据可视化。

性能好的分组
客户端
image.png
服务端
image.png
性能差的分组
客户端
image.png
服务端
image.png

我们发现性能差的分组,有大量的调度事件,而且发生地非常均匀。性能好的分组则是周期性地繁忙工作若干毫秒(深红色长条),我们还能发现背景里有周期性的轻松任务(浅红色长条)

这个对比,给了我们这两个测试集的调度特征一个直观的感受。但看来分析问题需要借助更多的信息。

于是我使用了Differential Flame Graph分析两个测试集的完整调用栈上的采样。

image.png

该图便给出一个重要线索,两个测试集最重大的区别,在vfs_write->do_sync_write->sock_aio_write->inet_sendmsg->copy_user_enhanced_fast_string这条路径上。(注意由于内核编译优化等原因,调用路径略有不准确)

性能好的测试组,多调用了很多次copy_user_enhanced_fast_string,性能差测试组的则很少。

之后的工作便于FlameScope关系不大了。这便是我使用FlameScope工具进行测试和性能调优的一个实践。Bredan Gregg大神主导的这个软件,对性能数据阐释的直观性真的太强了~

相关文章
|
监控 数据可视化 测试技术
从工作分解到产品分解:如何灵活应用项目管理结构?
在项目管理中,工作分解结构(WBS)和产品分解结构(PBS)是将大型任务分解为可管理步骤的关键方法。本文详细介绍了WBS和PBS的概念、应用场景和实践步骤,并推荐了板栗看板、Asana和Microsoft Project等高效项目管理工具,帮助提升项目管理效率。
724 4
|
机器学习/深度学习 人工智能 自然语言处理
大语言模型的Scaling Law:如何随着模型大小、训练数据和计算资源的增加而扩展
在这篇文章中,我们将介绍使这些模型运作的秘密武器——一个由三个关键部分组成的法则:模型大小、训练数据和计算能力。通过理解这些因素如何相互作用和规模化,我们将获得关于人工智能语言模型过去、现在和未来的宝贵见解。
1678 7
大语言模型的Scaling Law:如何随着模型大小、训练数据和计算资源的增加而扩展
|
11月前
|
Docker 容器
将本地的应用程序打包成Docker镜像
将本地的应用程序打包成Docker镜像
1588 122
|
缓存 资源调度 安全
深入探索Linux操作系统的心脏——内核配置与优化####
本文作为一篇技术性深度解析文章,旨在引领读者踏上一场揭秘Linux内核配置与优化的奇妙之旅。不同于传统的摘要概述,本文将以实战为导向,直接跳入核心内容,探讨如何通过精细调整内核参数来提升系统性能、增强安全性及实现资源高效利用。从基础概念到高级技巧,逐步揭示那些隐藏在命令行背后的强大功能,为系统管理员和高级用户打开一扇通往极致性能与定制化体验的大门。 --- ###
313 9
|
Linux 网络安全
Linux(16)ssh_exchange_identification: read: Connection reset by peer问题
Linux(16)ssh_exchange_identification: read: Connection reset by peer问题
287 0
|
监控 数据可视化 项目管理
WBS任务分解拆解:项目管理中的效率秘诀探讨
WBS(Work Breakdown Structure)是项目管理中将大型复杂项目分解为可管理的小任务的方法。它帮助清晰定义项目目标,确保100%覆盖所有工作,并遵循任务独立性及适当工作包大小原则。WBS通过简化项目、明确责任人、制定工作清单、估算时间和分配资源,促进项目跟踪与控制。使用工具如Zoho Projects,可按阶段创建任务,细化子任务,设定依赖关系,分配资源,以及设置提醒和里程碑,从而有效管理项目执行。
1546 1
说说 Elasticsearch filter 和 post_filter 的区别?
说说 Elasticsearch filter 和 post_filter 的区别?
|
存储
CMake中遍历元素的技巧:foreach命令详解
CMake中遍历元素的技巧:foreach命令详解
844 1
|
NoSQL Cloud Native 关系型数据库
阿里云数据库详细介绍_云数据库大全
阿里云数据库详细介绍_云数据库大全,阿里云数据库大全:RDS关系型数据库如MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等,NoSQL数据库如Redis、Tair、Lindorm和MongoDB,数据仓库如AnalyticDB MySQL版、PostgreSQL、ClickHouse,阿里云还提供数据库管理工具如数据传输DTS、数据库备份DBS、数据库自治服务DAS、数据管理DMS,阿里云百科分享阿里云数据库大全及优惠活动
455 1
|
存储 Linux 测试技术
深度剖析 Linux 的 3 种“拷贝”命令
深度剖析 Linux 的 3 种“拷贝”命令
827 0