[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] Solution for problems with HyperSCSI and vbds ?

I have thought a little bit about Ian's and Keir's proposals
how to make HyperSCSI and vbds work (also in domains > 0).

> 1. NFS-mount HyperSCSI partitions via domain 0 (this will work

Although this is possible as a temporary workaround, it would take away
the advantages HyperSCSI offers (speed, very low overhead, especially
with the configuration ;-); also it would add another point of failiure or
instability by using NFS for this.
Also, if you want to start more than 15 domains on a server, the
direct mounting of /dev/sd* devices via NFS (vbds don't work yet
with HyperSCSI), would hit the frontier of the maximum of
allowed and mapped sd*X devices (e.g. only sda1 - sda15 work,
the next minor device no. is already for sdb. And my Raid10 Array
used for testing only exports one 160G /dev/sda device).
That means, in order to break this frontier one would definitely need
vbds via vds. Or perhaps a COW device files somewhen in the 
future (But of course this would also hit performance).
So I dont really favour this possibility.

> 2. NFS-mount VBDs which map onto chunks of HyperSCSI disk, via domain
>0 (this might work if you hack DOM0's xl_scsi.c a bit so that DOM0
>VBDs can map onto HyperSCSI block devices).
Much better but still there's NFS involved for no real need, 
only as a workaround.
So, I don't favour this for the same reasons as in 1.)

>>  3. Add proper support for HyperSCSI to Xen. You'd need some scheme
>> for validating transmits which use the HyperSCSI transport, and
>> demusing received frames to the appropriate domain. I don't know
>> anything about teh protocol, so I don't know how easy this would be
>> (e.g. how much state Xen would need to keep lying around).
>[Ian:]The main thing would be turning the VFR into more of an L2 switch
>than a router, with each domain having its own MAC[*]. We could then
>add a rule to grant a domain TX permission for a particular 802
>protocol number. HyperSCSI presumably has some high-level
>server-based authentication and privilege verification? If so, it
>should be pretty straightforward. 

This is much better, though more complicated too ;-)

However, I wouldn't do this based on protocols or routing HyperSCSI
ether packets or the need to use HyperSCSI kernel modules in 
domains > 0 (Perhaps too complicated and only a special solution for this

Here are my first thoughts about a solution:

I try to describe it roughly from the view of domain #1 (not DOM0):

Preconditions: /dev/xvda is a vbd which is attached to a vd which is
mapped to a HyperSCSI partition (e.g. /dev/sda5).
A simpler case would be a direct mapping from a vbd to /dev/sda5; 
without a vd in between. I will only use this case for the sake of
simplicity now...:

Some Application in domain #1 accesses /dev/xvda.
The virtual block device driver mapps this to /dev/sda and forwards
the request to Xen (perhaps it also tags this request as a request
to a "special device" before forwarding the request to Xen).
Xen realizes that there is no physical device connected to /dev/sda
(or registered with Xen ? Maybe it can then also recognize that
the request was marked as targeting a "special device").
Because of that condition, it forwards this block device request
to DOM0 now in which a "request handler" kernel module will listen for 
block device requests which may be forwarded to DOM0 from 
Xen to be handled in DOM0 (It will need to register a callback 
function with Xen in order to do so).
This callback function is now called by Xen to forward the block 
device request to the kernel module loaded in DOM0.
This "block device request handler" kernel module checks the 
data for the block device request (e.g. ioctl, read or write) and just
tries to execute the requested operation on the designated device 
(/dev/sda in our example) in DOM0 and gives back the result and/or 
data to Xen.
If there's no device driver attached to /dev/sda (like, in this example,
the HyperSCSI kernel module) the handler module will return the error
condition to Xen.
Xen in turn hands back the result code and data to the virtual block
device driver in Domain #1 which forwards it to the application who
triggered the block device access request. Done.

Sorry for this prosa above being a little bit unspecific, I currently
don't have that much time to make it shine... ;-)
I have tried to simplify some of the internals of Xen, also because
I don't understand it completly yet ;-)
If I made errors, please feel free to correct me.

This is somewhat similar to the proposal to load "normal" linux
device drivers exclusively in DOM0 to access hardware (also by
Domains > 0) via a lot of already written linux device drivers, instead
of letting Xen handle all access to hardware alone.
But in this case only for block devices.

I would like to do a _little_ restricted case study for that by using the 
HyperSCSI / vbd problem as an example.

However I would need some "small" help and hints from the 
Xen team:

What would be the cleanest way to do the communication
between a kernel module loaded in DOM0 and Xen ?

Does the Xen-API offers functions for registering 
callbacks (to kernel modules) ?

If yes, what are the names and how are they used ?
Where are these functions defined (in which source files) ?

Can these callbacks be done asynchronously somehow
(That is, Xen should be able to call the kernel module at some time
to initiate the block device request in DOM0, and then be called
back later asynchronously with the results by DOM0, because
device accesses can take some time....) ?

Are there any special caveats I have to pay attention at ?

I think all this might also be interesting for accessing other
block devices for which no Xen drivers exists.
A very similar thing could perhaps also be done for
character devices ?

Thanks in advance for any help you could offer me to get
this working... :)

I would of course also like to hear some opinions or concerns
from other members of this list or the Xen team about my
above proposed possible(?) solution ;-)



This SF.net email is sponsored by: SF.net Giveback Program.
SourceForge.net hosts over 70,000 Open Source Projects.
See the people who have HELPED US provide better services:
Click here: http://sourceforge.net/supporters.php
Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.