首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么virtio在我的实验中比virtio慢得多?

为什么virtio在我的实验中比virtio慢得多?
EN

Stack Overflow用户
提问于 2016-08-19 05:05:24
回答 1查看 14.6K关注 0票数 12

嗨,我最近通过qemu目标在rbd上做了一个virtio的实验(因为它对丢弃/TRIM的支持),并比较了吞吐量和iops与在同一台机器上使用fio在同一台机器上的virtio设置的吞吐量和iops。顺序读写的吞吐率为42.3MB/s和309 10 /s,随机读写的iops为546对5705的10倍。

我所做的是使用OpenStack Juno设置一个虚拟机,这给了我在rbd设置上的virtio。然后,我修改了libvirt配置xml中的相关部分,如下所示:

代码语言:javascript
复制
<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>

对此:

代码语言:javascript
复制
<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中似乎还没有。

EN

回答 1

Stack Overflow用户

发布于 2017-08-03 14:50:09

简单的答案是,VirtIO比VirtIO稍微复杂一些。借用这里的简单描述

VirtIO块有以下层:

代码语言:javascript
复制
guest: app -> Block Layer -> virtio-blk
host: QEMU -> Block Layer -> Block Device Driver -> Hardware

然而,VirtIO SCSI的外观如下:

代码语言:javascript
复制
guest: app -> Block Layer -> SCSI Layer -> scsi_mod
host: QEMU -> Block Layer -> SCSI Layer -> Block Device Driver -> Hardware

本质上,与VirtIO块相比,VirtIO SCSI必须经过另一个转换层。

对于大多数情况下使用本地设备,结果将是较慢的。有几种奇怪的具体情况,有时情况正好相反,即:

  • 主机SCSI LUN直接通过VirtIO SCSI适配器。这稍微快了一点,因为它绕过了主机端的块层。
  • QEMU本机访问iSCSI设备。这有时会更快,因为它完全避免了主机块和SCSI层,并且不需要从VirtIO块命令转换为SCSI命令。

不过,作为记录,使用VirtIO SCSI在VirtIO块上有三个与性能不相关的好处:

  1. 它支持更多的设备。VirtIO块每个块设备公开一个PCI设备,这限制在21-24个设备上,而VirtIO SCSI只使用一个PCI设备,并且能够在该设备上处理绝对天文数字的LUN。
  2. VirtIO SCSI支持SCSI命令(在术语中为TRIM,在Linux内核术语中为丢弃)。这一点很重要,如果你是在稀薄的储备存储。
  3. VirtIO SCSI将设备公开为常规的SCSI节点,而VirtIO块则使用特殊的设备主节点。这通常不是很重要,但在从物理系统转换时会很有帮助。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39031456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档