我正在使用 libvirt 和 KVM 在 Ubuntu 15.04 服务器内设置虚拟化 Ubuntu 15.10 客户机。
主机系统中的存储:
# mount | grep ext4
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/sdb1 on /media/hdd type ext4 (rw,relatime,data=ordered)
/dev/sda是 SSD,/dev/sdb是 HDD。
初始配置是使用 virt-manager 完成的。
问题:
客户系统的整体性能似乎不错,但是某些操作,明显使用 apt-get 安装软件包(以及客户系统安装)非常慢。
客户磁盘映像是原始格式,我尝试将其作为文件放在 SSD 和 HDD 上,也尝试将其作为 HDD 上的单独分区。不同的位置会对性能产生一些影响,但是使用 apt-get 安装某些软件包的速度仍然比在主机系统上慢两到三倍。
我也尝试了各种 qemu 磁盘缓存选项,并使用不安全缓存似乎完全消除了这个问题。但是,任何其他缓存设置,包括没有任何和写回性能不佳。当然,使用 unsafe 看起来并不是一个真正的解决方案。
以下是来宾 xml 配置的摘录:
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source dev='/dev/sdb2'/>
<target dev='vda' bus='virtio'/>
<boot order='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</disk>
当使用映像文件代替分区时,变为:
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source file='/media/hdd/dsi/vm/ubuntu4.bin'/>
<backingStore/>
<target dev='vda' bus='virtio'/>
<boot order='2'/>
<alias name='virtio-disk0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</disk>
在尝试修复该问题时,我注意到硬盘上的第一个分区未正确对齐,因此我重新创建了具有正确对齐的分区(对于此硬盘,其对齐方式为 4096)。但这也没有多大帮助。
我也尝试为客人设置 elevator=noop,但无济于事。
当我使用 VirtualBox 在 Windows PC 上运行类似的客户系统时,我没有遇到这种性能下降的情况,所以我希望有一种方法可以在 KVM 上以相同的性能运行客户系统。
答案1
尝试
cache=directsync
或者
cache=writethrough
还
vm.swappiness=1
vm.vfs_cache_pressure=75 (play around with this)
使用 deadline 而不是 cfq/noop (我发现它在 ssds 和 raid 上的表现很差)。
忽略人们所说的关于 cache=none 或 writeback 是最好的说法。事情并不总是那么简单。