国内公有云对比(2)- 性能篇


在简单了解各家云计算的能力之后,紧接着大家关注的问题就是性能、价格、稳定性等问题。本篇先从性能入手


本篇准备测试阿里云,Windows Azure中国站,并以AWS作为比较。测试对象以虚拟机为主,测试工具为两个:

  • Unixbench:开源的Linux性能测试工具,可以综合测试虚拟机的CPU、内存、文件、进程、脚本、系统调用、管道等多个维度,并且会给出一个总分。该工具介绍:http://code.google.com/p/byte-unixbench/
  • Orion: Oracle发布的一个免费IO测试工具,该工具可以测定磁盘的IOPS、吞吐量、延迟。尽管也有一些其他IO测试工具,比如dd、bonnie++、iozone,但是只有orion可以同时测定IOPS和吞吐量,这也是我选择该工具的原因。该工具介绍在http://www.oracle.com/technetwork/cn/topics/index-088165-zhs.html

OS性能测试

首先来看Unixbench,由于各家的虚拟机规格不同,我选择如下的虚拟机规格进行对比

  测试使用的站点 OS类型 小规格 中规格 大规格
Windows Azure中国站 北京 CentOS 6.3 64位 S
1核1.7G内存
M
2核3.5G内存
L
4核7G内存
AWS北美 US East CentOS 6.3 64位 m1.small (1 ECU)
1核1.7G内存
m1.medium (2 ECU)
1核3.5G内存
m1.large (4 ECU)
2核7.5G内存
阿里云 青岛 CentOS 6.3 64位 1核1.5G内存 2核4G内存 4核8G内存

尽管AWS的中规格只有1个核,但是根据AWS的配置,其等效的计算能力(ECU)是小规格的2倍,所以它跟Azure的M型是对等的。大规格同理

百度云和新浪云的虚拟机还未开放,暂不考虑


首先说明下测试过程。公平起见,本测试未做任何性能调优和配置变更,完全采用各家提供的缺省OS镜像。虚拟机也都没有配置SWAP分区

Unixbench安装与配置

首先用root登录目标虚拟机

1. 下载安装包。建议下载最新版

wget http://byte-unixbench.googlecode.com/files/UnixBench5.1.3.tgz

2. 解压缩
tar zxvf UnixBench5.1.3.tgz

3. 进入UnixBench目录

4. 进行编译

make clean
make

5. 运行./Run即可开始测试,等待十几分钟即可

如果运行时报如下错误

Can't locate Time/HiRes.pm 
可以执行下

yum install perl-Time-HiRes
安装缺少的包


在Windows Azure下,CentOS缺省没有安装gcc,可以在make之前运行如下命令安装gcc

yum --disableexcludes=main install gcc


在阿里云和AWS下,Unixbench需要安装一个perl扩展包,可在运行./Run前运行

yum install perl-Time-HiRes

Unixbench测试结果

虚拟机的性能,主要取决于两个因素:物理机性能,物理机上运行的虚拟机个数。了解虚拟化的人都会知道物理核和虚拟机的逻辑CPU(vCPU)并不是一一对应的。一个物理核可以支持多个vCPU,甚至一个超线程支持多个vCPU。这样一个2个4核支持超线程的处理器,首先在虚拟化层会变成16个核,进而可以支持最少16个vCPU。显然,vCPU对应的物理核配额越多,其性能就越好,Unixbench分数就越高

先看一下总分


1. AWS,这个分数不出意料的低。Azure是AWS的3-4倍,而阿里云也有AWS的2-3倍。这个结果跟一个国外的第三方做的测试结果是类似的,详细情况可参考http://blog.csdn.net/shaunfang/article/details/9770527。为啥大名鼎鼎的AWS性能如此之差?这跟AWS的历史有关。AWS早在2006年就开始做云计算,当时就定下了小、中、大等虚拟机规格。大家都知道硬件能力每年都在增长,这样当AWS增加新的服务器时,其处理能力就比原有的强。如果新的服务器也支持同样的用户数,那么用户拿到的虚拟机就会比原有的强。这会造成用户在不同时间段申请的同规格虚拟机性能不同的情况。于是AWS提出一个ECU概念,即逻辑运算能力,用户申请的同规格虚拟机永远拥有类似的处理能力,并且用ECU来代表,比如1ECU就代表一个Sandy Bridge级Xeon的处理能力。这样的话,2010年的一台服务器可能会虚拟出10台小规格的虚拟机,而2013年的一台服务器就可以虚拟出20台虚拟机。阿里云和Windows Azure都比AWS晚,它们使用的处理器较新,起步的虚拟机规格就比AWS高好几倍了。目前,Azure所提供的一个逻辑核基本上对应一个服务器的物理核,而AWS显然是4、5个虚拟机共享一个物理核。另一方面,Azure的定价跟AWS一模一样,花一样的钱就可以获得比AWS强4倍的计算能力

