摘 要:在openstack云环境下通过对网卡I/O、处理器、内存和磁盘I/O几个方面进行对比分析,比较了KVM虚拟机和物理机的性能差距。最后根据分析结果得出了KVM虚拟机更适合于网络I/O、内存和处理器密集型任务,而不适合磁盘I/O密集型任务的结论,并发现随着虚拟机数量的增加网卡I/O和磁盘I/O的性能呈直线下降。
关键词:KVM;虚拟机;性能测试
随着云计算的不断发展,各种云计算管理平台也应运而生,如Eucalyptus、Vmware、Xenserver、Openstack。在各种各样的云计算管理平台中只有Openstack是完全开源的,而开源的云计算管理平台则一致被业界和学术界认为是未来云计算发展的方向。
Openstack是美国国家航空航天局(NASA)和Rackspace合作研发的一个云平台管理的项目,它主要由3个部分组成:nova(虚拟服务器部署和业务计算)模块、swift(分布式云存储)模块、glance(虚拟机磁盘映像存储)模块。除了有Rackspace和NASA的大力支持外,后面还有包括Dell、Citrix、Cisco等公司的贡献和支持,发展速度非常快。
1 KVM技术
KVM(Kernel-based Virtual Machine)是由以色列的一个开源组织开发的基于Linux内核的虚拟机,于2008年被红帽收购。KVM由两部分组成:(1)内核中管理虚拟化硬件的设备驱动,通过字符设备/dev/km实现;(2)QEMU,用来模拟用户的PC机。KVM与其他虚拟技术不同的是KVM是Linux内核的一部分,直接运行于硬件之上,虚拟机作为一个正常的Linux进程而实现,由标准Linux调度程序调度,能受益于Linux内核的所有特征,它能够直接与硬件交互,不需要修改虚拟化操作系统,相比于XEN等其他虚拟技术KVM更加轻量级。KVM虚拟机体系结构如图1所示。
2 虚拟机性能评测方法
如今为止还没有一套完整成熟的能为学术界和业界普遍接受和认可的虚拟机性能评测与分析方案。VMware公司作为虚拟化市场份额的最大占有者,并且是虚拟化性能评测委员会的成员,其推出了一款程序测试方案——VMmark。VMmark主要是对微软的WindowsServer进行的虚拟化性能测试与分析。但是对于普通用户来说其并不关心一台虚拟服务器性能的高低,他们关心的更多的是虚拟机和物理机相比其性能如何,相比于物理机虚拟机要损失多少性能,具体到细节方面就是处理器、内存、网卡I/O和磁盘I/O的性能与物理机相比其结果如何。因此本实验在性能测试方面还是采用传统的性能测试工具和方法。
在本实验中,采用ubuntu-12.04.2-server-amd64.iso作为基准操作系统。为保证测试数据的准确性,测试均采用系统自带指令和程序进行测试。本实验中所测试的性能对象和性能标准如表1所示。
本实验所采用的服务器的配置如下:2颗Intel(R)Xeon(R)CPU E5520(2.27 GHz,6核),8 GB内存,167 GB磁盘,两块以太网卡,其中一块网卡通过路由器连接到局域网中。实验开始之前先用ubuntu-12.04.2-server-amd64.iso做为底层操作系统,使用openstack搭建起一个私有云环境,然后使用KVM虚拟技术创建虚拟机,虚拟机的配置为2个CPU、2 GB内存、20 GB硬盘和一块网卡,同时为其分配一个IP地址使其也连接到局域网内。
在测试过程中,每一项测试都进行3次,最后进行统计汇总,然后以物理机的测试结果为基准,将虚拟机的测试结果与物理机进行对比和分析。每进行一项测试之后都会将本次测试所产生的所有内容删去并重启计算机从而保证本次测试不会对下一次测试结果产生影响。
3 测试结果
首先进行测试的是网卡I/O性能,在本次测试中虚拟机和物理机都通过一台路由器连接到同一个局域网内,然后从局域网内同一台ftp服务器下载一个3.13 GB大小的ISO镜像文件。为了保证测试的准确性,路由器没有连接外网,每次下载统计完成之后都要删除下载内容并重启机器。这个测试中主要使用wget指令,wget是一个从网络上自动下载文件的工具,其主要测试的是虚拟机的网卡I/O性能。经过对测试结果标准化处理之后图2中显示了KVM虚拟机和物理机的网络I/O对比结果。
从图2中可以看出KVM虚拟机的网络I/O性能与物理机相比是非常接近的。
从图3可以看出在压缩时间方面KVM虚拟机的压缩时间相比于物理机有一定的损失,损失比大概在13%左右。
然后进行的是解压测试,同压缩测试相同的是解压测试也采用的是bzip2指令,但是不同的是压缩测试是一个cpu密集型任务,主要体现的是机器的cpu性能,而解压测试则主要体现的是内存的性能。其测试对象是刚进行压缩测试时所产生的压缩文件,其大小为3.0 G。其测试对比结果如图4所示。
从图4可以看出在解压时间方面KVM虚拟机相对于物理机的损失大于其压缩时间的损失,性能损失率大概在18%左右,但是也在可接受范围之内。
在最后进行的是磁盘I/O性能的测试,本次测试中采用的是cp指令,每次执行完之后都会删除掉复制过去的文件只保留源文件然后对机器进行重启,cp操作对cpu和内存没有太大压力,其主要测试集中在硬盘的I/O性能。在本次测试中把一个3.2 G的镜像文件拷贝到同一个ext4分区下。其测试对比结果如图5所示。
从图5可以看出KVM虚拟机的磁盘传输性能还没有达到物理机磁盘传输性能的40%,损失比非常大,其效果是非常不理想的。
在单台虚拟机性能测试完成之后,最后测试了网卡I/O和硬盘I/O性能和虚拟机数量的关系,本次测试中分别在openstack云环境下创建了1台、2台、3台虚拟机,测试过程中每个结果测试3次,每次测试完成之后重启虚拟机,并最终以1台虚拟机的性能为基准,将两台和3台虚拟机的性能与其进行对比分析。其测试对比结果图如图6、图7所示。
分析图6可以看出,网卡I/O性能与虚拟机的数量关系较大,随着虚拟机数量的增加,网卡I/O的性能呈大幅下降的趋势,可以说虚拟机数量的增加对网卡I/O性能的影响是比较大的。从图7看到,当虚拟机数量增加到2台的时候硬盘I/O的性能只有很小的降低,可以说虚拟机硬盘I/O的性能还是保持在令人满意的状态,但是当虚拟机数量增加到3的时候,硬盘I/O的性能大幅下降了一半以上。性能只有2台时的一半不到。由此可以看出,随着虚拟机数量的增加,对网卡I/O和硬盘I/O的性能影响是比较大的。在openstack云环境中当增加虚拟机的数量时,需要着重考虑网卡I/O和硬盘I/O的性能。
本文主要评测了在openstack云环境下KVM虚拟机的基本性能,并使用了各种测试方法来比较了KVM虚拟机与物理机性能的差别。
在实验中可以看出,在网卡I/O性能方面KVM虚拟机与物理机的性能相比是不相上下的,甚至是完全相同的。采用bzip2所进行的压缩测试主要体现的是处理器的处理能力,可以看出相比于物理机KVM的处理器性能损失是比较少的,在可接受范围之内。解压测试则主要体现的是内存的性能,其性能损失比虽然比处理器要高一些但是也都是在可接受范围以内。唯一性能损失比较大的就是磁盘I/O性能,从测试结果可以看出,其性能还不到物理机的40%。
最后测试了网卡I/O、硬盘I/O性能和虚拟机数量的关系,发现随着虚拟机数量的增加,网卡I/O和硬盘I/O的性能都呈现大幅度下降的趋势。
从以上分析可以得出本文的结论,当使用openstack搭建起私有云环境时,对于处理器和内存尤其是网卡I/O性能要求比较高的业务,KVM虚拟技术是一个很不错的选择方案,但是当磁盘I/O密集型应用为主要业务时,KVM虚拟化解决方案就并不是一个很好的选择了,并且在增加虚拟机数量的时候需要着重考虑网卡I/O和硬盘I/O性能的下降,否则虚拟机的性能将不尽如人意。
参考文献
[1] 于波.Linux KVM的虚拟化性能[J].软件世界,2007,6(5):49-50.
[2] 崔泽永,赵会群.基于KVM的虚拟化研究及应用[J].计算机技术与发展,2011,21(6):108-111.
[3] 兰雨晴,宋潇豫,马立克,等.系统虚拟化技术性能评测[J].电信科学,2010(8):19-24.
[4] 余平.QEMU-KVM实现虚拟机动态负载均衡[J].技术应用,2012(6):59-62.
[5] 李亚奇.虚拟化云计算中资源管理的研究[J].电脑知识与技术,2013(6):2916-2917.
[6] 孙琳程.虚拟机KVM与XEN的性能分析[J].电脑知识与技术,2013(4):2364-2365.
[7] MAKHIJA. VMMARK: a scalable benchmark for virtualized systems[R]. Tech report, Vmware, Inc, 2006.