Share exist memory over IPC with L4Re

Alexander Fratzer alexander.fratzer at gmail.com
Mon May 15 15:17:57 CEST 2017


Dear L4-Hackers,
I have a very simple problem but I can't find the solution in the 
L4Re-Doc and examples so far. I wrote a very simple Unix-Like Shell with
a Filesystem-Server and a Loader-Server and I implemented some 
Posix-Call as an abstraction for the communication with the
Filesystem-Server (virtual). Now I have a problem of double copies for a
read-Operation. I want a complete abstraction from the L4Re mechanisms 
and the underlying Client-Server architecture for the usage of this 
interface. The (bad) mechanism is as follow:

Function (client side):
	ssize_t read(int fd, void *buf, size_t count)

Algorithm:
	1. Allocate Dataspace with size of count.
	2. Send Cap of Dataspace to the Filesystem-Server.
	3. Copy content of Dataspace to buf.
	4. Cleanups.

Function (server side):
	long VFSSrv::op_file_read(VFS::Rights, TaskRegistry::TaskId task, 
TaskRegistry::FileDescriptor fd, size_t size, L4::Ipc::Snd_fpage& flexp, 
size_t& rsize)

Algorithm:
	1. Get Dataspace-Cap from Ipc-fpage.
	2. Reserve area with Region-Manager.
	3. Attach Dataspace to the area.
	4. Copy content of the file to the attached area.
	5. Cleanups.

This was my first working solution without focus on runtime but
the creation of a new task from an ELF-File of 1.4 MB size takes
20 seconds on Cortex A8. This suxx so I have to optimize.
Therefor I need a way to share the content of my file (virtual, heap 
allocated memory) without copying to the client but i don't find a way 
to share exist memory over IPC. I think I'm using the 
Dataspace-mechanism in a wrong way but maybe a Dataspace isn't the right 
choice in my case. A simple solution would be a new Filesystem which is 
based on Dataspaces but I don't want to do this. Have anybody a better idea?

Thanks for help.
Best regards Alex.




More information about the l4-hackers mailing list