目前,主流的共有云提供商大部分采用的hypervisor还是XEN,所以,很多人会笼统的认为xen比kvm更好。个人认为,这是个误区。国外的amazon和国内的阿里云,华为云之所以选择xen作为hypervisor,个人认为只是他们从事hypervisor方面的研究更早,当时最好的hypervisor就是xen,这么多年了投入了大量的人力和物力,已经形成了一定的知识积累,所以才会一直用xen而已,也就是说决定因素并不是,从技术上讲,xen比kvm更好。相反,我反倒认为,kvm在技术上走在了xen的前面。
1. KVM IO 性能测试
下面来介绍下,kvm在IO方面的一个new feature - virtio-blk-data-plane,首先来看下性能测试的结果
(1)测试环境配置参数
(2)测试结果
测试结果总结:
(1)在block size = 4K的情况下,采用了virtio-blk-data-plane的KVM的性能是最好的,达到了1577684 IOPS,是sphere 5.1的1.5倍,是hyper-v的4倍,是KVM默认采用的io驱动virt-blk的10倍
(2)在block size从512B到8K情况下, 采用了virtio-blk-data-plane的KVM的性能也是最好的.
2. virtio-blk-data-plane的基本原理
virtio-blk-data-plane是在原来virt-blk的基础上,通过给每个io device创建一个专门的线程来负责设备的io操作,目的是允许不同设备的IO能够并发的进行。由于每个io设备的io都由单独的线程来处理,一方面,减少了多个io设备之间的同步问题,另一方面,减少了io操作与qemu主进程之间的同步。另外,io线程采用了io eventfd/irqfd机制,使得io处理与guest os的执行解耦,充分利用了host os 的AIO,因此,极大的提高了guest os的io性能。
virtio-blk-data-plane的架构如下图所示。
由于virtio-blk-data-plane在redhat 6.4中属于tecnology preview,所以,目前还有很多限制,主要在存储方面:
(1)仅支持raw格式的镜像
(2)KVM的一些比较新的features,目前还不能使用virtio-blk-data-plane,比如storage migration, disk hot unplug, io throtting, image streaming and driver mirroring.