Привет, я недавно провел эксперимент virtio-scsi через rbd через qemu target (для его поддержки DISCARD / TRIM) и сравнил пропускную способность и iops с настройкой virtio-blk через rbd на той же машине, используя fio в гостевой системе . Оказалось, что пропускная способность при последовательном чтении и записи в 7 раз меньше (42,3 МБ / с против 309 МБ / с), а скорость операций ввода-вывода в секунду при случайном чтении и записи в 10 раз меньше (546 против 5705).
Что я сделал, так это настроил виртуальную машину с помощью OpenStack Juno, который дал мне настройку virtio-blk поверх 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>
Версии программного обеспечения:
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.