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

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

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

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

周期活动

1 . 一个线程,每秒一次

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

2 . 一个线程,两次每秒

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

3 . 两个线程

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

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

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

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

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

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

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

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

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

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

现在5秒唤醒一次。

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

方差

9 . cpu利用率100%

这是CPU完全被用满的样子

10 . cpu利用率50%

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

11 . cpu利用率25%

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

12 . cpu利用率5%

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

13 . 负载增加

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

14 . 变化的负荷

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

扰动

15 . CPU扰动

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

16 . CPU阻塞

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

17 . 单线程阻塞

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

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

总结

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

实际使用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进行了数据可视化。

性能好的分组 
客户端

服务端

性能差的分组
客户端

服务端


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

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

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

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

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

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

原文链接
本文为云栖社区原创内容,未经允许不得转载。

开源性能可视化工具——FlameScope模式识别相关推荐

  1. 谷歌开源机器学习可视化工具 Facets:从全新角度观察数据

    谷歌开源机器学习可视化工具 Facets:从全新角度观察数据 By 黄小天2017年7月18日 10:51 近日,出于支持 PAIR initiative的目的,谷歌发布了 Facets,一款开源的可 ...

  2. 大数据可视化html模板开源_8个可靠好用的开源数据可视化工具推荐

    数据可视化在数据科学领域中发挥着重要的作用.在不清楚数据的情况下,要监视和调整数据以使其按照应有的方式执行并不容易.这就是数据可视化发挥作用的地方,它把收集到的数据放到一个可视的上下文中,使数据更容易 ...

  3. github可视化工具_Github标星2.6K!微软开源的可视化工具,未免太酷炫了吧

    开源最前线(ID:OpenSourceTop) 猿妹编译 链接:https://visualstudiomagazine.com/articles/2019/10/14/sanddance.aspx ...

  4. 谷歌开源Embedding可视化工具

    谷歌开源Embedding可视化工具 导读 目前,在深度学习中可以利用多种方法或工具将特征信息转换为低维稠密的向量表示(Embedding),且Embedding在自然语言处理.知识图谱.推荐搜索.机 ...

  5. 20个免费和开源数据可视化工具

    20个免费和开源数据可视化工具   数据可视化正在帮助全球的公司识别模式,预测结果并提高业务回报.可视化是数据分析的一个重要方面.简而言之,数据可视化以可视格式传达表格或空间数据的结果.图像有能力清晰 ...

  6. 8个可靠的开源数据可视化工具-你的选择是?

    数据可视化在数据科学领域中发挥着重要的作用.在不清楚数据的情况下,要监视和调整数据以使其按照应有的方式执行并不容易.这就是数据可视化发挥作用的地方,它把收集到的数据放到一个可视的上下文中,使数据更容易 ...

  7. 55种数据可视化开源工具_8种出色的开源数据可视化工具

    55种数据可视化开源工具 数据可视化是获取表格或空间数据并以对人类友好的视觉方式进行传递的机制. 有几种开源工具可以帮助您创建有用的信息图. 在本文中,我们将介绍八个开源的数据可视化工具. 数据包装器 ...

  8. 【工具】55种开源数据可视化工具简介

    工欲善其事必先利其器.本文对55个流行的数据可视化工具进行了简单的介绍,包括著名的D3.js.R.Gephi.Raphaël.Processing.js.Tableau Public.Google C ...

  9. 火爆社区的开源数据可视化工具 datart 新用户体验教程

    最近 datart 开源数据可视化软件,在开源社区和很多社群里火爆了.究竟为啥这么火,我猜想除了产品本身易用之外,跟创始人和团队也有很大关系,毕竟国内开源圈子不算大,哪家产品出自哪里,使用感之类的,大 ...

最新文章

  1. uncompressing linux .................................................后没反应解决办法
  2. CentOS 6.x 播放 mp3 音乐 —— 成功
  3. jQuery中操作元素节点appendTo()与prependTo()的区别
  4. 使用export/import导出和导入docker容器
  5. Linux生成随机数字和字符串
  6. APP搜索如何又快又准?
  7. DSO 中的Windowed Optimization
  8. 8848Android 版本,【8848钛金手机M5评测】拍照配置保持Android阵容顶配堆积_8848 钛金手机M5_手机评测-中关村在线...
  9. NYOJ 570欧拉函数求和(欧拉函数数论入门)
  10. leetcode Generate Parentheses python
  11. MagicDraw-用例图
  12. 这学期她选修了英语 计算机 驾驶三门课程,大一英语翻译答案
  13. idea中项目文件颜色含义
  14. 去百度还是去创新工厂? 信开复还是信彦宏?
  15. IDEA 中定义自己的TODO 并设置快捷键
  16. 网页设计课设【登录注册系统及增删改查】
  17. 【python初学者日记】selenium初体验——“秒杀商品”、“清空购物车”技能养成记(一)
  18. 工具系列 | 使用Lodop进行WEB打印程序开发
  19. Win7安装补丁KB2670838
  20. php在线投稿审稿系统,化学试剂在线投稿审稿系统

热门文章

  1. plc控制可调节阀流程图_PLC五大主流编程语言你会几种?
  2. jquery手写轮播图_jquery 实现轮播图详解及实例代码_jquery_脚本之家
  3. 文件名为空linux,文件系统:隐匿在Linux背后的机制
  4. extjs 月份选择控件_ExtJs日期控件案例(可控制时间的选择) | 学步园
  5. 改变定时器获取传感器频度_称重传感器在高速定量分装系统的应用
  6. php输入安全验证漏洞,PHP 输入验证错误漏洞
  7. 年底要算绩效了,高校青椒有多难?
  8. 美国发布35页科技趋势报告!
  9. 对话诺奖得主:科学离不开国际合作
  10. 袁亚湘委员:加强对数学等基础科学领域支持,技术与科学并重