AWS采用的是Intel Xeon E5430 CPU,主频2.66G,启用了超线程

   OS: GNU/Linux -- 2.6.32-279.2.1.el6.centos.plus.x86_64 -- #1 SMP Thu Jul 19 16:20:44 CDT 2012
   Machine: x86_64 (x86_64)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   CPU 0: Intel(R) Xeon(R) CPU E5430 @ 2.66GHz (5320.0 bogomips)
          Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSCALL/SYSRET

2. 阿里云。尽管测试采用的阿里云主机配置不如Azure(主要是内存小一些),但是其最终性能却接近Azure,这说明阿里云采用的硬件比较新,另外,没有用一台物理机去支持大量虚拟机

从结果看,阿里云采用的是Intel Xeon E5-2420 CPU,主频1.9G,启用了超线程

   OS: GNU/Linux -- 2.6.32-358.6.2.el6.x86_64 -- #1 SMP Thu May 16 20:59:36 UTC 2013
   Machine: x86_64 (x86_64)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   CPU 0: Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz (3800.2 bogomips)
          Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET

3. Windows Azure分数最高,从结果看,使用的是AMD 4171HE CPU,没有超线程

   OS: GNU/Linux -- 2.6.32-279.14.1.el6.openlogic.x86_64 -- #1 SMP Wed Dec 12 18:33:43 UTC 2012
   Machine: x86_64 (x86_64)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   CPU 0: AMD Opteron(tm) Processor 4171 HE (4189.4 bogomips)
          x86-64, MMX, AMD MMX, Physical Address Ext, SYSCALL/SYSRET


结论:Windows Azure性能最好,是AWS的3-4倍,比阿里云高10-20%

IO测试

IO测试主要测试磁盘性能。目前,各家提供的虚拟机基本上有三种磁盘:

1. OS盘

2. 本地临时盘

3. 数据盘

其中,OS盘和数据盘都应该是持久化的,如果物理机故障或者虚拟机重启,上面的数据应该继续保留。OS盘和数据盘的区别,是数据盘建议用来存储应用和用户数据,而OS盘是缺省提供的,不建议放用户数据。数据盘一般可以虚拟机解绑,然后加载给其他虚拟机。本地临时盘是存储在物理机本地磁盘上,没有做持久化,很容易损坏或丢失,但其成本低,性能高,一般用来做缓存。

AWS和Azure都同时支持3种盘,阿里云支持OS盘和数据盘。AWS还有一种叫IOPS盘,本次没有比较

由于Orion测试需要清空数据,本测试只测数据盘和本地临时盘

虚拟机准备

每个测试都在一台小规格的虚拟机上完成,OS为CentOS 6.3 x64. 数据盘大小为10G

Orion安装与配置

Orion的下载需要去Oracle网站。

1. 进入www.oracle.com/technetwork/cn/topics/index-088165-zhs.html?TPCY5g

2. 选择x86_64版本下载,可能要求输入Oracle ID

3. 解压缩安装包

gzip -d orion_linux_x86-64.gz

4. 解压后得到一个文件,赋予执行权限

chmod +x orion_linux_x86-64

5. 创建 orion.lun文件,在里面写入测试的目标盘,比如/dev/xvdc. 需要注意,orion会直接在磁盘级进行读写,会损坏上面的文件系统,所以一定要用空磁盘进行测试

6. 执行读测试,该测试会进行4K大小的随机读和1M大小连续读

