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鏡像,快照會很大,很是不方便。

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

相關文章
相關標籤/搜索