Features/VirtioSCSI: Difference between revisions

From QEMU
No edit summary
 
(6 intermediate revisions by 2 users not shown)
Line 11: Line 11:
= Status =
= Status =


* Virtio device specification
* Virtio device specification: part of VIRTIO 1.0
** Committed
* Linux guest driver: working
** http://ozlabs.org/~rusty/virtio-spec/virtio-0.9.4.pdf
** Multi-queue / fine-grained per-queue locking
* Linux guest driver
* QEMU hardware emulation using SCSI emulation: working
** Patch on mailing list
** Added support for WRITE SAME commands
** https://lkml.org/lkml/2012/2/5/75
** Added support for hotplug events
* QEMU hardware emulation using SCSI emulation
* QEMU hardware emulation using vhost-scsi: working
** Patches on mailing list
* Libvirt support: working
** http://lists.gnu.org/archive/html/qemu-devel/2012-02/msg01642.html
* SeaBIOS support: working
* QEMU hardware emulation using vhost-scsi
* Tested use include:
** (Stalled) work-in-progress, contact Stefan
** CD-ROM/DVD burning passthrough
** QEMU: http://repo.or.cz/w/qemu/stefanha.git/shortlog/refs/heads/virtio-scsi
** Tape passthrough
** Linux: https://github.com/stefanha/linux/tree/tcm_vhost
** 100s of LUNs (scalability)
* Libvirt support
** LUN hotplug (known to work with manual hotplug)
** Patches on mailing list
** http://www.redhat.com/archives/libvir-list/2012-January/msg00537.html
* SeaBIOS support
** Patches on mailing list


= Future tasks =
= Future tasks =
Line 39: Line 35:
** Design libvirt integration for LIO
** Design libvirt integration for LIO
* QEMU SCSI target:
* QEMU SCSI target:
** Add support for WRITE SAME commands
** Add support for rerror/werror to scsi-generic
** Add support for rerror/werror to scsi-generic
* Complete virtio-scsi spec implementation:
* Complete virtio-scsi spec implementation:
** Add support for hotplug events
** Add support for asynchronous media change notifications
** Add support for asynchronous media change notifications
** Multi-queue (with fine-grained locking in the Linux driver?)
* Use cases to test:
** CD-ROM/DVD burning passthrough
** Tape passthrough
** 100s of LUNs (scalability)
* Use cases to flesh out:
* Use cases to flesh out:
** LUN hotplug (known to work with manual hotplug)
** Multipath inside guest
** Multipath inside guest
* Performance analysis
* Performance analysis
Line 62: Line 50:
* [http://www.t10.org/drafts.htm SCSI Standards] - especially SAM, SPC, SBC
* [http://www.t10.org/drafts.htm SCSI Standards] - especially SAM, SPC, SBC
* [http://www.pcisig.com/specifications/conventional PCI Local Bus 3.0] - useful for understanding virtio-pci
* [http://www.pcisig.com/specifications/conventional PCI Local Bus 3.0] - useful for understanding virtio-pci
= Repositories =
'''Note: you must use either Paolo's trees or Stefan's trees, you cannot mix QEMU from Paolo with Linux from Stefan and vice versa.'''
== Paolo's code with QEMU SCSI emulation ==
* QEMU (virtio-scsi): git://github.com/bonzini/qemu.git virtio-scsi
* Linux (virtio-scsi): git://github.com/bonzini/virtio-scsi.git
== Stefan's code with tcm_vhost ==
* QEMU (vhost-scsi): http://repo.or.cz/w/qemu/stefanha.git/shortlog/refs/heads/virtio-scsi
* tcm_vhost: https://github.com/stefanha/linux/tree/tcm_vhost
== Zhi Yong Wu's code which integrate vhost-scsi with qemu.git/master ==
* QEMU(virtio-scsi,vhost-scsi): https://github.com/wuzhy/qemu/tree/vhost-scsi
* Linux(virtio-scsi,tcm_vhost): https://github.com/wuzhy/linux


= Links =
= Links =
Line 83: Line 55:
* [[Features/VirtioSCSI/TCM Overview|In-kernel SCSI target overview]]
* [[Features/VirtioSCSI/TCM Overview|In-kernel SCSI target overview]]
* KVM Forum 2011 presentation [http://www.linux-kvm.org/wiki/images/f/f5/2011-forum-virtio-scsi.pdf Virtio SCSI: An alternative virtualized storage stack for KVM]
* KVM Forum 2011 presentation [http://www.linux-kvm.org/wiki/images/f/f5/2011-forum-virtio-scsi.pdf Virtio SCSI: An alternative virtualized storage stack for KVM]
* [Red Hat whitepaper on virtio-scsi http://wiki.qemu.org/File:Virtio-scsi.pdf]
[[Category:Completed feature pages]]

Latest revision as of 15:39, 11 October 2016

Overview

A virtio storage interface for efficient I/O that overcomes virtio-blk limitations and supports advanced SCSI hardware.

Features

  • /dev/sda inside guest
  • Multiple LUNs per PCI adapter, solves virtio-blk 1:1 scalability problem
  • SCSI passthrough (tape, CD burning, ...)

Status

  • Virtio device specification: part of VIRTIO 1.0
  • Linux guest driver: working
    • Multi-queue / fine-grained per-queue locking
  • QEMU hardware emulation using SCSI emulation: working
    • Added support for WRITE SAME commands
    • Added support for hotplug events
  • QEMU hardware emulation using vhost-scsi: working
  • Libvirt support: working
  • SeaBIOS support: working
  • Tested use include:
    • CD-ROM/DVD burning passthrough
    • Tape passthrough
    • 100s of LUNs (scalability)
    • LUN hotplug (known to work with manual hotplug)

Future tasks

  • Pick up vhost-scsi work again:
    • Port QEMU hw/virtio-scsi.c vhost-scsi support onto latest code
    • add QEMU Object Model (QOM) support to the vhost-scsi device
    • Port LIO vhost-scsi code onto latest lio.git code
    • Update vhost-scsi to implement latest virtio-scsi device specification
    • Ensure vhost-scsi I/O still works
    • Design libvirt integration for LIO
  • QEMU SCSI target:
    • Add support for rerror/werror to scsi-generic
  • Complete virtio-scsi spec implementation:
    • Add support for asynchronous media change notifications
  • Use cases to flesh out:
    • Multipath inside guest
  • Performance analysis
    • Compare against virtio-blk I/O (rough numbers: 6% slower on iozone with a tmpfs-backed disk)
    • Compare passthrough performance against bare metal host SCSI
    • Measure scalability and where the bottlenecks are (full virtqueues? locks?)

Specifications

Links