Linux 客户机中的 KVM IO 同步性能不佳

Linux 客户机中的 KVM IO 同步性能不佳

我正在使用 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 是最好的说法。事情并不总是那么简单。

相关内容