减少EC2上性能测试的可变性:设置和关键结果

||性能分析性能EC2测试

在MongoD188金宝搏手机客户端安卓下载B的性能团队,我们使用EC2运行日常的系统性能测试。建立一个持续集成系统进行性能测试后,我们意识到有随机变化在我们的平台和系统配置的来源产生很多我们的研究结果的不可再现。从平台的运行变化的运行比变化MongoDB中的表现,我们想捕捉更大。188金宝搏手机客户端安卓下载为了减少这样的变化 - 环境噪音 - 从我们的测试配置中,我们设置了一个项目,测量和控制上,我们运行我们的测试的EC2环境。

在项目开始时有很多的怀疑和不确定性。也许使用性能测试公共云是一个坏主意,我们应该放弃和购买更多的硬件来运行他们自己呢?我们开到这种可能性,但我们希望承担拥有和管理我们自己的测试集群的成本和复杂性之前,我们做尽职调查。

在持续集成性能基准测试

188金宝搏手机客户端安卓下载MongoDB使用所谓常绿CI平台上运行传入提交测试。我们还使用长荣运行多个类的日常性能测试。在这个项目中,我们专注于我们的最高级别的测试,旨在代表实际最终用户性能。我们称这些测试系统性能测试。

对于_System Performance_tests,我们使用EC2部署各种的MongoDB集群c3.8xlarge节点的真实和相对结实的集群:独立服务器,3个节点副本集和分片集群。188金宝搏手机客户端安卓下载这些意在代表的客户如何执行MongoDB。188金宝搏手机客户端安卓下载使用EC2允许根据需要我们灵活,高效地部署这样的大型集群。集群中的每188金宝搏手机客户端安卓下载个节点的MongoDB是它自己的EC2节点上运行,同时工作量也从另一个EC2节点驱动。

重复性

性能测试的一个方面并不明显,而且经常被忽略。大多数基准测试博客和报告都关注系统的最大性能,或者它是否比竞争对手的系统更快。出于CI测试的目的,我们主要关注基准测试的可重复性。这意味着,在相同的硬件上对相同版本的MongoDB进行相同的测试,无论在今天还是几个月后运行,都会产生相同的结果。188金宝搏手机客户端安卓下载我们希望能够检测由于我们正在开发的MongoDB而在性能上的小变化。188金宝搏手机客户端安卓下载客户可能不会对5%的性能变化感到非常不安,但是他们会对多个5%的回归加起来是20%的回归感到不安。

避免了大回归最简单的方法是找出并及时解决小回归,因为它们发生,并停止回归前往版本或候选发布版。我们不希望带着沉重的负荷强调MongoDB188金宝搏手机客户端安卓下载的,但是,达到某种最高性能完全是继发于检测变化的测试套件的目标。

对于我们的一些测试,重复性看起来不是很好。在下面的图表中,每个点代表每日构建(剧透——你会再次看到这个图表):

变异日常性能测试

变异日常性能测试

目测从最高至最低水平,不同的是超过100,000个文档/秒,从日常。或者,以百分比,20-30%的范围内。

调查

为了减少我们的测试配置中的这种变化,我们成立了一个项目,以减少任何环境噪音。而不是集中于每日之间建立的MongoDB的差异,我们进行了测试,以专注于EC2本身。188金宝搏手机客户端安卓下载

过程:测试与分析

标杆是真正的基本科学方法的训练:

  1. 试着去了解一个真实世界的现象,比如使用MongoDB中的应用188金宝搏手机客户端安卓下载
  2. 创建这一现象的模型(又名基准)(这可能包括设定目标,比如“更多的更新/秒”)
  3. 测量
  4. 分析并从结果学习
  5. 重复:你运行基准测试/再次测量时,得到相同的结果?
  6. 改变一个变量(基于分析)和来自上述重复

我们应用这个标杆流程来评估在我们的系统中的噪音。我们的测试中产生度量每秒(操作/秒)测量平均操作。有时,我们也记录了其它的值,但通常我们使用操作/秒是我们结果

为了限制其它变量,我们锁定的mongod二进制到稳定的释放(3.4.1)和重复每个测试5次上5个不同的EC2集群,从而产生25个数据点。

我们用这个系统来运行反复实验。我们开始与现有的系统,并认为我们的假设建立的,可以帮助我们确定怎样做才能降低系统的变异潜力测试列表。只要我们对此并不高兴我们又回到了这个名单的结果,并挑选了最有前途的功能测试。我们创建了集中测试来隔离特定的功能,运行测试和分析我们的研究结果。后来我们发现任何可行的解决方案投入生产。

对于每一个测试中,我们分析了25个数据点,发现这最大限度地减少单一指标结构的目标:

范围=(最大 - 最小)/中位数

能够说出你的目标作为一个单一变量上,如很强大。我们的项目现在成为尝试不同的配置,以在此变量的最小值得出一个简单的优化过程。这也是非常有用的指标是一个百分比,而不是绝对值。在实践中,我们希望能够运行所有测试,这样的范围将一直停留在10%以下。