./orion_linux_x86-64 -run advanced -size_small 4 -verbose

7.执行写测试,该测试会进行4K大小的随机写和1M大小连续写

./orion_linux_x86-64 -run advanced -size_small 4 -write 100 -verbose

这个测试会进行几组8K大小的随机读写和1M大小的连续读写测试。前者用来测定IOPS能力,后者测定吞吐量

Orion测试结果

IOPS,单位:操作/s,数字越大越好。

IOPS指标对于数据库类型的应用来说十分关键。


图中横轴代表的是采用Orion测试时并发线程数,或者叫IO队列深度。Orion测试IO性能的时候,会开启多个线程,每个线程循环进行IO操作。这样,当并发线程数多的时候,系统的IO请求会排队,能够进一步提升IO性能。当并发线程数大到一定程度时,比如20,系统的IO性能会饱和。在本次测试中,我们使用Orion缺省的测试方法,即并发线程数在1-5之间变化

  • 从数据盘的结果来看,Azure最好,并发线程数为5时,读写IO都可以达到800
  • 阿里云其次,读接近800,写有400多
  • AWS最不稳定。AWS官方的说法是提供100左右的IOPS,如果其他用户较闲,其IOPS也可以达到几百上千。从结果来看,AWS的IO性能在读写方面很不均匀,写很快而读很慢。结合网络上的资料来看,AWS的IO性能随时间、机型变化很大。显然,由于IO性能不稳定,AWS的自带磁盘是无法满足IO密集型应用需求的,所以AWS专门推出了一个IOPS存储来保证IOPS,而这种存储价格较高

作为对比,普通一块7200转的服务器硬盘(SATA盘)的IOPS一般为100左右,而存储专用的15000转的光纤盘IOPS可以达到200。因此,Azure的数据盘要比单块服务器硬盘快的多,基本上达到了一个小规模盘阵的处理能力


另外,本地临时盘的性能,要比持久化磁盘的性能强很多。临时盘使用了SSD来提升IO性能



吞吐量,单位MB/s,数字越大越好


可以看出Windows Azure性能最好,AWS和阿里云类似。由于需要做持久化,所有的数据盘流量都会经过网络,而公有云一般不会用光纤网络这种存储专用通道,这制约了数据盘的吞吐量,几十兆/s的性能基本和普通服务器硬盘的性能类似。作为对比,本地临时盘无需网络数据拷贝,性能超高

  本地临时盘
Windows Azure 565
AWS 366


延迟,单位ms,数字越小越好


在数据盘部分,Azure的读写延迟都在10ms以内。阿里云的读延迟偏高。而AWS的读延迟更是高的夸张,而写延迟又非常低


临时盘性能大大超越数据盘,小于1ms的延迟一定是使用了缓存或者SSD技术



上面的测试都是在某一时间点的测试。我们知道虚拟机是运行在共享的硬件上,单一时刻的性能并不能体现虚拟机的综合性能和性能的稳定性。因此,我们还需要考察IO性能随时间变化的情况。

下面的测试,是连续24小时测试所有的虚拟机得出的性能结果

IOPS,数值越大越好,横轴是时间

结果显示:

  • AWS的性能确实十分不稳定,写性能最大和最小差5倍
  • 阿里云的性能相对稳定些,不过每天有一个时间性能会突然变差,这就是每天的晚上12点左右,阿里对虚拟机进行统一备份
  • Azure的性能最稳定,而且读写性能均衡
吞吐量,单位MB/s,数值越大越好,横轴是时间


结果显示:

  • Azure的性能最好,且稳定,24小时内都在60MB-110MB之间
  • AWS较不稳定
  • 阿里云每天会有一个性能低谷(备份时间)

延迟,单位ms,数值越小越好,横轴是时间


结果显示:

  • Azure最稳定,读写均衡,24小时内延迟都在5ms左右
  • AWS最不稳定
  • 阿里云每天会有一个突发性能下降(备份时间)

总结

本文比较了AWS海外,阿里云和Azure三个公有云平台的OS性能和磁盘IO性能。结果显示:


关于网络性能,可以参考

Windows Azure中国区网络性能初评

Windows Azure中国区网络性能再评

相关内容

    暂无相关文章