在简单了解各家云计算的能力之后,紧接着大家关注的问题就是性能、价格、稳定性等问题。本篇先从性能入手
本篇准备测试阿里云,Windows Azure中国站,并以AWS作为比较。测试对象以虚拟机为主,测试工具为两个:
首先来看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分区
首先用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
虚拟机的性能,主要取决于两个因素:物理机性能,物理机上运行的虚拟机个数。了解虚拟化的人都会知道物理核和虚拟机的逻辑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
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测试主要测试磁盘性能。目前,各家提供的虚拟机基本上有三种磁盘:
1. OS盘
2. 本地临时盘
3. 数据盘
其中,OS盘和数据盘都应该是持久化的,如果物理机故障或者虚拟机重启,上面的数据应该继续保留。OS盘和数据盘的区别,是数据盘建议用来存储应用和用户数据,而OS盘是缺省提供的,不建议放用户数据。数据盘一般可以虚拟机解绑,然后加载给其他虚拟机。本地临时盘是存储在物理机本地磁盘上,没有做持久化,很容易损坏或丢失,但其成本低,性能高,一般用来做缓存。
AWS和Azure都同时支持3种盘,阿里云支持OS盘和数据盘。AWS还有一种叫IOPS盘,本次没有比较
由于Orion测试需要清空数据,本测试只测数据盘和本地临时盘
每个测试都在一台小规格的虚拟机上完成,OS为CentOS 6.3 x64. 数据盘大小为10G
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能力,后者测定吞吐量
IOPS,单位:操作/s,数字越大越好。
IOPS指标对于数据库类型的应用来说十分关键。
图中横轴代表的是采用Orion测试时并发线程数,或者叫IO队列深度。Orion测试IO性能的时候,会开启多个线程,每个线程循环进行IO操作。这样,当并发线程数多的时候,系统的IO请求会排队,能够进一步提升IO性能。当并发线程数大到一定程度时,比如20,系统的IO性能会饱和。在本次测试中,我们使用Orion缺省的测试方法,即并发线程数在1-5之间变化
作为对比,普通一块7200转的服务器硬盘(SATA盘)的IOPS一般为100左右,而存储专用的15000转的光纤盘IOPS可以达到200。因此,Azure的数据盘要比单块服务器硬盘快的多,基本上达到了一个小规模盘阵的处理能力
另外,本地临时盘的性能,要比持久化磁盘的性能强很多。临时盘使用了SSD来提升IO性能
本地临时盘 | |
Windows Azure | 1690 |
AWS | 6302 |
吞吐量,单位MB/s,数字越大越好
可以看出Windows Azure性能最好,AWS和阿里云类似。由于需要做持久化,所有的数据盘流量都会经过网络,而公有云一般不会用光纤网络这种存储专用通道,这制约了数据盘的吞吐量,几十兆/s的性能基本和普通服务器硬盘的性能类似。作为对比,本地临时盘无需网络数据拷贝,性能超高
本地临时盘 | |
Windows Azure | 565 |
AWS | 366 |
延迟,单位ms,数字越小越好
在数据盘部分,Azure的读写延迟都在10ms以内。阿里云的读延迟偏高。而AWS的读延迟更是高的夸张,而写延迟又非常低
临时盘性能大大超越数据盘,小于1ms的延迟一定是使用了缓存或者SSD技术
本地临时盘 | |
Windows Azure | 0.64ms |
AWS | 0.30ms |
上面的测试都是在某一时间点的测试。我们知道虚拟机是运行在共享的硬件上,单一时刻的性能并不能体现虚拟机的综合性能和性能的稳定性。因此,我们还需要考察IO性能随时间变化的情况。
下面的测试,是连续24小时测试所有的虚拟机得出的性能结果
IOPS,数值越大越好,横轴是时间
结果显示:
结果显示:
延迟,单位ms,数值越小越好,横轴是时间
结果显示:
关于网络性能,可以参考
Windows Azure中国区网络性能初评
Windows Azure中国区网络性能再评