[openstack-dev] vhost-scsi support in Nova
Nicholas A. Bellinger
nab at linux-iscsi.org
Fri Jul 25 08:19:10 UTC 2014
On Thu, 2014-07-24 at 11:06 +0100, Daniel P. Berrange wrote:
> On Wed, Jul 23, 2014 at 10:32:44PM -0700, Nicholas A. Bellinger wrote:
> > *) vhost-scsi doesn't support migration
> >
> > Since it's initial merge in QEMU v1.5, vhost-scsi has a migration blocker
> > set. This is primarily due to requiring some external orchestration in
> > order to setup the necessary vhost-scsi endpoints on the migration
> > destination to match what's running on the migration source.
> >
> > Here are a couple of points that Stefan detailed some time ago about what's
> > involved for properly supporting live migration with vhost-scsi:
> >
> > (1) vhost-scsi needs to tell QEMU when it dirties memory pages, either by
> > DMAing to guest memory buffers or by modifying the virtio vring (which also
> > lives in guest memory). This should be straightforward since the
> > infrastructure is already present in vhost (it's called the "log") and used
> > by drivers/vhost/net.c.
> >
> > (2) The harder part is seamless target handover to the destination host.
> > vhost-scsi needs to serialize any SCSI target state from the source machine
> > and load it on the destination machine. We could be in the middle of
> > emulating a SCSI command.
> >
> > An obvious solution is to only support active-passive or active-active HA
> > setups where tcm already knows how to fail over. This typically requires
> > shared storage and maybe some communication for the clustering mechanism.
> > There are more sophisticated approaches, so this straightforward one is just
> > an example.
> >
> > That said, we do intended to support live migration for vhost-scsi using
> > iSCSI/iSER/FC shared storage.
> >
> > *) vhost-scsi doesn't support qcow2
> >
> > Given all other cinder drivers do not use QEMU qcow2 to access storage
> > blocks, with the exception of the Netapp and Gluster driver, this argument
> > is not particularly relevant here.
> >
> > However, this doesn't mean that vhost-scsi (and target-core itself) cannot
> > support qcow2 images. There is currently an effort to add a userspace
> > backend driver for the upstream target (tcm_core_user [3]), that will allow
> > for supporting various disk formats in userspace.
> >
> > The important part for vhost-scsi is that regardless of what type of target
> > backend driver is put behind the fabric LUNs (raw block devices using
> > IBLOCK, qcow2 images using target_core_user, etc) the changes required in
> > Nova and libvirt to support vhost-scsi remain the same. They do not change
> > based on the backend driver.
> >
> > *) vhost-scsi is not intended for production
> >
> > vhost-scsi has been included the upstream kernel since the v3.6 release, and
> > included in QEMU since v1.5. vhost-scsi runs unmodified out of the box on a
> > number of popular distributions including Fedora, Ubuntu, and OpenSuse. It
> > also works as a QEMU boot device with Seabios, and even with the Windows
> > virtio-scsi mini-port driver.
> >
> > There is at least one vendor who has already posted libvirt patches to
> > support vhost-scsi, so vhost-scsi is already being pushed beyond a debugging
> > and development tool.
> >
> > For instance, here are a few specific use cases where vhost-scsi is
> > currently the only option for virtio-scsi guests:
> >
> > - Low (sub 100 usec) latencies for AIO reads/writes with small iodepth
> > workloads
> > - 1M+ small block IOPs workloads at low CPU utilization with large
> > iopdeth workloads.
> > - End-to-end data integrity using T10 protection information (DIF)
>
> IIUC, there is also missing support for block jobs like drive-mirror
> which is needed by Nova.
>
This limitation can be considered an acceptable trade-off in initial
support by some users, given the already considerable performance +
efficiency gains that vhost logic provides to KVM/virtio guests.
Others would like to utilize virtio-scsi to access features like SPC-3
Persistent Reservations, ALUA Explicit/Implicit Multipath, and
EXTENDED_COPY offload provided by the LIO target subsystem.
Note these three SCSI features are enabled (by default) on all LIO
target fabric LUNs, starting with v3.12 kernel code.
> From a functionality POV migration & drive-mirror support are the two
> core roadblocks to including vhost-scsi in Nova (as well as libvirt
> support for it of course). Realistically it doesn't sound like these
> are likely to be solved soon enough to give us confidence in taking
> this for the Juno release cycle.
>
The spec is for initial support of vhost-scsi controller endpoints
during Juno, and as mentioned earlier by Vish, should be considered a
experimental feature given caveats you've highlighted above.
We also understand that code will ultimately have to pass Nova + libvirt
upstream review in order to be merged, and that the approval of any
vhost-scsi spec now is not a guarantee the feature will actually make it
into any official Juno release.
Thanks,
--nab
More information about the OpenStack-dev
mailing list