KVM性能测试报告

3570阅读 0评论2015-09-01 龙飞九州
分类:LINUX


kvmlogo.gif

本测试试图找出以下问题的答案:
           1. 虚拟机相对于物理机性能损失有多严重(CPU/MEM/NET/DISK) 
           2. 对于多个虚拟机,KVM 对资源的分配是否公正
           3. 找出性能最好的物理机磁盘类型和虚拟机磁盘类型及参数 
               A) 物理机使用 ext4 的最优化设置 
                     ?  使用 raw 磁盘的最优性能设置 
                           ?  cache类型 
                                 ? none 
                                 ? writeback 
                                 ? writethrough 
                           ?  驱动类型              
                                 ? ide 
                                 ? virtio 
                     ?  使用 qcow2 磁盘的最优性能设置 
                           ?  cache类型
                                 ? none        
                                 ? writeback 
                                 ? writethrough 
                           ?  驱动类型 
                                 ? ide 
                                 ? virtio 
                           ?  是否preallocation  
                      ?  比较得出使用 ext4 的虚拟机磁盘类型最优化设置 
 
              B) 物理机使用xfs磁盘的最优化设置 
                      ?  使用 raw 磁盘的最优性能设置
                            ?  cache类型 
                                 1. none
                                 2. writeback
                                 3. writethrough
                            ?  驱动类型 
                                  1. ide
                                  2. virtio
                      ?  使用 qcow2 磁盘的最优性能设置
                            ?  cache类型 
                                  1. none
                                  2. writeback
                                  3. writethrough
                            ?  驱动类型 
                                  1. ide
                                  2. virtio
                            ? 是否preallocation
                      ? 比较得出使用 ext4 的虚拟机磁盘类型最优化设置 
  
              C) 比较得出ext4和xfs那个更优秀 

物理机配置


服务器型号:DELL R410
CPU型号:CPU:Intel(R) Xeon(R) CPU E5620 2.4G*2
内存大小:8GB
硬盘大小:300*2
网卡:Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet * 2

虚拟机配置


在测试一个参数的时候为了防止其它因素的影响,不同的测试虚拟机配置会不同

CPU 的测试


虚拟机与物理机之间的性能对比 
主要测试相对于物理机,虚拟机的性能损失有多少

虚拟机配置


1个VCPU    2G 内存    20G 硬盘
用一个寻找质数的 C 程序,分别测试找出一百万,一千万,1 亿以内的质数所用的时间 
kc1.png

kc2.png

从上面的图可以看到,KVM 虚拟机相对于物理机的 CPU 性能损失非常小(不到 1%) 
 
由于物理机是 8 核的 CPU,我们猜想是不是他们运行在各自的 CPU,所以我们分别测试了同时在 2 个,4 个,6 个,8 个和 10 个虚拟机中运行测试程序所使用的时间,得到的结果是他们使用的时间相差不大,这里是同时在 10 个虚拟机中运行测试程序找出 1 亿中的质数所使用的时间对比图,我们在最后加上了在物理机中的运行时间 
kc3.png

我们猜想当同时运行的程序数(10)多于 CPU 数(8)时会有资源争抢或资源分配不均的情况出现,从上图可以看 到 KVM 于这些处理的很好,资源利用率很高,物理机和最慢的相差不到 20 秒(6%),资源分配也比较公正 

内存 


对于内存的测试多们使用了一个程序 memtester(注意不是 memtest),它能取给定大小的内存进行读写等一系 列的测试操作 
kc4.png

从这个图可以看出,相对于物理机,虚拟机的性能损失非常小 
kc5.png

上图是两个虚拟机同时运行测试所用的时间和物理机之间的对比,可以看出 KVM 对内存资源的分配很公平 

网络


我们在连接在相同交换机的另一台服务器上搭建 Web 服务器,让测试机和虚拟机同时下载 5G 的文件 
kc6.png

从这个图可以看到,公认的性能比较好的 virtio 驱动将虚拟机的网络性能发挥到极致,和物理机不相上下 
kc7.png

这个图再一次反映了 KVM 对资源分配的公平性 
 
我们还测试了同一台物理机上的虚拟机之间的传输速度可以稳定在 122MB/s 

硬盘 


磁盘的测试花了一些时间,因为有很多因素会影响磁盘性能,这个测试也没有覆盖所有可能的因素 先上数据 
kc8.png

对表的说明: 
      ? 这个表记录了不同的参数对安装一个 CentOS 到虚拟机中所用的时间的影响
      ? 安装使用相同的 kickstart
      ? 使用 time 命令记录安装过程所使用的时间
      ? 最后一列是将前一列的时间转化为秒数
      ? 第一列的 xfs 和 ext4 指宿主机的存放虚拟磁盘镜像文件的分区类型,挂载参数都使用 default
      ? Raw 和 Qcow2 指虚拟机的磁盘类型
      ? ide 和 virtio 指虚拟机磁盘的驱动类型
      ? pre 和 nopre 只是针对 qcow2 磁盘类型,创建磁盘文件时加上参数 preallocation=metadata 既为 pre
      ? none,wt,wb,分别指缓存类型为 none, writethrough, writeback
      ? 虚拟机都使用 1vcpu,2G 内存,40G 磁盘
 
下面从总体上看下他们的性能如何
kc9.png

