我有一个 DOM0,里面有两个 3TB 硬盘,配置为软件 RAID1,还配有 16GB 内存。DOM0 的 Linux 发行版是 CentOS 6.3,虚拟机管理程序是 libvirt 管理的 KVM。
我遇到了 DOM0 和 DOMU 之间的性能下降,DOMU 写入吞吐量约为 DOM0 的 40%。我使用以下简单的 dd 命令测试了性能:
dd bs=1M count=1024 oflag=direct if=/dev/zero of=testb conv=fdatasync
我为 DOM0 配置了 DEADLINE 提升器,为 DOMU 配置了 NOOP 提升器,而 DOMU 又是 Debian Unstable:
Linux vm1 2.6.32-5-amd64 #1 SMP Sun Sep 23 10:07:46 UTC 2012 x86_64 GNU/Linux
root@vm1:/home/paris# cat /etc/debian_version
6.0.6
至于 libvirt 中的 DOMU 配置,下面是其中一个虚拟驱动器的 XML 片段,它们实际上是普通的原始错误分配文件:
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source file='/mnt/vmstore2/disks/vm1/boot.img'/>
<target dev='vda' bus='virtio'/>
<alias name='virtio-disk0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</disk>
我还注意到,在 libvirt 生成的命令行中,-drive 命令行开关的“if”参数设置为“none”而不是“virtio”:
-drive file=/mnt/vmstore2/disks/vm1/root.img,if=none,id=drive-virtio-disk2,format=raw,cache=none,aio=native
-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=drive-virtio-disk2,id=virtio-disk2
我不知道这种性能下降是否正常,但我读到 VIRTIO 应该能够保证 DOM0 和 DOMU 之间几乎相同的吞吐量。
感谢您的任何帮助。
答案1
即使使用 virtio,将映像文件用于客户磁盘也会产生一定数量的相关开销。这可能会因映像文件所在的同一物理设备上的其他 I/O 活动而有很大差异。
如果您使用 virtio 驱动程序将物理磁盘作为块设备传递给 KVM 客户机,您将看到更接近本机吞吐量。分区或 LVM 卷也是如此,具有与上述相同的 I/O 注意事项(尽管它们通常仍比磁盘映像文件表现更好)。
我们确实将图像文件用作某些 KVM 客户机的磁盘,但只要有可能,我们就会将图像保存在与主机不同的物理驱动器或阵列上。