All of lore.kernel.org
 help / color / mirror / Atom feed
From: Harry Butterworth <harry@hebutterworth.freeserve.co.uk>
To: andrew.warfield@cl.cam.ac.uk
Cc: Eric Van Hensbergen <ericvh@gmail.com>,
	Mike Wray <mike.wray@hp.com>,
	xen-devel@lists.xensource.com,
	"Ronald G. Minnich" <rminnich@lanl.gov>,
	Eric Van Hensbergen <ericvh@users.sourceforge.net>
Subject: Re: Re: Interdomain comms
Date: Tue, 10 May 2005 15:51:59 +0100	[thread overview]
Message-ID: <1115736719.11547.132.camel@localhost> (raw)
In-Reply-To: <eacc82a405051003094d84c011@mail.gmail.com>

On Tue, 2005-05-10 at 11:09 +0100, Andrew Warfield wrote:
> Just considering the disk and net interfaces, the
> current device channels each make particular decisions regarding (a)
> what to copy and what to map, (b) when to send notification to get
> efficient batching through the scheduler, and most recently (c) which
> grant mechanism to use to pass pages securely across domains.

(a) looks like a property of the local_buffer_reference type. You might
be able to think of a really good way of doing (b) automatically
independent of any specific client and (c) is either like (a) or it's a
strategy passed when registering a buffer to get a remote buffer
reference.  I'm guessing here though---Is there a list of all the
considerations that went into the design of the current behaviour? That
would help in mapping it to any new proposal.

> The
> buffer_reference struct that Harry mentioned looks quite interesting
> as a start though in terms of describing a variety of underlying
> transports.  Do you have a paper reference on that work, Harry?

I can't give you a suitable reference, but there's not much more to the
concepts than what I've already written up on this list and I can chip
in with anything I've forgotten.

Here are a few more random details:

Buffer providers can register to get a local_buffer_reference type for
the buffers they will provide. As a minimum, they also have to register
methods to copy data between a buffer of that type and the stack. This
allows a core generic mechanism to implement any copy operation.

Buffer providers can register specialised methods to copy directly
between two specific local buffer types. These methods override the
generic mechanism.

As well as a copy operation which leaves the buffers identical, you
might want a more efficient move operation which leaves the source
undefined (or perhaps all zeroes or unmapped or something).

Some local_buffer_reference types might have wider APIs. For example, an
application might want to mess with and be frugal with individual pages
in which case it might know that it allocates all its buffers from a
buffer provider that provides buffers of a specific type.  Knowing the
type, it can down-cast the local buffer references it owns to get access
to the wider API to do more detailed work.

Reads can often complete when the data is received without waiting for
separate status.  I worked this optimisation into my implementation by
getting notification from a registered buffer when it had been filled.

My disconnects were cluster-wide and were coupled to the lifetime of
remote_buffer_references in the cluster.  I didn't think this was
appropriate for Xen so my sketchy API had per-connection disconnects and
didn't mention any coupling with the remote_buffer_reference lifetime.
This is relevant when it comes to defining what kind of transport errors
might happen and requires further thought.

> for the moment though, I think it would be interesting to
> see how well the existing local host cases can be generalized.  ;)

Yep, sounds like a good way to start :-)

>  
> > And with the domain control channel there's an implicit assumption
> > that 'there can be only one'. This means for example, that domain A
> > using a device with backend in domain B can't connect directly to domain B,
> > but has to be 'introduced' by xend. It'd be better if it could connect
> > directly.
> 
> This is not a flaw with the current implementation -- it's completely
> intentional.  By forcing control through xend we ensure that there is
> a single point for control logic, and for managing state.  Why do you
> feel it would be better to provide arbitrary point-to-point comms in a
> VMM environment that is specifically trying to provide isolation
> between guests?

There are two different issues here:

1) Having one Xend might be correct at the moment. The _assumption in
the guests_ that there is only one Xend is technically a minor flaw. If,
for example, the guest got an idc_address for Xend, the guest would be
decoupled from the design choice of one or many Xends.

2) The Xend introductions.  The weird aspect about these is that they
are a triangular protocol with phases initiated by xend in two
directions, potentially at the same time. I'm more used to control flow
following resource dependencies, for example: server tells third-party
about resource availability; third-party assigns resources to clients;
clients connect directly to server. This is also triangular but if you
put the server at the top and bottom it becomes a stack ordered by
dependencies.  I think stacks are much less confusing than triangles and
have more easily defined interlocks and less risk of introducing timing
windows.  I think it ought to be possible to get the security right for
a stack solution as well as the triangle solution. Maybe a secuity
expert could provide some help.

  parent reply	other threads:[~2005-05-10 14:51 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-05-05 15:18 please help: initialize XEND for my debug-FE/BE.c Aggarwal, Vikas (OFT)
2005-05-05 20:37 ` Harry Butterworth
     [not found]   ` <427B20B9.1010101@hp.com>
2005-05-06 12:14     ` Interdomain comms Harry Butterworth
2005-05-06 13:39       ` Mark Williamson
2005-05-06 16:04       ` Ronald G. Minnich
2005-05-06 16:49         ` Eric Van Hensbergen
2005-05-06 23:13         ` Harry Butterworth
2005-05-07  0:19           ` Eric Van Hensbergen
2005-05-07 13:26             ` Harry Butterworth
2005-05-07 14:57               ` Eric Van Hensbergen
2005-05-07 16:15               ` Ronald G. Minnich
2005-05-07 17:10                 ` Keir Fraser
2005-05-07 21:22                   ` Eric Van Hensbergen
2005-05-07 17:17                 ` Harry Butterworth
2005-05-07 21:29                   ` Eric Van Hensbergen
2005-05-07 22:11                     ` Harry Butterworth
2005-05-08  0:57                       ` Eric Van Hensbergen
2005-05-08  8:19                         ` Andrew Warfield
2005-05-08 15:27                           ` Eric Van Hensbergen
2005-05-10  8:31                           ` Mike Wray
2005-05-10 10:09                             ` Andrew Warfield
2005-05-10 14:30                               ` Mike Wray
2005-05-10 14:51                               ` Harry Butterworth [this message]
     [not found]                                 ` <eacc82a405051008243195164c@mail.gmail.com>
2005-05-10 15:26                                   ` Andrew Warfield
2005-05-10 16:42                                     ` Harry Butterworth
2005-05-08  8:36                         ` Harry Butterworth
2005-05-08 16:18                           ` Eric Van Hensbergen
2005-05-08 17:48                             ` Harry Butterworth
2005-05-06 16:57       ` Nivedita Singhvi

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=1115736719.11547.132.camel@localhost \
    --to=harry@hebutterworth.freeserve.co.uk \
    --cc=andrew.warfield@cl.cam.ac.uk \
    --cc=ericvh@gmail.com \
    --cc=ericvh@users.sourceforge.net \
    --cc=mike.wray@hp.com \
    --cc=rminnich@lanl.gov \
    --cc=xen-devel@lists.xensource.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.