Support variable length blobs in RPC

Norman Feske norman.feske at ...1...
Sat Apr 27 15:01:34 CEST 2013


Hi Daniel,

> What's the best way to create RPC types for variable length data
> (assuming a maximum size of that will fit in the UTCB).  I looked at
> Rpc_in_buffer, but this seems to only support strings, and using as an

'Rpc_in_buffer' actually supports arbitrary binary blobs via the
Constructor at line 78:


https://github.com/genodelabs/genode/blob/master/base/include/base/rpc_args.h

It takes a char pointer and a length as arguments. If you have a buffer
of a different type, you need to cast the buffer pointer type to a char
pointer.

> out param seems awkward.  For the moment I am using a statically sized
> structure, but I fear there is needless copying going on.  BTW, this RPC

So far, we hadn't have the use case of transferring variable-sized
buffers from the callee to the caller. So there is currently no
'Rpc_out_buffer' available. Such a facility could be added very
similarly to 'Rpc_in_buffer'. To get the picture, search for
'Rpc_in_buffer' in 'base/ipc.h'. Adding the handling for an
'Rpc_out_buffer_base' type should be pretty straight forward. Maybe
you'd like to give it a go?

> is for one-off control - of course shared memory is better for
> streaming.

I agree. There are several use cases where communicating over shared
memory buffer is inconvenient or even impossible, for example if
transferring a variable-length string along with a capability (as
capabilities cannot be transferred via shared memory).

When using variable-sized arguments, however, please keep in mind that
UTCB sizes vary from kernel to kernel. On some kernels, UTCBs are
ridiculously small. I am thinking of the ARM version of OKL4v2 (for
which we dropped the support some time back though). As a rule of thumb,
I recommend to keep RPC message sizes lower than 256 bytes. If messages
become larger than that, shared memory should be used.

Regards
Norman

-- 
Dr.-Ing. Norman Feske
Genode Labs

http://www.genode-labs.com · http://genode.org

Genode Labs GmbH · Amtsgericht Dresden · HRB 28424 · Sitz Dresden
Geschäftsführer: Dr.-Ing. Norman Feske, Christian Helmuth




More information about the users mailing list