电子测试
主办单位:北京市科学技术研究院
国际刊号:1000-8519
国内刊号:11-3927/TN
学术数据库优秀期刊 《中文科技期刊数据库》来源期刊
       首 页   |   期刊介绍   |   新闻公告   |   征稿要求   |   期刊订阅   |   留言板   |   联系我们   
  本站业务
  在线期刊
      最新录用
      期刊简明目录
      本刊论文精选
      过刊浏览
      论文下载排行
      论文点击排行
      
 

访问统计

访问总数:28931 人次
 
    本刊论文
OpenStack云环境中KVM虚拟机性能测试与优化

  摘要:目前,虚拟化技术在一定程度上影响着云计算平台的性能,但KVM虚拟机上运行的操作系统(GuestOS)是针对物理机开发的操作系统,因而存在不适合虚拟化环境的因素。文章在OpenStack云环境下,对KVM虚拟机磁盘I/O、网卡I/O和处理器的计算能力进行了测试,对比了KVM虚拟机与物理机的性能差距,并通过将虚拟机的处理器(VCPU)和物理机处理器(CPU)进行绑定,同时将宿主机的扩展页表(EPT)开启,从而实现了对KVM虚拟机性能的优化。
  关键词:OpenStack;KVM;性能测试;优化
  0引言
  随着计算机和互联网的快速发展,大数据和云计算应运而生,其中云计算发展尤为迅猛,现在比较成熟的云平台就有Abiquo公司的AbiCloud、Apache基金会的Hadoop、微软的Azure平台、阿里巴巴的阿里云、Google的GoogleAppEngine、中国移动的BigCloude-大云平台等,在现有这些云平台中,只有OpenStack是完全开源的,形势表明,开源云平台是未来云计算发展的一个趋势。
  OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。OpenStack包含两个主要模块:Nova和Swift,前者是NASA开发的虚拟服务器部署和业务计算模块;后者是Rackspace开发的分布式云存储模块,两者可以一起使用,也可以分开单独使用。OpenStack除了得到以上两家公司的支持外还被Dell、Citrix、Cisco、Canonical等大公司支持,并且发展迅速。
  1虚拟化技术与虚拟机性能测试
  1.1KVM技术
  KVM(Kernel-basedVirtualMachine)是一个开源的系统虚拟化模块,它需要硬件支持,如IntelVT技术或AMDV技术,是基于硬件的完全虚拟化,完全内置于Linux。KVM由两部分组成:(1)内核中管理虚拟化硬件的设备驱动,通过字符设备/dev/km实现;(2)QEMU用来模拟用户的PC机。KVM与其他虚拟技术不同的是KVM是Linux内核的一部分,直接运行于硬件之上,虚拟机作为一个正常的Linux进程来实现,并由标准Linux调度程序调度,能受益于Linux内核的所有特征,它能够直接与硬件交互,不需要修改虚拟化操作系统,相比于XEN等其他虚拟技术KVM更加轻量级。KVM虚拟机体系结构如图1所示。
  KVM虚拟机使用软件模拟的方式实现I/O设备的虚拟化,其实现方式是由内核中的KVM模块截获客户操作系统中的I/O请求,交给运行在宿主机(HostOS)上的QEMU,QEMU将这些请求转换为对宿主机操作系统的调用,通过宿主机操作系统的设备驱动访问物理硬件,实现对I/O设备的虚拟化。该方法依赖QEMU对设备的模拟,因此实现简洁,但是由于I/O处理流程中涉及多个环境,切换较多,其I/O性能很不理想。虽然KVM较新的版本中已经将一些关键设备的模拟进行了优化,但是主要的设备,例如磁盘和网卡虚拟化的性能开销仍旧较大。
  1.2KVM虚拟机性能测试
  在虚拟化的应用中,虚拟机的性能高低在生产一线是一个很严峻的问题。虚拟机性能主要由处理器(CPU)的计算能力、磁盘I/O和网卡I/O来进行综合评估。对KVM虚拟机的性能测试,主要是通过各种基准测试程序(benchmark)来比较KVM虚拟机和物理机的性能差距,根据对比结果分析KVM虚拟机的性能特征。
  1.2.1虚拟机的CPU性能测试
  (1)测试环境:曙光A620r-G服务器,1.8TRAID5硬盘阵列,8核E5-4670Inter至强CPU,62G内存,云平台版本为OpenStackJuno,KVM版本为KVM-83。
  (2)测试程序:基准测试程序bonnie++-1.03e,Bonnie++是一个用来测试UNIX文件系统性能的测试工具,主要目的是为了找出系统的性能瓶颈,测试结果中包含的参数主要有字符读/写速度(单位:k/sec)、块读/写速度(单位:k/sec)、块的修改/重写(k/sec)、各个操作的CPU利用率(百分比)。

  (3)测试方法:在云平台上创建10台虚拟机,每个虚拟机分配2个虚拟内核(VCPU)、2G内存、40G硬盘,让基准测试程序从在1个虚拟机上运行,依次增加直到在10个虚拟机上同时运行,将每次运行的结果与基准测试程序在物理服务器上运行的结果进行比较得出虚拟机磁盘字符读/写速度、块读/写速度、块的修改/重写速度和CPU的利用率与物理服务器的差距。
  在测试过程中,虚拟机和物理服务器每一项测试都进行10次,最后对各项指标求平均值,然后以物理服务器的测试结果为基准,将虚拟机的测试结果与物理服务器的测试结果进行对比和分析。每次测试结束之后都要重启虚拟机和物理服务器,从而保证每次测试结果都是互不影响的。
  给出了从基准测试程序在1台虚拟机上运行到基准测试程序同时在10台虚拟机上运行时CPU利用率的对比结果,横坐标为同时运行基准测试程序虚拟机的个数,纵坐标为每种情况下虚拟机CPU利用率与基准测试程序在物理服务器上运行时CPU利用率的比值。
  图2中给出了测试的10组KVM上虚拟机字符读/写、块读/写、块重写的CPU利用率和物理服务器的字符读/写、块读/写、块重写的CPU利用率的比值,通过对比可知,KVM虚拟机与物理服务器的计算能力差距是很小的,损失率不到10%。
  1.2.2虚拟机磁盘读写I/O的性能测试
  给出了从基准程序在1台虚拟机上运行到基准测试程序在10台虚拟机上同时运行的对比结果,图中横坐标为同时运行基准测试程序虚拟机的个数,纵坐标为每种情况下基准测试运行在虚拟机上的字符读/写、块读/写、块重写的速度与基准测试程序运行在物理服务器上时字符读/写、块读/写、块重写的速度的比值。
  分析图3可知,当虚拟机的数量为1时,虚拟机和物理服务器的磁盘读写I/O性能差距很小。但随着虚拟机数量的增加,虚拟机字符读/写、块读/写、块重写的速度下降比较明显,通过分析得出虚拟机的数量与磁盘读写性能存在线性关系。
  1.2.3虚拟机网络I/O性能测试
  测试环境:曙光A620r-G服务器,1.8TRAID5硬盘阵列,8核E5-4670Inter至强CPU,62G内存,云平台版本为OpenStackJuno,KVM版本为KVM-83。
  测试程序:netperf-2.7.0“netperf-H[部署netserver服务器的IP]–t[网络连接类型]-l[测试的时间长度](在该测试中时间统一定为60s)”。
  测试方法:在云平台上创建10台虚拟机,每个虚拟机分配2个虚拟内核、2G内存、40G硬盘,在每台虚拟机上安装一套netperf-2.7.0基准测试程序,让基准测试程序从在1个虚拟机上运行,依次增加直到在10个虚拟机上同时运行,让这些测试值与在服务器上运行netperf-2.7.0基准测试程序得出的试值进行比较。
  Netperf是一种网络性能的测量工具,主要针对基于TCP或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulkdatatransfer)模式和请求/应答(request/reponse)模式。Netperf测试结果所反映的是一个系统能够以多快的速度向另外一个系统发送数据,以及另外一个系统能够以多快的速度接收数据。Netperf工具以client/server方式工作。server端是netserver,用来侦听来自client端的连接,client端是netperf,用来向server发起网络测试。在client与server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试结果;在控制连接建立并传递了测试配置信息后,client与server之间会再建立一个测试连接,用来来回传递特殊的流量模式,以测试网络的性能。
  在测试过程中,虚拟机和物理服务器每一项测试都进行10次,最后对各项指标求平均值,然后以物理服务器的测试结果为基准,将虚拟机的测试结果与物理服务器的测试结果进行对比和分析。每次测试结束之后都要重启虚拟机和物理服务器,从而保证每次测试结果都是互不影响的。
  图4给出了让基准测试程序netperf-2.7.0“netperf-H[部署netserver服务器的IP]–tTCP_STREAM-l120”在1台虚拟机上运行,依次增加直到在10台虚拟机上同时运行得出的测试值与基准测试程序netperf-2.7.0“netperf-H[部署netserver服务器的IP]–tTCP_STREAM-l120”在物理服务器上运行得出的测试值的比较。该比较是虚拟机网络I/O和物理服务器网络I/O在TCP_STREAM方面的比较,横坐标代表虚拟机的数量,纵坐标代表网卡的流量(单位为MB)。
  可以看出,在1台虚拟机时,虚拟机TCP_STREAM方面的网络I/O与物理服务器TCP_STREAM方面的网络I/O性能几乎是一样的,随着虚拟机数量的增加,虚拟机TCP_STREAM方面的网络I/O大幅下降,下降的比例与虚拟机的数量成线性关系。
  给出了让基准测试程序netperf-2.7.0“netperf-H[部署netserver服务器的IP]–tTCP_STREAM-l120”从在1台虚拟机上运行,依次增加直到在10台虚拟机上同时运行得出的测试值与基准测试程序netperf-2.7.0“netperf-H[部署netserver服务器的IP]–tUDP_STREAM-l120”在物理服务器上运行得出的测试值的比较。
  可以看出,在一台虚拟机的时候,虚拟机UDP_STREAM方面的网络I/O与物理服务器UDP_STREAM方面的网络I/O性能几乎是一样的,随着虚拟机数量的增加,虚拟机UDP_STREAM方面的网络I/O大幅下降,下降的幅度与虚拟机的数量成线性关系,与图4所描述的TCP_STREAM相类似,但是在下降幅度上比TCP_STREAM要大。
  2优化及优化效果
  2.1优化策略
  基于上面的测试结果,发现KVM虚拟机的CPU和I/O都不是很理想,特别是磁盘读写I/O,这是由于运行在虚拟机上的操作系统是针对物理机开发的,在虚拟机上运行时存在一些不适应虚拟化环境的因素,影响虚拟机的性能。下面将从CPU亲和性、扩展页表等影响KVM性能的因素进行改进和优化。
  2.2CPU亲和性
  由KVM虚拟机的原理可知,每个虚拟机都是由Linux调度程序管理的标准进程。CPU亲和性就是进程要在某个给定的CPU上尽量长时间地运行而不被迁移到其他处理器的倾向性。在多核的环境中,Linux内核对进程的调度算法也是按照进程对处理器的亲和性设置的。开启进程与处理器的亲和性可以减少进程在多个CPU之间交换运行带来的缓存命中失效,但从一个进程运行的角度来看,如果能使一个进程一直运行在同一个CPU上,减少进程在多个处理器间频繁迁移,从而提高缓存的命中率,进而提高虚拟机的性能。
  本文采用将进程绑定在固定CPU上的方法来减少KVM虚拟机进程在CPU间的频繁调度,从而优化虚拟机性能。具体要求如下:
  (1)用户在创建虚拟机时,可以指定其在某一个CPU上运行;
  (2)虚拟机运行在指定的核上时,整个运行期间不会发生迁移。
  如图6所示,在KVM运行的过程中,通过Virsh工具将虚拟机CPU与物理CPU进行绑定,将虚拟机的VCPU0与物理机的CPU0绑定,并在某个时刻接触绑定关系,下一个时刻会绑定在物理机的CPU1上。在任意给定的时刻,VMCS与物理CPU是一一对应的关系。
  2.3扩展页表EPT
  扩展页表EPT(ExtentedPageTable)是Intel在VT-x技术基础上增加的一种硬件辅助虚拟化技术。支持该虚拟化技术的处理器有根模式和非根模式两种工作模式。虚拟机监控(VMM)工作在根模式,虚拟机工作在非根模式。扩展页表只有在非根模式下才起作用,通过扩展页表的翻译可以将虚拟机物理地址转换成物理机的物理地址,这种转化是由硬件完成的,所用的扩展页表结构都是由虚拟机监控器创建、维护和更新。
  2.4优化效果
  在本节中,将虚拟机操作系统中的VCPU与物理机CPU进行绑定,将宿主机的扩展页表EPT开启,测虚拟机的磁盘I/O、网络I/O和CPU的利用率与在第1节中虚拟机操作系统中的VCPU与物理机CPU未进行绑定和宿主机的扩展页表未开启时,测得虚拟机的磁盘I/O、网络I/O和CPU利用率并进行对比的结果如图7所示。
  (a)KVM虚拟机CPU利用率优化前后对比
  (b)KVM虚拟机磁盘读写I/O优化前后对比
  (c)KVM虚拟网卡I/O(TCP_STREAM)优化前后对比
  (d)KVM虚拟网卡I/O(UDP_STREAM)优化前后对比
  虚拟机磁盘I/O、网络I/O和

  CPU利用率优化前后的对比结果
  由图7分析可知,图7(a)中KVM虚拟机CPU利用率优化前后对比表明优化之后虚拟机的计算能力提高3%~5%;图7(b)中KVM虚拟机磁盘读写I/O优化前后对比表明优化之后虚拟机的磁盘读写提高7%~10%;图7(c)中KVM虚拟网卡I/O(TCP_STREAM)优化前后对比和图7(d)KVM虚拟网卡I/O(UDP_STREAM)优化前后对比表明,优化前后的网络I/O几乎没有变化。
  3结语
  虚拟化技术在云计算领域所起的作用越来越突出,但在虚拟机的处理器(VCPU)、I/O方面还存在一些问题,需要进一步优化。本文通过一些基准测试程序对KVM虚拟机的处理器(VCPU)、磁盘I/O和网络I/O进行了测试,对在OpenStack云环境下虚拟机和物理机的性能差异有了初步认识,接着根据KVM虚拟机的虚拟化原理分析了影响虚拟机性能的因素,并通过将虚拟机的处理器(VCPU)与物理机的处理器(CPU)进行绑定和开启宿主机的扩展页表(EPT)来对KVM虚拟机进行优化。优化后虚拟机的计算能力提高3%~5%,磁盘I/O提高7%~10%,而网络I/O没有变化。因此,可以得出结论:在OpenStack私有云环境中,KVM虚拟机比较适合执行CPU密集型和网络I/O密集型的任务,但是当KVM虚拟机在执行磁盘I/O密集型的任务时,虚拟机的性能会大幅度下降,并且在增加虚拟机数量的时候需要着重考虑网卡I/O和硬盘I/O性能的下降,否则OpenStack云平台的性能会很不理想。

特别说明:本站仅协助已授权的杂志社进行在线杂志订阅,非《电子测试》杂志官网,直投的朋友请联系杂志社。
版权所有 © 2009-2024《电子测试》编辑部  (权威发表网)   苏ICP备20026650号-8