KVM虚拟机IO性能调优

KVM虚拟机IO性能调优

咱们知道OpenStack中nova组件可以支持不少种虚拟化方式,官方目前主推的KVM,面向KVM虚拟化支持的功能也是最多的,它可以和neutron组件有很好的结合。本文的重点主要讨论KVM虚拟机IO性能调优,可是须要提早说明的是不一样的场景须要选用不一样的策略,这里没有银弹。python

由于我不是专门作虚拟化技术的,因此本文只是把nova中的调优方法总结一下,至于哪一个好,本身试!app

aio 调度策略

aio有两种调度策略,nativa 和 threads,nova中并无激活使用aio,多是考虑到除了aio还有bio以及nio可使用的缘故,这些应该交给管理员去配置。dom

nova中的代码没有指定aio,因此咱们的简单修改下代码:python2.7

#edit /usr/lib/python2.7/dist-packages/nova/virt/libvirt/config.py

self.disk_total_iops_sec = None
self.io = "native"   #add

def format_dom(self):
    dev = super(LibvirtConfigGuestDisk, self).format_dom()

    dev.set("type", self.source_type)
    dev.set("device", self.source_device)
    if (self.driver_name is not None or
        self.driver_format is not None or
        self.driver_cache is not None):
        drv = etree.Element("driver")
        if self.driver_name is not None:
            drv.set("name", self.driver_name)
        if self.driver_format is not None:
            drv.set("type", self.driver_format)
        if self.driver_cache is not None:
            drv.set("cache", self.driver_cache)
        if self.io is not None:  #add
            drv.set("io", self.io)   #add
        dev.append(drv)

重启nova-compute服务,已经建立的虚拟机硬重启一下,就能支持aio了,查看qemu-kvm的进程,能够看到aio的参数。性能

目前没有配置项能够设置aio,社区里有个BP是关于这个问题的,https://blueprints.launchpad.net/nova/+spec/improve-nova-kvm-io-support ,尚未被实现,core成员给的回复是io策略比较多,nova不适合作这些事,这些应该交给管理员去配置kvm来实现。测试

那么这个aio该如何使用呢?有个广泛的认识是这样的,io=native for block device based VMs,io=threads for file-based VMs。就是说qcow2的用thread,基于块设备建立vm就用nativa,但这并非绝对的,最好在你的场景下都测试一下,选择最优的。.net

io cache策略

激活了aio后,vm的io性能可以比较接近物理机,可是若是你对性能有更高的追求,仍然有办法,就是开启io cache,让物理内存为你的vm io操做提速。code

查看qemu-kvm的进程,能看到 cache=none 的参数,这是nova默认的,默认是关闭cache,若是开启cache,则须要作一些配置:orm

#edit /etc/nova/nova-compute.conf

[libvirt]
disk_cachemodes = file=default, block=none

file是针对file-backend的disk,block是针对块设备的disk,这个你能够经过vm的 libvir.xml 对比看一下就了解。default 和 none 是指cache 模式,nova提供不少种cache mode,经过源码可知:xml

# nova/virt/libvirt/driver.py

self.disk_cachemodes = {}
self.valid_cachemodes = ["default",
                    "none",
                    "writethrough",
                    "writeback",
                    "directsync",
                    "unsafe",
                    ]

指定了cache以后,vm的io性能将会有质的飞跃,可是cache写满后,性能就回到普通状态,cache刷到硬盘后,io性能又会提高。

block or file backend
若是前面所说file backend就是qcow2这个模式,qcow2虽然有不少先进的特性,可是io性能上一直都是有问题的,而基于块设备block backend建立的vm,io性能上是最佳的。

实现block backend能够有两种方法

基于cinder volume建立vm,这时候宿主机经过iSCSI挂载远端volume,vm可将其当作本地volume使用。
基于本地lvm建立vm,须要提早设置好本地的volume group。
经过本地lvm方式建立vm,须要进行以下配置:

确认lvm2有木有安装,没有则装之

修改/etc/nova/nova-compute.conf

[libvirt]
images_type=lvm
images_volume_group=nova-volumes

系统须要有一块裸设备(好比 /dev/sdb),执行下面命令:

pvcreate /dev/sdb
vgcreate nova-volumes /dev/sdb

重启nova-compute服务
block backend 的性能无疑是最好的,可是其余特性很受限制,好比快照,block backend 只能使用raw镜像,快照会很大,很是不方便。

按照本身的场景,各取所需吧。

相关文章
相关标签/搜索