(KVM书终于差不多写好了,后面还需要修修补补;很久没连载了,再添加几篇吧)
8.1 虚拟化性能测试简介
虚拟化性能测试,包括的范围比较广泛,可能包含CPU、内存、网络、磁盘的性能,也可能包含虚拟客户机动态迁移时的性能,也可能需要考虑多种物理平台上的性能,也可能需要考虑很多个虚拟客户机运行同一个宿主机上时的性能。目前,有一些针对各个虚拟化软件的性能分析工具(profiling),也有一些衡量虚拟化系统中单个方面性能的基准测试工具(benchmark),不过还没有一个能集成这些所有的性能测试于一体的比较权威的专门针对虚拟化的性能测试工具。由于虚拟化性能测试涉及到计算机系统的方方面面,而且没有一个标准化的测试工具,因此,虚拟化性能测试与性能分析也是一个比较具有挑战性的工程研究领域。
虚拟化性能测试,初看起来是比较复杂和难以操作的,不过,只要细心研究并且从用户的角度出发,虚拟化性能测试也并不是多么的高深。对于绝大多数普通用户来说,他们所接触到的无非是一些应用软件(如微软的Office办公套件、杀毒软件等)和互联网中的网页(如Google、百度等),所以,不管是否使用虚拟化,终端用户最关心的还是实际使用的应用软件和互联网站点的性能。应用软件、网络站点的性能才是直接地真正关系到用户体验。从这个角度来看,在虚拟化环境中,只要能保证普通应用程序的性能良好,自然就能对用户带来良好的性能体验。
评价一个系统的性能标准,一般可以用响应时间(response time)、吞吐量(throughput)、并发用户数(concurrent users)和资源占用率(utilization)等几个指标来衡量。下面简单介绍一下这几个指标的含义。
1)响应时间:指的是客户端从发出请求到得到响应的整个过程说花费的时间。响应时间是用户能感受到的最直接最关键的性能指标,试想,如果一个网页,尽管其中内容质量比较良好,但是每次在浏览器中输入URL后需要10分钟才能得到响应打开网页,这样的网页你愿意再次访问吗?
2)吞吐量:指的是在一次性能测试过程中网络上传输的数据量的总和。在一定的时间长度内,系统能达到的吞吐量当然越到越好,因为吞吐量越大则越可能为用户传输更多的数据。
3)并发用户数:指的是同时使用一个系统服务的用户数量。对于一个系统来说,能支持的并发用户数当然是越多越好。2011年6月推出的12306铁路购票网站[1],在2012年春节之前不久的时候,由于我们每年春运繁忙的国情,有很多人同时登陆网站购票而且没买到票的人会不停刷新网页,那时的并发用户数量达到很大的数量级别,从而导致那时的12306网站几乎瘫痪,要么完全打不开网页,要么需要花费几分钟才能打开网页。
4)资源利用率:值的是在使用某项服务时,客户端和服务器端物理资源占用情况,包括CPU、内存等的利用率。在达到同样的响应时间、吞吐量和并发用户数的指标时,系统的资源利用率当然是越小越好。例如,我们使用一个应用程序时,都不希望它就将我们宝贵的CPU和内存全都占用掉,因为同一个系统还需要并行运行其他的程序。
系统中的各种应用程序数量和类型都非常众多,如:Office等办公软件、数据库服务器软件、文件存储系统、Web服务、缓存服务、邮件服务、科学计算服务、各种单机的或者网络版的游戏,等等。应用程序不但数量众多,而且它们对使用系统的使用特点也不同,有CPU密集型的(如科学计算),有网络I/O密集型的(如Web服务),也有磁盘I/O密集型的(如数据库服务),也有内存密集型的(如缓存服务)。功能相似的应用程序,使用不同编程语言来开发,其性能差别可能很大,而且,选择不同的中间件(middle ware)来部署统一套应用程序,其性能也很可能大不相同。所以,衡量KVM虚拟化的性能,最直接的方法就是:将准备实施虚拟化的系统中运行的应用程序迁移到KVM虚拟客户机中试运行,如果性能良好且稳定,则可以考虑真正实施该系统的虚拟化。
尽管系统中运行的应用程序可能是数量繁多,种类也千差万别,但是它们几乎都会使用CPU、内存、网络、磁盘等基本的子系统。在本章中,主要对KVM虚拟化中的几个最重要的子系统进行性能对比测试,其具体方法是:在非虚拟化的原生系统(native)中执行某个基准测试程序,然后将该测试程序放到与原生系统配置相近的虚拟客户机中执行,然后对比在虚拟化和非虚拟化环境中该测试程序执行的性能。由于QEMU/KVM的性能测试与硬件配置、测试环境参数、宿主机和客户机系统的种类和版本等都有千丝万缕的联系,而且性能测试本身也很可能有一定的误差存在,故本章展示的部分测试结果可能在不同的测试环境中并不能重现,因此本章中的所有测试数据和结论都仅供读者参考。在实施KVM虚拟化之前,请以实际应用环境中的测试数据为准。