可重复的性能测试:EC2实例既不好也不糟糕

||性能分析性能EC2.测试

努力提高重复性,MongoDB性能团队旨在降低在EC2实例上运行的几种性能测试套件上的188金宝搏手机客户端安卓下载噪音。在项目开始时,目前尚不清楚我们在公共云中运行可重复的性能测试的目标是可实现的。我们决定衡量噪声本身,而不是根据假设和信仰辩论问题,并查看我们是否可以使配置更改以最小化。

思考后我们的假设和实验设置,我们开始录制有关我们当前设置的数据。

调查现状

我们的第一个实验创造了许多数据的大量数据,通过了许多图表。我们从重复实验中开始了简单的统计数据图:我们每个现有测试的最低,中位数和最大结果。该图允许我们简明地看到每个测试的变化范围,并且哪个测试是嘈杂的。以下是用于批量插入测试的代表性图:

批量插入测试性能的高方差

批量插入测试性能的高方差

在此图中,您有两个测试,每个测试在不同的线程级别运行三次(这是测试名称结束时的整数)。中位数周围的晶须表示最小和最大结果(从25点样本)。

查看此图表,我们观察到这两个测试的线程级别未得到最佳配置。在使用16和32并行线程运行这两个测试时,线程已经饱和MongoDB,并且附加的并发仅仅为结果增加了噪声。188金宝搏手机客户端安卓下载我们注意到其他测试中的其他配置问题。我们在这个项目期间没有触摸测试配置,但后来,我们找到了一个很好的EC2配置后,我们确实重新审视了这个问题并审查了所有测试配置,以进一步最小化噪声。经验教训:当你不遵循纪律的方法“衡量一切。没有假设。”从一开始,可能不止一件事出了问题。

EC2实例既不好也不糟糕

我们以多种不同的方式看着第一个结果。一种方式向我们展示了所有25个试验的结果,在一个视图中:

性能结果与他们运行的群集无关

性能结果与他们运行的群集无关

在我们检查结果时,一个非常令人惊讶的结论立即从上图出发:既没有良好的EC2实例。

当我们最初建立系统时,有人在互联网上读到了EC2上的某个地方,您可以获得良好的和坏的实例,嘈杂的邻居等。甚至有工具和脚本可以用来部署耦合的实例,运行一些烟雾测试,如果性能结果很差,则会关闭它们,然后再试一次。事实上,我们的系统实际上是这样做的,并且在糟糕的一天会在最终放弃之前关闭并重新启动实例30分钟。(对于带有15个昂贵节点的群集,这可能是昂贵的30分钟!)

到目前为止,这种假设从未测试过。如果假设是真的,那么在上面的图表上,您希望看到点1-5具有大致相同的值,然后跳转到点6,之后再次点6-10将具有大致相同的值,并且所以。但是,这不是我们观察到的。测试结果有很多变化,但是Anova.测试确认此变型与测试运行的群集不相关。从这个数据来看,似乎没有证据表明存在良好和糟糕的EC2实例。

请注意,此结果完全可能是我们的系统特定的。例如,我们使用(并支付额外的)专用实例来减少我们的基准测试中的噪声源。与嘈杂的邻居的问题很可能是真实的,并且不会发生在我们身上,因为我们没有邻居。重点是:衡量自己的系统;不要盲目地相信你在互联网上阅读的东西

结论

通过测量我们的系统并以不同的方式分析数据,我们能够反驳我们在构建我们的系统时所做的假设之一,即EC2实例很好。事实证明,在不同的测试运行之间的性能之间的方差与测试运行的群集不相关。

这只是我们在我们追求中执行的三个更大的实验之一,以减少EC2实例上的性能测试的变化。您可以阅读更多信息顶级设置和结果以及我们如何发现这一点EBS实例是稳定的选项CPU选项最佳禁用

-David Daly.Henrik Ingo.