请注意,我们的度量选择了专注于比更加雄心勃勃,例如,着眼于降低方差。方差将帮助最小化大多数测试结果的扩散,同时对一两个异常值相当宽容。对于我们的用例,一个异常值代表一个错误的回归警报,所以我们希望找到一个没有任何异常值的解决方案,如果可能的话。

这种形式的任何实验有统计数据的准确性和运行试验的代价(时间和金钱)之间的紧张关系。我们会喜欢收集每个群集更多的试验,每试验更多不同的集群使我们能够在我们的结果更高的信心,使更多的先进的统计数据。然而,我们也为需要这个项目(低噪音)的业务影响公司工作,尽快。我们认为,每个集群次5次试验每次实验5群给了我们一个合理的成本足够的数据保真度。

假设什么。衡量一切。

实验框架上面描述可以归纳的信条:假设什么。衡量一切。

本着知识分子诚实的精神,我们承认我们并非总是遵循……的信条假设什么。衡量一切,通常我们不利。我们绝对没有跟随它,当我们最初构建系统性能测试套件。我们尽快(最好是昨天)所需要的测试套件了。相反,测试一切,我们做出缝合在一起基于直觉和经验,可有用的系统尽最大努力,并投入生产。这不是不合理的及时需要的(或为原型)快速一起扔东西。然而,当你(或我们)这样做,你应该检查,如果最终结果满足您的需求,并用大粒盐取结果,直到彻底验证。我们的系统给我们造成的。有时,这些结果指出我们在有用的东西,而有时他们给我们送行的大雁追逐。

现有的假设

让系统性能测试套件起来的第一个版本,并运行时,我们做了很多假设。我们将考虑每个这些在后面详细,但在这里是被内置到我们的系统性能环境的第一个版本的假设列表:

假设:

  • 专用实例意味着更稳定的性能
  • 布置组最小化网络延迟&方差
  • 不同的可用性区域有不同的硬件
  • 对于写重测试,噪音主要来自于磁盘
  • 短暂的(SSD)磁盘具有最小方差
  • 远程EBS磁盘的性能不可靠
  • EC2实例有好有坏

此外,以下的建议提出的解决方案,系统中的噪声降低:

  • 只要使用I2实例(更好SSD),并用它做
  • 迁移一切谷歌云
  • 在炳运行 - 你永远不会在云中可接受的结果

结果

经过努力执行的科学过程的周假设-测量-分析-重复我们发现了一个配置,其中变化范围重复相同的试验是小于5%时。大多数的配置变化是,将需要在内部部署的硬件只是同在EC2上正常的Linux和硬件配置。因此,我们证明了最大的假设错误之一:

你不能使用云进行性能测试

随着我们的第一个实验中,我们发现,有测试运行,他们就已经运行EC2实例之间没有相关性。请注意,这些结果可以基于我们的实例类型的使用;你应该衡量自己的系统,以找出最佳的配置自己的系统。你可以阅读更多关于我们的博客文章特定的实验与分析EC2实例既不好也不好

EC2实例有好有坏

运行第一基准测试之后,我们决定调查IO性能。使用EC2,我们发现,通过使用自动配置的IOPS我们得到盘一个非常稳定的速度I / O每秒。对我们来说,这是令人惊讶的是短暂的(SSD)硬盘基本上是最坏的选择。从短暂的SSD到EBS磁盘交换我们的生产配置后,我们的测试结果的变化显着下降。你可以阅读更多关于我们的具体调查结果,以及如何在不同我们专门的博客文章进行实例类型EBS情况下是稳定的选项

短暂的(SSD)磁盘具有最小方差

远程EBS磁盘有不可靠的性能 - > PIOPS

只要使用i2实例(更好的SSD)就可以了(理论上是这样)

接下来,我们将注意力转向CPU调优。我们了解到,禁用CPU选项不仅会稳定CPU绑定的性能结果。事实上,通过CPU调优,io多的测试中的噪音似乎也会显著降低。

对于写重测试,噪音主要来自于磁盘

我们禁用的CPU选项后,在性能上的差异再次下降。在下面的图可以看到SSD更改为EBS和禁用CPU选项如何减少我们的测试套件的性能变化。你可以阅读更多关于我们在博客中调整了CPU的选择禁用CPU的选择

改进在日常的性能测量通过改变到EBS和禁用CPU选项

改进在日常的性能测量通过改变到EBS和禁用CPU选项

在项目结束时,我们没有测试所有的原始假设,但我们测试了其中的许多假设。我们仍然计划在时间和优先级允许的情况下测试其余的:

  • 专用实例意味着更稳定的性能
  • 布置组最小化网络延迟&方差
  • 不同的可用性区域有不同的硬件

