[I meant to send this to the list]
I'll send some info on where to look later today.
-------- Forwarded Message --------
Subject: Re: [Opensim-dev] Packet Pooling - Should it work?
Date: Thu, 15 Aug 2019 17:27:38 -0700
From: Diva Canto <d...@metaverseink.com>
To: Mike Dickson <mike.dick...@utopiaskye.com>
Hi,
You can already remove almost everything out of the simulator with the
right configurations.
I don't recommend serving the large assets, like textures and mesh, from
one single server because that one quickly becomes the bottleneck. But
there are may ways of serving replicating the data.
I ran a large grid that had a completely different arrangement than the
default: each group of regions that were related (i.e. an "estate") had
its own set of asset services. Users' assets in inventory were served by
yet a separate server. All this has been possible for a very long time.
Diva
On 8/15/2019 1:07 PM, Mike Dickson wrote:
I'm actually not so much trying to optimize network traffic (that is
another great topic and I personally think what core should focus on is
protocols rather than code). I'm concerned there is an issue with garbage
collection limiting scaling of the simulator. Basically I'm of the opinion
that really the only thing that should be running in the simulator is...
the simulation. So as much as possible pulling things out (Moving to AISv3
for inventory out of process, SSB out of process, etc would all be good
additional steps). It's true if you're just running a standalone thats
probably overkill but I'm trying to support large regions and scale. Hence
yes the whole stack is really the focus.
Mike
On Wed, Aug 14, 2019 at 10:54 PM Mister Blue <misterb...@misterblue.com>
wrote:
There have been many attempts at optimizing the network traffic from the
simulator to the clients. GP optimization confuses low level networking
(queuing, ..) with application level (object updates before wind updates).
Make sure you're thinking of the whole virtual world stack.
On Wed, Aug 14, 2019 at 4:07 PM Mike Dickson <mike.dick...@utopiaskye.com>
wrote:
So after doing some research I think my fix to this is to get as many of
the big allocations out of the region server as possible and secondarily
to
get the rest coming from a pool where I can. I think that translates to
the
follow projects:
1) Move GetMesh and GetTexture out of process and into a separate server
2) Get the rest of the UDP allocations coming from a pool.
For #1 there was code originally done for InWorldz/Halcyon to do that. I
can try and ressurect it and interface it to the asset service (ideally
through the local asset cache) but I think alternatively a redo makes
more
sense.
For #2 there is buffer pooling code in LibOMV originally in Halcyon that
I
believe Cinder got upstream via Latif a while back.
And yes I did run with -desktop mode in Mono for some time. It sort of
bandaids things a bit but when a GC pass does happen UDP stalls until the
GC completes and the protocol recovers (for reliable messages). If you
extend that to a busy region with 20, 30 or more avatars it falls apart
quickly. Especially with everyone wearing mesh. Still probably better
than
the standard GC but the real fix is to stop making garbage to collect.
Mike
Sent from Mail for Windows 10
From: Leal Duarte
Sent: Tuesday, August 13, 2019 1:43 PM
To: opensim-dev@opensimulator.org
Subject: Re: [Opensim-dev] Packet Pooling - Should it work?
PacketPool.cs code has been in usage, and still is in same packets, but
of
limited usefulness
in same cases it could even be GC induced pseudo memory leak.
It was replaced by a simpler pool of memory buffers (actually libomv
UDPPacketBuffers, but not its objectpool) on most sent packets and
receive
buffers
also used as temporary work buffers on a few other places.
Most send packets have nothing to reuse but the buffer.
Try running opensim in Workstation (desktop on mono) mode.
Server mode heuristics don't seem to match opensim needs that well.
Ubit
On 13-Aug-19 16:04, Mike Dickson wrote:
I've been investigating UDP stalls for a while now and at least in some
cases I'm fairly convinced some cases occur due to GC pauses. There is
some packet pooling code in the underlying LibOMV probably originally
derived from work done on Halcyon to address this case. I don't see
any
attempt in the UDP comms to make use of these buffer pools.
There is seperate code in PacketPool.cs to, I think reuse packet
buffers
based on a couple of buffer sizes and it looks like this should be on
by
default but I can't find any evidence by looking at status of any
packet
reuse occuring. That is it looks like there is code there but it's
either
switched off somewhere else or just doesn't work (or the stats are
wrong
:).
Should this PacketPooling be functional? Alternatively has any attempt
been made to wire in the PacketBuffer support thats already in LibOMV?
I'm going to dig through all this as I have time but I figured a
little
information might help short circuit some paths and direct my search.
Thanks!
Mike
_______________________________________________
Opensim-dev mailing list
Opensim-dev@opensimulator.org
http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-dev
_______________________________________________
Opensim-dev mailing list
Opensim-dev@opensimulator.org
http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-dev
_______________________________________________
Opensim-dev mailing list
Opensim-dev@opensimulator.org
http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-dev
_______________________________________________
Opensim-dev mailing list
Opensim-dev@opensimulator.org
http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-dev
_______________________________________________
Opensim-dev mailing list
Opensim-dev@opensimulator.org
http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-dev
_______________________________________________
Opensim-dev mailing list
Opensim-dev@opensimulator.org
http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-dev