在谈论云计算世界之前,让我们先回顾一下20世纪70年代那些疯狂的日子,当时人们对装配线的科学还没有很好地理解,消费者发现每次购买都像是一场赌博。这一点在汽车经销商身上体现得最为明显,新车的质量参差不齐,以至于买家开始要求知道汽车从装配线上下来的日期。
周一生产的汽车被认为是一个糟糕的风险,因为每个人都宿醉了,而周五组装的汽车则受到了影响,因为每个人的心都已经在周末了。最偏执狂的买家会仔细查看日历,看看汽车是否会从工厂出来,因为在周中的时候,像世界职业棒球大赛那样的狂欢会用一把扳手把每个人的脑子弄糊涂。
由于更好的测试,更注重质量,以及制造业从那些人们熬夜、酗酒、看太多体育比赛的地方大规模外流,如今的购物者基本上已经忘记了这样的矛盾。如果说有什么区别的话,那就是现代工厂生产出千篇一律的产品,其一致性近乎乏味。现代电影里的装配线,往往是一个没有魅力的机械装置,冲压出完美的复制品。
20世纪70年代的那些往事浮现在我眼前时,我开始在云计算机上运行的基准测试。虽然计算机正常泵出这样的clonelike完美是形容词,如“没有灵魂”涌现在脑海里,我开始发现,克隆比喻可能不是可以从云计算租金的机器最好的之一。云机不都一样,具有精度像坐在我们的办公桌箱子生产。他们有点像上世纪70年代的那些汽车。
我是在几位来自云计算公司的工程师对我的基准测试发牢骚后开始了解到这一点的公共云大调查。他们告诉我,这些测试不够复杂。
我的云基准测试结果从来都不是一个明确的答案,只是一个关于用户通过虚拟之门可能体验的报告。像《消费者报告》一样,我注册了一台机器,上传Java代码,写下结果。虽然DaCapo基准测试套件具有处理器独立性(Java)和广泛流行的服务器端代码集合(Jython、Tomcat)等优点,结果比较分散。我的结论是,唯一的解决方案是测试您计划运行的代码,因为这是确定对于您的I/O、磁盘访问和计算的特定组合,哪种云计算机能够提供最佳性能的唯一方法。
一位工程师不喜欢这种方法。他开始提出尖锐的问题,这些问题极其复杂。精确的方法是什么?测试在哪个操作系统上运行?测试多久运行一次?测试控制了一天的时间吗?
每天的时间吗?是的,工程师说。他真的想知道我们在做测试时是否注意到了。当然,操作系统是性能差异的一个明显来源,使用最新的驱动程序和补丁总是有意义的。但他也想知道一天的时间。
这是新的。的CPU有非常快的时钟滴答,但他们会以同样的速度早晨,中午和晚上扑灭计算。是不是真的很重要看时间?是的,他说。换句话说,云机可能会更像一个瑞士手表一个20世纪70年代时期的底特律装配线。
云卡马洛和轻巡洋舰
为了了解云的变化程度,我启动了实例Amazon的EC2。我选择了亚马逊,因为它是行业内最先进的云的一个领导者之一,但这里的结论很可能只是作为真正的任何其他云 - 他们都在玩同一个游戏。他们正在建造的计算机的超快架,找到一个巧妙的方式与许多用户共享。尽管销售文献使它看起来好像你购买另一台计算机就像一个坐在你的办公桌上,它通常是在沙滩上更接近购买到一个分时的公寓。
在这一点上,我应该停下来,抛开这些玻璃半空典故底特律和房地产时间股。云计算的一个亲切的后卫会说,有时候你得到你所支付的,但往往你得到幸运。在一个糟糕的一天,你可能最终有10个疯子想发财共享CPU比特币铸造通过熔化处理器;在好的情况下,CPU会免费给你很多额外的周期。你可能会和10位祖母共用一台机器,而她们只会在每个星期天用一份新的教会公告更新网页。换句话说,CPU的杯子不仅是半满的,酒保还会把杯子里剩下的酒倒满。
结果令人惊讶。我购买了两机:低端微T1实例和appropriatedly称为M1中的媒体版本。该微是一个测试机的RAM和613MB的承诺“最多两个EC2计算单位(简称周期脉冲)。”中等自带内存3.75GB和一承诺“虚拟核心有两个EC2计算单位”。微在每小时2美分列出和培养基每小时收费12美分。这两个价格都在名单提供给任何人走在门上的“随需应变”的实例。较低的价格是为那些谁做了预留的长期承诺。
在这两种情况下,我都使用了预装了OpenJDK 1.6.0_24定制版本的64位Amazon Linux机器映像。在用Yum更新所有包之后,我下载了DaCapo基准测试并立即启动它们。
微指令、媒介、柠檬
我总共在10台不同的机器(5台微型和5台中型)上运行了36次基准测试。通常,微实例比介质要慢得多,但实际上微运行速度要快好几倍。这通常在机器启动后不久就会发生,可能是因为EC2允许机器更快地“爆裂”并自由运行。这种慷慨通常会消失,下一次运行通常会慢得多,有时慢10倍——是的,慢10倍。
这些微型机器的性能变化很大。有一个实例可以在3.4秒、4.0秒和4.1秒的三次运行中对Lucene文件进行索引;它就像手表一样可以预测。但另一个实例启动时间为3.4秒,然后第二次运行时间为39秒,第三次运行时间为34秒。另一个实例用14,47和18秒用相同的文件构建相同的Lucene索引。Micro的结果是各不相同的。
在DaCapo测试中,Amazon的T1微实例的性能是完全一致的。
更糟糕的是,微实例有时会无法完成。有时,在Web服务模拟(Tradesoap和Tradebeans)中,对Web页面的请求中断会导致404错误。有时更大的任务会以一行错误消息“已死”结束。The deaths, though, weren't predictable. It's not like one benchmark would always crash the machine.
嗯,有一个情况下,我可以开始觉得死亡是迫在眉睫。一个实例是一个明确的柠檬,它的低迷是从一开始就明显。Eclipse测试是比较苛刻的DACAPO基准之一。其他微型机器通常会完成其500和600秒之间,但柠檬超过900秒开始启动,变得更糟。到了第三来看,它正在推动2476秒,比其兄弟慢近5倍。
这并不奇怪。这台机器是在一个星期四在东海岸刚吃完午饭的时候启动的,这可能是美国大部分人都清醒着浏览网页的时刻。在东海岸,一些速度更快的机器在早上6点半就启动了。
虽然我正常关闭机器后的测试是结束了,我不停的柠檬与它周围玩。它没有得到更好的。在下午晚些时候,有人崩溃。我会回来找的消息,该机已经降到通信,留下我的桌面抱怨一个“破管道。”有好几次柠檬不完超过几个不同的测试。
至于“笑”,几天后的周日上午,我在东海岸的同一台机器上启动了同样的测试。第一次测试进行得很顺利。柠檬在Avrora上的运行时间为18秒,这个时间与通常使用的中型机器报告的结果相当。但在那之后,柠檬的速度急剧下降,花了3120秒来完成日食测试。
从微
中型机器更加一致。他们从来没有在运行基准时失败过,并且报告的时间也没有太大的变化。但即使是这些数字也与瑞士手表相差甚远。在Avrora测试中,一台中型机器的测试时间分别为16.7、16.3和17.5秒,而另一台机器的测试时间分别为14.9、14.8和14.8秒。而另一台机器只运行了13.3秒。
一些中型机器比其他机器快10%以上,看起来它们是幸运的。中型机器的速度在大多数基准测试中都是一致的,似乎与一天中的时间没有太大关系。
介质机器的性能还表明,RAM可能与CPU核心一样重要,但仅在需要时才如此。媒体的RAM大约是微处理器的六倍;不出意料,它的价格是它的六倍。但在Avrora基准测试中,微机器通常运行得更快,或者只慢几倍。在Tomcat基准测试中,它从来没有运行得更快,但是通常会慢4到6倍。
亚马逊的M1中的实例表现得更加一致。不同的是百万分之一,在介质中再也未能完成试运行。
在其他情况下,微原子会熔化。在Eclipse测试中,Micro有时比Medium慢5倍,但通常慢8到10倍。在Eclipse测试中有一次和在其他测试中有几次,Micro完全失败了。缺少RAM使机器不稳定。(注意,这几次失败不包括lemon的几十次失败,它比我测试的其他微实例更稳定地崩溃。)
这些实验虽然还很基本,但表明在云中打包性能要比在独立机器上复杂得多。不是每台机器的行为方式都一样。其他用户对硬件和网络的影响可能会扭曲任何测量。
在M1中接通在一致的数字上的一些DACAPO测试(如AVRORA,上文),但在其他不那么一致(如蚀试验,下文)。
岩石和慢的地方之间
更糟糕的是,云计算公司正处于一种奇怪的困境。如果他们有闲置的自行车,浪费它们将是一种耻辱。然而,如果他们提供这些服务,客户可能会习惯更好的性能。没有人注意到机器什么时候跑得更快,但是如果机器慢下来,每个人就开始生气。
这种预期加大了这些公司推出新硬件的难度。如果速度快10%的新芯片出现,这些机架的运行速度就会快10%。每个人都会很高兴,直到他们遇到旧机架上的实例。
云用户需要调整自己的预期,或者至少休息四周的期望误差线。云不与相同的精度专用硬件坐在你的办公桌上提供高性能。这不一定要么需要它,因为云公司只为精度需求,解决方案是消除任何形式的完全破裂的一个好主意。他们需要的性能限制在最小公分母。
换句话说,70年代也许不是底特律车队稳定性最好的年份,但他们仍然生产出了一些很棒的汽车。卡马罗、野马、越野车和轻型巡洋舰经常跑得很好。组装线并不完美,但大多数时候都很好——直到他们生产了一个柠檬。就像那些老肌肉车的车主一样,云计算的司机也应该密切关注性能。
这个故事,“标杆亚马逊EC2:云性能古怪的世界”最初发表信息世界 。