在这个过程中我们也发现,以前建议的解决方案不会有任何解决我们的痛苦:

  • 只要使用i2实例(更好的SSD)就可以了(理论上是这样)
  • 迁移一切谷歌云:未测试!

测试结论

最终,仍然有噪音的系统,但我们已经充分降低它,我们的系统性能测试,现在提供真正的商业价值的公司。噪音困扰我们的每一位,但我们得到了可重复性的水平,其中测试噪声不再是我们最重要的性能相关的问题一天结束。因此,我们停止了在这一点上减少系统噪音的全倾全力。

添加在保障措施

之前我们完全转移到其他项目,我们希望确保把一些保障的未来。我们投入了大量的精力投入到降低了噪音,而且我们不想发现某一天,在未来的事情发生了变化,我们的系统又是吵闹。就像我们要检测MongoDB中软件的性能变化,我们也希望检测我们的测试平台的可靠性的变化。1888bet亚洲体育188金宝慱官网下载188金宝搏手机客户端安卓下载

由于我们的实验的一部分,我们建立了几个金丝雀基准这给我们洞察基于非MongoDB的性能测试EC2性能本身。188金宝搏手机客户端安卓下载我们决定与实际的MongoDB基准,正在运行的任务保留这些测试和运行它们的每一个长青任务的一部分,共同提高。188金宝搏手机客户端安卓下载如果Mon188金宝搏手机客户端安卓下载goDB的基准测试显示回归,我们可以检查是否类似的回归可以在任何金丝雀基准可以看出。如果是的话,那么我们就可以重新运行任务,并再次检查。如果不是,它可能是一个实际的MongoDB的回归。188金宝搏手机客户端安卓下载

如果金丝雀基准测试确实显示性能下降,有可能是供应商可能已经部署升级或配置更改。当然,在公共云的这个可以在任意时刻发生,可能没有客户不用知道。根据我们的经验这些变化是很少性能变化的原因,但运行了一套“金丝雀测试”为我们提供了可视性日到EC2系统组件本身的日表现,因而在我们的基准测试结果增加了信心。

金丝雀测试给我们的,我们是否可以信任一个给定的测试结果的指示,并让我们来清理我们的数据。最重要的是,我们不再需要争论是否有可能在公共云中运行的性能基准,因为我们衡量EC2本身!

期待

这项工作是一年半前完成了。自那时以来,它已经提供了所有的后续和未来的工作已经在建的基础。这已导致3个大趋势:

我们使用的结果。因为我们降低噪音够了,我们能够定期检测性能的变化,做出诊断,并及时加以解决。此外,开发商也“补丁测试”他们对系统性能的变化,现在。也就是说,他们使用的是系统性能,他们承诺之前测试他们的性能变化,并解决任何性能变化之前提交他们的代码。没有进入我们的稳定版本只具有我们避免了回归,在这些情况下,我们已经避免性能下降有史以来使它成为代码库(主分支)。

我们增加了更多的测试。因为我们发现我们的性能测试更加有用,我们自然希望有更多这样的测试,我们已经增加了更多我们的系统。除了我们的核心表演团队,核心数据库开发商也一直在稳步增加更多的测试。由于我们的系统变得更加可靠,更加实用,建立在整个组织测试的积极性有所提高。我们现在有导致性能覆盖整个组织。

我们已经能够扩展这个系统。考虑到公司从这个系统中获得的价值,我们投资于扩展这个系统。这包括添加更多的自动化、新的工作负载工具,以及用于检测性能变化的更多逻辑。如果不将系统性能测试的噪音降低到合理的水平,那么所有这些都是不可行的或不值得的。我们期待在未来分享更多关于这些扩展的信息。

科达:幽灵/消融

我们从2018年元旦假期回来,就像其他人一样,我们一定要了解的崩溃和幽灵安全漏洞的消息。然后,在1月4日,我们所有的测试就红了!是不是有人做一个坏的提交到MongoDB的,或者是有可能,亚马逊已经部188金宝搏手机客户端安卓下载署与性能影响的安全更新?我原来是我们的金丝雀的测试之一 - 一个CPU和网络开销敏感 - 抓好下降30%呢!后来,在1月13日,业绩恢复。亚马逊没有撤消修复?我们认为如此,但还没有听说过它证实。

1月4日性能下降,并弹回1月13日

1月4日性能下降,并弹回1月13日

单穗只是1月13日之前是一个古老的重播提交。这证实,在性能上的变化来自于系统中结论,因为1月13日之后运行的MongoDB的1月11日建立,将导致更高的性能。188金宝搏手机客户端安卓下载因此,结果取决于测试运行的时间,而不是其提交了测试。

作为世界上争先恐后,以评估必要的修复对性能的影响,我们可以坐视不理,在我们的图表看他们。获取有关的EC2性能变化顶部已经真正见成效。

更新:@_msw_给我们指出了这点安全公告,确认英特尔微代码更新的一个的确恢复了1月13日。

-大卫·戴利亨里克·英戈

Performance_Leafie.jpg