Splitting Dataspaces

Daniel Waddington waddy16925 at ...9...
Tue Apr 30 21:34:54 CEST 2013


One last issue in doing this...  I create the sub_rm and test it in the
creating process, this works fine.  When I try to send out the
Dataspace_capability (as either ref or ptr) for the sub_rm through RPC
to another process, then I get an invalid capability on the recv side
(as determined by .valid()). 

Is there something I'm missing here?
Daniel

On Tue, 2013-04-30 at 10:13 -0700, Daniel Waddington wrote:
> Hi Norman,
> As always, thanks for your guidance and quick feedback.  For our current
> purpose the overhead of using RM session is OK since the application
> itself manages large chunks of memory.  The alias API would be really
> nice though.
> 
> Best,
> Daniel
> 
> 
> On Tue, 2013-04-30 at 18:18 +0200, Norman Feske wrote:
> > Hi Daniel,
> > 
> > > Sorry, this should be "give some part to process P2".  Anyhow, is the
> > > answer to use Rm_session and its dataspace method?
> > 
> > this would indeed work. But this solution comes at the cost of
> > maintaining one RM session per dataspace. Depending on your use case,
> > this might be quite expensive. E.g., if you want to virtualize core's
> > RAM service per by allocating a large chunk of RAM at core and then
> > handing out many small parts of this backing-store chunk as individual
> > dataspaces, you will need to keep in mind that for each RM session, an
> > RM client donates 64KiB of quota per RM session (see
> > 'base/include/rm_session/connection.h') to core.
> > 
> > I think a way to create aliases for existing RAM dataspaces would be a
> > handy feature. I am thinking in the lines of adding an interface like
> > the following:
> > 
> > Dataspace_capability Ram_session::alias(Dataspace_capability dataspace,
> >                                         bool                 writable,
> >                                         off_t                offset,
> >                                         size_t               size);
> > 
> > This function would create a new dataspace capability that refers to a
> > subrange of the specified 'dataspace'. In addition to accommodate your
> > use case, the 'writable' argument would further allow for downgrading
> > the write-permission of a RAM dataspace to read-only. So RAM dataspaces
> > can effectively turned into ROM dataspaces, which is a feature sorely
> > missing in the current API.
> > 
> > That said, there are some obstacles that hindered me to implement this
> > feature yet. First, it will never work perfectly on base-linux, where
> > each dataspace is represented by a file descriptor. As far as I know,
> > there is no way to create an FD for a part of a file. Consequently, the
> > aliased dataspace will need to refer to the original dataspace FD. So a
> > process who obtains an alias will be able to access the original one.
> > (i.e., reverting the downgrade of permissions)
> > 
> > Second, this feature will add complexity to the RAM service in core.
> > Right now, dataspaces always refer to disjoint physical RAM areas, which
> > will no longer be the case. One particular question is how to handle the
> > lifetime of dataspaces and aliased dataspaces. Are aliases destroyed
> > automatically if the original dataspace is freed? Or does each alias
> > represent a first-class RAM dataspace? The latter solution would be nice
> > interface-wise but quite complicated to implement. When freeing one of
> > them, we would need to take care to release only those parts of physical
> > RAM that are not referred to by any other alias. I have to think about
> > that more thoroughly.
> > 
> > That said, those problems can definitely be solved and a feature like
> > that is important to have.
> > 
> > In any case, the RM session mechanism you mentioned can emulate the
> > aliasing feature right now (its just expensive). So I recommend using
> > this mechanism as a stop-gap solution.
> > 
> > Cheers
> > Norman
> > 
> 
> 
> 
> ------------------------------------------------------------------------------
> Introducing AppDynamics Lite, a free troubleshooting tool for Java/.NET
> Get 100% visibility into your production application - at no cost.
> Code-level diagnostics for performance bottlenecks with <2% overhead
> Download for free and get started troubleshooting in minutes.
> http://p.sf.net/sfu/appdyn_d2d_ap1
> _______________________________________________
> Genode-main mailing list
> Genode-main at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/genode-main






More information about the users mailing list