从这个图不太容易看出哪个配置使用的时间最短,但非常容易看出最耗时的一个: 
 
宿主机使用 xfs,虚拟机使用 qcow2 磁盘,ide 驱动和 writethrough 缓存类型 
 
下面我们以由小到大的顺序,找出每个区域的最高性能,然后他们之间做对比 

首先看一下不同的缓存类型对性能的影响 


kc10.png

kc11.png

从两幅图可以得到的结论是:使用 writethrough 性能最差,none 和 writeback 相差不大 
 
这里插点缓存的知识
KVM 缓存模式概览 通常,虚拟机使用宿主机上的一个文件保存它的数据,这个文件代表一个虚拟机作为正常的物理磁盘使用的虚 拟磁盘,然而,从宿主机的角度来看这个虚拟磁盘只是一个正常的数据文件并且可以对它缓存

在这种情况下,缓存是隐藏一些磁盘数据在内存中.当我们只在内存中存储上次读的数据,我们称之为读缓存,或 者 write-through 缓存.当我们还存储一些要写到硬盘的数据在内存中,在以后的某个时间再写到磁盘,我们称 之为读写缓存,或者 write-back 缓存,write-back 缓存通过将写磁盘请求缓存到高速内存中,有更高的性能,然 而它也比 write-through 更有可能丢失数据,因为后者只缓存写请求,写请求立即写到磁盘里 
 
因为磁盘 I/O 是非常重要的因素,Linux 和 Windows 系统通常使用 write-back 策略周期性的写到磁盘里,然 而,当然后虚拟化管理程序虚拟一个机器时,你可以有效的缓存一些数据两次(一次在宿主机的内在中,一次在虚 拟机的内存中),所以你可以取消宿主机对磁盘文件的缓存,让虚拟机自己管理它的缓存.些外,宿主机端的 write- back 策略很大程序上增加了数据丢失的可能性,然而,你很快会发现,新特性”barrier passing”的加入,你不用 再担心这个 

我们可以用一个图来更好的理解


kc12.png

假设传统的(没有 barrier-passing)程序:当虚拟机里的程序要写一些数据,通常数据保存到虚拟机的页缓存中. 页缓存会周期性的冲数据到虚拟磁盘设备也就是宿主机上的磁盘文件,另一方面,如果应用程序有一些非常重 要的数据要写,它可以绕过页缓存并且使用同步写方式,只有当写操作成功才返回,确保了所有的数据写到了虚 拟机的永久存储系统 
 
然而,在这一点上(写到虚拟机磁盘上)有三种可能:
         ? 如果缓存策略是'writeback',数据会缓存到宿主机的页缓存中(红箭头) 
         ? 如果缓存策略是'none',数据立即写到物理磁盘(灰箭头)
         ? 如果缓存策略是'writethrough',数据将立即写到物理磁盘(蓝箭头) 
更多详情

下面我们看看 qcow2 磁盘使用和不使用 preallocation 的性能差异有多大 


kc13.png

从上图可以看出,不管宿主机使用 ext4 还是 xfs,虚拟机使用 ide 还是 virtio 驱动,使用 preallocation 都有性能 的提升,
这里有一个不问题:如果宿主机使用 xfs,创建 qcow2 磁盘镜像使用 preallocation 会很慢(40G 需要 8 分钟) 

下面我们来看看 ide 和 virtio 他们的性能对比 


kc14.png

很明显使用 virtio 是更明智的选择 

下面我们再看看 raw 和 qcow2 之间的对比


这里插一点 Raw 和 qcow2 的知识:
raw 的优势(能找到的相关资料太少,不知道是不是理解有误):
    ? 简单,并能够导出为其他虚拟机的虚拟硬盘格式
    ? 根据实际使用量来占用空间使用量,而非原先设定的最大值(比如设定最高 20G,而实际只使用
3G)。——需要宿主分区支持 hole(比如 ext2 ext3 ntfs 等)
    ? 以后能够改变空间最大值(把最高值 20G 提高到 200G,qcow2 也可以,不过要转为 raw)
    ? 能够直接被宿主机挂载,不用开虚拟机即可在宿主和虚拟机间进行数据传输(注意,此时虚拟机不要开)
而qcow2 的优势:
    ? 更小的虚拟硬盘空间(尤其是宿主分区不支持 hole 的情况下)
    ? optional AES encryption, zlib based compression and support of multiple VM snapshots.
原文在这里: style="box-sizing:border-box;" />
从图表中可以看出,如果 qcow2 使用 preallocation, raw 的性能优势已经不是很明显 

下面看看 ext4 和 xfs 之间 的对比 


kc16.png

可以看到 ext4 性能要比 xfs 高,这可能是默认的挂载参数不能充分发挥 xfs 的性能 

最后,我们把时间最短的放到一起看到底那个最快 


kc17.png

总结 


CPU,内存都不是问题,对于硬盘,通过前面一系列的测试,我推荐使用以下配置:
    ? 使用 Ext4 做为宿主机磁盘格式
    ? 虚拟机用 qcow2+preallocation,
    ? 缓存使用 writeback
    ? 虚拟机网卡驱动使用 virtio
上一篇:MySQL连接的时候报 ERROR 1129
下一篇:数据中心T4机房标准等级