嗨,我最近通过qemu目标在rbd上做了一个virtio的实验(因为它对丢弃/TRIM的支持),并比较了吞吐量和iops与在同一台机器上使用fio在同一台机器上的virtio设置的吞吐量和iops。顺序读写的吞吐率为42.3MB/s和309 10 /s,随机读写的iops为546对5705的10倍。
我所做的是使用OpenStack Juno设置一个虚拟机,这给了我在rbd设置上的virtio。然后,我修改了libvirt配置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-泛型#201412071935 SMP Mon 12月8日:36:34 UTC 2014 x86_64 (Ubuntu14.04内核)
系统管理程序是KVM。
我不认为在virtio和virtio之间的性能差别可能那么大。因此,请指出我做错了什么,以及如何实现一个合理的表现。
一个限制因素是,我想要一个适用于OpenStack的解决方案(理想的如果适用于Juno),而不需要很多补丁或代码。例如,我听说了virtio+ vhost-scsi + scsi-mq,但现在OpenStack中似乎还没有。
发布于 2017-08-03 14:50:09
简单的答案是,VirtIO比VirtIO稍微复杂一些。借用这里的简单描述
VirtIO块有以下层:
guest: app -> Block Layer -> virtio-blk
host: QEMU -> Block Layer -> Block Device Driver -> Hardware然而,VirtIO SCSI的外观如下:
guest: app -> Block Layer -> SCSI Layer -> scsi_mod
host: QEMU -> Block Layer -> SCSI Layer -> Block Device Driver -> Hardware本质上,与VirtIO块相比,VirtIO SCSI必须经过另一个转换层。
对于大多数情况下使用本地设备,结果将是较慢的。有几种奇怪的具体情况,有时情况正好相反,即:
不过,作为记录,使用VirtIO SCSI在VirtIO块上有三个与性能不相关的好处:
https://stackoverflow.com/questions/39031456
复制相似问题