为什么virtio-scsi比我实验中的virtio-blk慢得多(over和ceph rbd image)?

Zha*_*ang 7 performance qemu scsi libvirt block-device

嗨我最近做了一个关于rbd到qemu目标的virtio-scsi实验(用于它的DISCARD/TRIM支持),并将吞吐量和iops与同一台机器上的rbd设置中的virtio-blk进行了比较,在客户端使用fio .连续读写的吞吐量小7倍(42.3MB/s vs 309MB/s),随机读写中的iops小10倍(546 vs 5705).

我所做的是使用OpenStack Juno设置一个虚拟机,它给了我rbd设置的virtio-blk.然后我修改了libvirt configure xml中的相关部分,由此:

<disk type='network' device='disk'>
  <driver name='qemu' type='raw' cache='writeback'/>
  <auth username='cinder'>
    <secret type='ceph' uuid='482b83f9-be95-448e-87cc-9fa602196590'/>
  </auth>
  <source protocol='rbd' name='vms/c504ea8b-18e6-491e-9470-41c60aa50b81_disk'>
    <host name='192.168.20.105' port='6789'/>
  </source>
  <target dev='vda' bus='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</disk>
Run Code Online (Sandbox Code Playgroud)

对此:

<disk type='network' device='disk'>
  <driver name='qemu' type='raw' cache='writeback' discard='unmap'/>
  <auth username='cinder'>
    <secret type='ceph' uuid='482b83f9-be95-448e-87cc-9fa602196590'/>
  </auth>
  <source protocol='rbd' name='vms/c504ea8b-18e6-491e-9470-41c60aa50b81_disk'>
    <host name='192.168.20.105' port='6789'/>
  </source>
  <target dev='vda' bus='scsi'/>
  <controller type='scsi' model='virtio-scsi' index='0'/>
</disk>
Run Code Online (Sandbox Code Playgroud)

软件版本是:

qemu 2.5.1

libvirt 1.2.2

内核 3.18.0-031800-generic#201412071935 SMP Mon Dec 8 00:36:34 UTC 2014 x86_64(Ubuntu 14.04内核)

管理程序是KVM.

我不认为virtio-scsi和virtio-blk之间的性能差异可能很大.所以请指出我做错了什么,以及如何实现合理的表现.

一个限制是我想要一个适用于OpenStack的解决方案(适用于Juno的理想选择),无需修补或编码.例如,我听说过virtio-scsi + vhost-scsi + scsi-mq,但是现在OpenStack似乎没有.

小智 -2

您在修改后的configure.xml中启用了discard unmap:

<驱动程序名称='qemu'类型='raw'cache='writeback'discard ='unmap' />

这会动态地擦洗块。

  • 不,事实并非如此。它当然不会执行任何取消映射,直到您在来宾中调用“fstrim”,或者如果您使用“discard”选项挂载“rm”。 (5认同)
  • 这回答了问题,因为……? (2认同)