[Opensim-dev] Synchronous or Asynchronous.. Packet handler synchronicity

Frisby, Adam adam at deepthink.com.au
Sun Dec 13 08:54:57 UTC 2009


Since we're defaulting to async - we should probably only make a list of what is known to run fast and what isn't.

Just as a quick example - all the terrain packets require some heavyish number crunching and should all be async.

Adam

> -----Original Message-----
> From: opensim-dev-bounces at lists.berlios.de [mailto:opensim-dev-
> bounces at lists.berlios.de] On Behalf Of Teravus Ovares
> Sent: Sunday, 13 December 2009 12:08 AM
> To: opensim-dev
> Subject: [Opensim-dev] Synchronous or Asynchronous.. Packet handler
> synchronicity
> 
> Hello Again
> 
> I just wanted to update the people subscribed to opensim-dev about the
> current situation with regards to packet handler synchronicity and
> thread context.
> 
> The History:
> Shortly after OpenSimulator started, it was decided that each user
> should have it's own packet processing thread.  This worked well at
> the time, but limited concurrency because of lock and thread
> contention.   5 UDP connections = 5 dedicated threads that spent most
> of their time waiting(this got expensive when child agents were
> considered).
> 
> Recently:
> A few months ago, Intel provided some test results and provided a few
> developers to re-write the UDP server and client handling stack.
> One of the things that they did was make each UDP server use two
> threads.  One for the incoming packet processing and one for the
> outgoing packet processing, regardless of how many clients were
> connected to OpenSimulator.    Essentially, this made it 'one thread
> per network connection resource'.   This was great because it reduced
> the amount of threads that opensimulator uses quite significantly.
> There were some problems though.  Some code handling the upper level
> processing (Scene, SceneObjectGroup, SceneObjectPart..  etc.. )  of
> the data in the packet took long enough to process..   to cause the
> simulator to slowly come to a crawl over time and disconnect users.
> 
> Because the infrastructure wasn't in place to selectively delegate
> which packets are handled asynchronously and synchronously, the choice
> was made to process each packet on the threadpool so that a long
> running packet processor wouldn't cause the UDP server to get
> backlogged and cause all users connected to get disconnected.   This
> solution wasn't really optimal..    because a single client, moving
> around, causes ~15 AgentUpdate packets to be sent to the server per
> second.      15 packets means that up to 15 threadpool requests were
> happening a second per connected root agent.       There are various
> reasons why this isn't optimal, I won't go into them here :).
> 
> Now:
> I'm happy to announce, that the infrastructure for selectively
> delegating whether a packet will be processed synchronously or
> asynchronously is in place as of
> 4ef8dc7d96fa2d4efd992ff7d304b8894f004c4f.   You can find the way to
> set a packet handler as synchronous in
> OpenSim.Region.ClientStack.LindenUDP.LLClientView.RegisterLocalPacketHa
> ndler.
>       Note that packet handlers with 3 parameters with the third one
> set to 'false' means that the packet handler is synchronous.    Packet
> handlers in that method with 2 parameters or 3 parameters and the
> third one set to 'true' means that the packet is processed
> asynchronously on the threadpool using the method defined by
> async_call_method in OpenSim.ini
> 
> I've also taken the liberty of setting the AgentUpdate Packet, the
> ViewerEffect Packet, and a few others as synchronous.   The
> AgentUpdate Packet and ViewerEffect Packet are the two packets that
> are sent from the client the most often, so, these alone should reduce
> the threads required per client significantly.
> 
> Testers:
> What users and testers should look for, however, is the Simulator
> suddenly disconnecting all users.    If this occurs, then, likely, the
> UDP server is not moving fast enough to effectively process packets
> for the current amount of users.
> 
> Developers:
> It's time to look at the length of time it takes for packet processors
> to finish processing and decide if the packet handler should be
> executed synchronously or asynchronously.
> Any synchronously processed packet is processed in the thread context
> beginning with the UDPServer.
> 
> Hopefully, this will allow us to increase the number of concurrently
> connected users further.
> 
> Regards
> 
> Teravus
> _______________________________________________
> Opensim-dev mailing list
> Opensim-dev at lists.berlios.de
> https://lists.berlios.de/mailman/listinfo/opensim-dev



More information about the Opensim-dev mailing list