嗨,我最近通过 qemu 目标做了一个 virtio-scsi over rbd 的实验(为了它的 DISCARD/TRIM 支持),并将吞吐量和 iops 与同一台机器上的 rbd 设置的 virtio-blk 的吞吐量和 iops 进行比较,在客户机中使用 fio . 结果顺序读写的吞吐量小 7 倍(42.3MB/s vs 309MB/s),随机读写的 iops 小 10 倍(546 vs 5705)。
我所做的是使用 OpenStack Juno 设置虚拟机,它为我提供了 virtio-blk over rbd 设置。然后我修改了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>
对此:
<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>
软件版本为:
qem 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 中似乎不可用。