From: Vladislav Bolkhovitin <vst@vlnb.net>
To: Hannes Reinecke <hare@suse.de>
Cc: lsf10-pc@lists.linuxfoundation.org,
SCSI Mailing List <linux-scsi@vger.kernel.org>
Subject: Re: [LSF/VM TOPIC] Handling of invalid requests in virtual HBAs
Date: Sat, 10 Apr 2010 19:31:17 +0400 [thread overview]
Message-ID: <4BC099C5.9090704@vlnb.net> (raw)
In-Reply-To: <4BB45632.5020700@suse.de>
Hello Hannes,
Hannes Reinecke, on 04/01/2010 12:15 PM wrote:
> Hi all,
>
> [Topic]
> Handling of invalid requests in virtual HBAs
>
> [Abstract]
> This discussion will focus on the problem of correct request handling with virtual HBAs.
> For KVM I have implemented a 'megasas' HBA emulation which serves as a backend for the
> megaraid_sas linux driver.
> It is now possible to connect several disks from different (physical) HBAs to that
> HBA emulation, each having different logical capabilities wrt transfersize,
> sgl size, sgl length etc.
>
> The goal of this discussion is how to determine the 'best' capability setting for the
> virtual HBA and how to handle hotplug scenarios, where a disk might be plugged in
> which has incompatible settings from the one the virtual HBA is using currently.
If I understand correctly, you need to allow several KVM guests to share
the same physical disks?
If so, then it's a bit more complicated, than just to match capabilities
between physical and virtual disks, because to safely share disks some
advanced SCSI functionality should be emulated by the mid-level, like
reservations and Unit Attentions. Otherwise, the sharing is very much
against SCSI specs, so unsafe and can lead to data corruptions. More
info you can find here: http://thread.gmane.org/gmane.linux.scsi/31288.
In my opinion, the simplest way would be:
1. Use in the host OS a SCSI target mid-layer, capable to support
multi-initiators SCSI pass-through, like SCST (http://scst.sourceforge.net)
2. Write a simple 2 parts guest/host driver, one part of which would be
a simple virtual HBA driver for guests, which would pass all requests
from the guest OS to the host OS, and the second part would be a simple
target driver for SCST, which would get requests from the virtual HBA in
the guest and pass them to SCST on the host OS. Most likely, you already
implemented most of the guest part of the driver in your 'megasas' HBA
emulator. On the host side, for SCST most of the functionality already
implemented by scst_local driver. All is necessary is to couple them
together using some KVM transport for data between guests and host.
Thus, in this approach you need to connect the guest OS'es to already
existing SCST (we hope someday SCST will be accepted in the mainline
kernel, I'm currently preparing patches for the second review
iteration), which you need to do anyway to implement correct devices
sharing. Then SCST would do the rest.
This approach won't make any tight connection between physical and
virtual HBAs, so can work with any SCSI-speaking HBAs (and not only-SCSI
speaking, if a small layer to convert their requests in SCSI commands is
implemented). The exact SCSI transport (SAS, SCSI, FC, etc.) the guest
driver would report to the OS wouldn't matter much, because changing it
is a matter of changing few constants. The hot plug would be handled
automatically.
As a bonus, KVM guests would be able to use SCST emulated virtual
devices (files as devices, virtual CDROMs, VTLs, etc.), including
implemented in user space.
Obviously, this approach can be implemented with a minimal overhead
(SCST internally is zero-copy).
Vlad
next prev parent reply other threads:[~2010-04-10 15:31 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-01 8:15 [LSF/VM TOPIC] Handling of invalid requests in virtual HBAs Hannes Reinecke
2010-04-02 5:33 ` Nicholas A. Bellinger
2010-04-08 13:44 ` Hannes Reinecke
2010-04-10 23:50 ` Nicholas A. Bellinger
2010-04-10 15:31 ` Vladislav Bolkhovitin [this message]
2010-04-13 8:56 ` Hannes Reinecke
2010-04-13 17:09 ` Vladislav Bolkhovitin
2010-04-13 18:37 ` Nicholas A. Bellinger
2010-04-13 19:23 ` Vladislav Bolkhovitin
2010-04-13 20:45 ` Nicholas A. Bellinger
2010-04-14 12:59 ` Vladislav Bolkhovitin
2010-04-14 13:49 ` Nicholas A. Bellinger
2010-05-10 3:16 ` FUJITA Tomonori
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4BC099C5.9090704@vlnb.net \
--to=vst@vlnb.net \
--cc=hare@suse.de \
--cc=linux-scsi@vger.kernel.org \
--cc=lsf10-pc@lists.linuxfoundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox