libvirt:为什么将 LUN 直接附加到 KVM 来宾时 IOPS 如此之少

libvirt: why so many few IOPS when direct attaching LUN to a KVM guest

我在多路径存储池中有一个 KVM 和一些 LUN (Compellent SAN)。 所有文件系统都是 xfs.

> # virsh vol-list --pool multipath 
dm-3     /dev/mapper/maildata-store-2-repl
dm-4     /dev/mapper/maildata-store-1-back
dm-5     /dev/mapper/metadata-store-2-repl
dm-6     /dev/mapper/metadata-store-1-back
dm-7     /dev/mapper/images

一个 LUN 专用于存储 VM (/var/lib/libvirt/images),其他 LUN 将直接安装在 VM 中,用于将来存储邮件和相关元数据。

# df /dev/mapper/images1
Sys. de fichiers    blocs de 1K  Utilisé Disponible Uti% Monté sur
/dev/mapper/images1   209611780 18752452  190859328   9% /var/lib/libvirt/images

fio 用于比较随机写入的 IOP:

fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=/tmp/10g.file --bs=4k --iodepth=64 --size=4G --readwrite=randwrite

所以我在 VM (/dev/mapper/images) 的 tmp 文件夹中写入时得到了 fio 测试的结果,非常好!

write: IOPS=66.1k, BW=258MiB/s

现在,我使用此 xml 文件将 LUN 附加到此 VM:

<disk type='block' device='lun'>
  <driver name='qemu' type='raw'/>
  <source dev='/dev/mapper/maildata-store-1-back'/>
  <target dev='sda' bus='scsi'/>
  <address type='drive' controller='0' bus='0' target='0' unit='0'/>

还有这个命令:

virsh attach-device VM_TEST --file lun.xml --persistent

然后,在 VM_TEST:

#fdisk /dev/sda #mkfs.xfs /dev/sda1 #mount /dev/sda1 /test

并在新创建的分区上重新运行 fio 测试:

fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=/test/10g.file --bs=4k --iodepth=64 --size=4G --readwrite=randwrite

结果更糟:

write: IOPS=17.6k, BW=68.7MiB/s

我在 xml 文件中尝试过不同的选项,比如 cache=none、bus=virtio、..,但我没有设法真正增加措施。

现在我卡住了。 我真的不知道去哪里找。

谢谢。

因此,通过此调整,我设法在主机和来宾上获得相同的 IOP:

<driver name='qemu' type='raw' cache='directsync' io='native'/>

我也尝试将块设备挂载为磁盘或 lun:

<disk type='block' device='lun'>
  <target dev='sda' bus='scsi'/>

<disk type='block' device='disk'>
  <target dev='sda' bus='virtio'/>

结果完全一样。