[haiku-appserver] Re: Shared Memory Allocation
- From: "Axel Dörfler" <axeld@xxxxxxxxxxxxxxxx>
- To: haiku-appserver@xxxxxxxxxxxxx
- Date: Sun, 05 Sep 2004 13:22:01 +0200 CEST
"DarkWyrm" <bpmagic@xxxxxxxxxxxxxxx> wrote:
> > You can create the area in the client, send its area_id to the
> > server, clone it there, and delete the area in the client, if you
> > don't
> > need to access it anymore from there.
> > Does that fit to what you need?
> That was already part of the plan. The problem is how to manage
> allocating and deleting memory from this shared space. We already
> have
> a working pool allocator to handle the actual management, but what
> would be the best route to go to allow both sides to do this. Perhaps
> I
> can illustrate better with an example. Let's say that we have someone
> who is incredibly stupid or incredibly evil (or both) who wants to
> approximate a particular strange BShape using a BPolygon object and
> does so by storing literally each and every point in the thing and,
> as
> a result, the thing occupies 2MB of space. Ouch. Then he tries to
> draw
> it using StrokePolygon. Somehow that data needs to get to the server.
> The only problem is that AFAIK there isn't a way for that much data
> to
> fit through a port. Ideally, I'd like to have some way to put the
> whole
> AS_STROKE_POLYGON message into an area, and then tell the server
> where
> it is. Then, the server only has to look in the area to read the
> whole
> thing in -- or perhaps make the call directly from the data in the
> area
> to avoid another copy -- and then delete the whole mess so that the
> memory is freed. How could something like this be coordinated? Is
> there
> a better way that I haven't yet thought of?
That's exactly the scenario for what I suggested - it's exceptional
anyway, and therefore probably ways faster than if there were any copy
involved.
Dano switches to creating area on the fly for BMessages over 64kB
(IIRC) - I haven't made any tests yet (especially not with our kernel),
but that seems to be the amount where this is actually faster than a
standard port copy (at least on Dano).
The only problem is probably, that you don't know before that the
BShape will need that much space, and resize_area() is not exactly the
most reliable call to compensate that. You could allocate areas in
chunks (maybe 128 kB) and give the list of those to the app_server - in
any way, that would need some real world tests.
Bye,
Axel.
- References:
- [haiku-appserver] Re: Shared Memory Allocation
- From: DarkWyrm
Other related posts:
- » [haiku-appserver] Shared Memory Allocation
- » [haiku-appserver] Re: Shared Memory Allocation
- » [haiku-appserver] Re: Shared Memory Allocation
- » [haiku-appserver] Re: Shared Memory Allocation
- » [haiku-appserver] Re: Shared Memory Allocation
- » [haiku-appserver] Re: Shared Memory Allocation
- » [haiku-appserver] Re: Shared Memory Allocation
- » [haiku-appserver] Re: Shared Memory Allocation
- » [haiku-appserver] Re: Shared Memory Allocation
- [haiku-appserver] Re: Shared Memory Allocation
- From: DarkWyrm