文章翻译原文链接FlameScope是一个新的开源性能可视化工具,它使用亚秒级偏移热图和火焰图来分析循环活动、方差、扰动。我们在NetflixTechBlog上发布了技术文章NetflixFlameScope,以及该工具的源代码。火焰图很容易理解,亚秒级偏移热图更难理解(我最近发明的)。FlameScope应该可以帮助您理解后者。总而言之,亚秒级偏移热图如下所示:x轴是整秒,y轴是几分之一秒。这些小数秒中的每一个都称为一个桶(或盒子),它表示这一小数秒内事件数量的聚合。方框的颜色深浅表示出现的次数,颜色越深代表出现的次数越多。下图是真实CPU上的亚秒级offset热力图样例:这张图能分析出什么信息?为了区分和展示各种模式,我在本文中先画了一些人工合成的样本。在实际使用FlameScope工具的时候,可以选择你的各种模式,也可以生成火焰图来展示对应的代码路径(这里就不展示火焰图了)。周期性活动1.线程每秒在同一偏移量处唤醒一次线程,它会工作几毫秒,然后返回休眠状态。2.每500ms每秒唤醒两次的线程。可能是两个线程,也可能是一个线程每500ms唤醒一次。3.两个线程看起来都是每1s唤醒一次4.一个繁忙的等待线程,这个线程每秒做一次大约20ms的工作,然后休眠1s。这是一种常见的模式,它会导致唤醒偏移每秒都向前移动。5.一个忙等待线程,每500毫秒每秒唤醒两次。它可能是一个单线程程序,每秒唤醒两次。6.一个计算密集型的busy-wait线程斜率高,每秒做的工作多,大约80毫秒。7.计算密集度较低的忙等待线程斜率较低,每秒做的工作较少,可能是几毫秒。8.一个每5秒唤醒一次的繁忙等待线程现在每5秒唤醒一次。我们可以根据角度和唤醒时间间隔计算每次唤醒的CPU忙时间:busy_time=(1000ms/(heatmaprownumbertimelength))tan(angle)比如一条45的线°angle:busy_time=(1000ms/(501))tan(45)=20msVariance9.cpuutilization100%这是CPU完全被使用的情况10.cpuutilization50%真实的工作负载更像是这样,它由short组成,由请求、随机到达组成。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没有空闲(显示为粉色条而不是白色条)。(比如全局锁)最后这个模式很有意思:当当前正在运行的线程持有一个锁,并且所有其他线程都被这个锁阻塞时,就会发生这种情况。那么这个线程在做什么呢?点击FlameScope中的粉色线条,可以看到此时的火焰图。复杂的性能问题立即变得简单。总结一下你从这张图中可以分析出什么结论?在实际使用FlameScope工具时,可以选择你的各种模式,生成火焰图来显示相应的代码路径。我的同事MartinSpier(也是该工具的首席开发人员)和我将在11月8日的LinkedIn绩效聚会上发表演讲。祝您使用FlameScope愉快,欢迎分享您遇到的有趣模式的屏幕截图!Brendan实践需要补充的是,作者最新的作品将强大的DifferentialFlameGraph集成到了FlameScope中。现在在FlameScope上交互,选择两个测试集和对应的时间段,比较两个测试组的事件采样。当我使用FlameScope时,发现并修复了FlameScope中的几个错误。它还包含一些DifferentialFlameGraph无法运行的错误。然后我用它来重现一些性能问题。我还发现了一些有趣的模式。首先,我想分析两个测试组的调度功能。我分别对它们进行perfschedrecord采样,并使用FlameScope进行数据可视化。性能好的分组client?服务器端性能差的分组client服务器端我们发现性能差的分组有大量的调度事件,而且发生的很均匀。性能好的组会周期性地忙几毫秒(深红色条),我们也可以发现后台有周期性的轻任务(浅红色条)。这个对比让我们对两个测试集的性能调度特性有一个直观的感受。但似乎需要更多的信息来分析问题。所以我用DifferentialFlameGraph对两个测试集的fullcallstack上的采样进行了分析。这个图给出了一个重要的线索,两个测试集最显着的区别在vfs_write->do_sync_write->sock_aio_write->inet_sendmsg->copy_user_enhanced_fast_string的路径上。(注意由于内核编译优化等原因,调用路径略有不准确)在性能好的测试组中,多次调用copy_user_enhanced_fast_string,而在性能差的测试组中,调用次数很少。之后,FlameScope的便利性与工作关系不大。这是我使用FlameScope工具进行测试和性能调优的一个实践。BredanGregg主导的软件在解读性能数据方面真的很直观~本文作者:Lululululu阅读原文。
