重复性能测试:CPU的选择是最好禁用

||性能测试EC2CPU的选择性能分析

为了改善可重复性的工作,MongoDB的性能团队着手噪音减少对多项性能测试套件对EC2188金宝搏手机客户端安卓下载实例中运行。在项目的开始,现在还不清楚我们在公共云中运行的可重复的性能测试的目标是否是可以实现的。相反辩论基于假设和信念的问题,我们决定噪声测量本身,看看我们是否可以进行配置更改,以尽量减少它。

思考之后我们的假设,实验设置,我们开始通过记录对我们当前的设置,发现数据没有什么特别好的或坏的EC2实例的证据。在接下来的步骤中,我们研究IO和发现EBS实例是对我们稳定的选项。已经找到了一个非常稳定的表现就盘而言,这第三个也是最后的实验轮流调整CPU与旋钮噪声系统的这部分减少。

调查CPU选项

设立另一级性能基准测试(单节点基准)时,我们已经建立起来的知识各地微调CPU选项。这项工作是我们表明,CPU的选择也可能对性能有很大的影响。此外,它留给我们熟悉的一些旋钮,我们可以调整的选项。

在10.58.27 AM.png屏幕截图2019年4月30日

我们增加了一些CPU特定测试来衡量CPU的可变性。这些测试让我们看到,如果CPU的性能是喧闹的,独立的噪声是否使MongoDB的性能嘈杂。188金宝搏手机客户端安卓下载对于我们以前的CPU选项的工作,我们在C ++工具,该工具会写一些简单的测试,例如:

  • 在一个循环中的乘法数(CPU结合的)
  • 在一个循环中睡眠1或10毫秒
  • 在基本测试回路什么也不做(无操作)

我们添加了这些测试,我们的系统性能的项目。我们可以只运行在客户端上的测试,并通过网络去。

我们跑了我们的测试5×5次,一次改变一个配置,并比较结果。下面的第一个两个图表包含的CPU为中心的基准测试结果,第三包含的MongoDB为重点的基准。188金宝搏手机客户端安卓下载在所有的图下面,我们作图“噪声”度量作为从(最大值 - 最小值)来计算的百分比/中位数和越低越好。

我们只有开始与我们的重点CPU测试,首先在客户端上,然后连接到服务器。我们忽略了从可读性客户端图形睡眠测试,因为他们基本上是0。

结果CPU为中心的基准不同的CPU选项启用

结果CPU为中心的基准不同的CPU选项启用

该NOP测试是各地最嘈杂的测试,因为它什么都不做的内循环这是合理的。该CPU绑定环路更有趣。它是噪声许多情况下低,但偶尔尖峰对于每种情况下,除了与对所有的控制c3.8xlarge的情况下(固定到一个插座,关闭超线程,没有频率缩放,空闲=轮询)。

结果测试服务器上启用不同的CPU运行选项

结果测试服务器上启用不同的CPU运行选项

当我们连接到实际的服务器,测试变得更加现实,而且还引入了网络噪声的可能来源。In the cases in which we multiply numbers in a loop (cpuloop) or sleep in a loop (sleep), the final c3.8xlarge with all controls enabled is consistently among the lowest noise and doesn’t do badly on the ping case (no-op on the server). Do those results hold when we run our actual tests?

结果测试服务器上启用不同的CPU运行选项

结果测试服务器上启用不同的CPU运行选项

是的,他们做的。最右边的蓝色条是始终在5%左右,这是一个伟大的结果!也许并不奇怪,这是我们所使用的所有的调节选项的配置:空闲=民意调查显示,禁用超线程,并且仅使用一个单一的插座。

我们继续互相反对为这些测试C4和C3实例进行比较。我们预计,随着C4是一个新的架构,并有更多的调节选项,它会取得更好的成绩。但这种情况并非如此,相反,c3.8xlarge继续有噪音的最小范围内。另一种假设是错误的!

我们预计,写重测试,如批量插入,将主要来自于我们的新EBS磁盘更稳定IOPS中获益,并且CPU调整将主要影响到CPU绑定的基准,如地图,减少或索引的创建。原来,这是错误的太 - 为我们写重测试,噪音没有实际上主要来自于磁盘。

适用于CPU中的调整,对正在等待或者睡眠的线程产生巨大影响。这实际上是全速运行的线程的性能影响较小 - 在这些情况下全速CPU运行也是如此。因此,IO-重测试影响了很多的CPU调!

在生产中禁用CPU选项

部署这些配置到生产测试插入变得更加稳定一天比一天:

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

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

需要注意的是一些测试的绝对性能却下降了,因为可用的物理CPU的数量下降了1/2,由于只使用一个插座,并禁用超线程导致进一步下降,虽然不是很完整的一半,当然。

结论

在吸取先验知识,我们决定微调CPU选项。我们此前假设IO-重测试将产生很大的噪音从盘来的,并且CPU调整将主要影响CPU绑定测试。事实证明,可用的CPU的调整实际上是对正在等待或者睡眠的线程产生巨大影响,因此对IO-重测试产生巨大影响。通过CPU调整,我们取得了非常可重复的结果。在测试整体性能测量会减少,但是这对我们更重要。我们在乎稳定的,可重复的结果比最大性能更。

这是第三个也是最后三个我们在寻求减少对EC2实例在性能测试中的变化进行更大的实验。你可以阅读更多关于顶层设置和结果以及我们如何发现,EC2实例是既不好也不坏然后EBS情况下是稳定的选项

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