[Opensim-dev] Threads, threads, threads and more threads
diva at metaverseink.com
diva at metaverseink.com
Fri Jul 31 03:28:37 UTC 2009
I agree that our use of threads per user has been brute force so far,
and any effort to reduce it is a good thing. I don't see any issues in
trying what you suggest.
This reminds me of something I observed in the design of parts of the
code. In many places we have these worker threads that stay on a loop
processing stuff. A recently eliminated one was the old "AssetCache" --
that's gone, and its elimination made things much faster. But there are
many more all over, especially those that process things for the client.
I wonder if we can get rid of all those threads and move to a fully
asynchronous event processing model, leaving the low-level thread
management to .NET/mono. I'm not sure we can in all cases, just wanted
to raise the issue.
Teravus Ovares wrote:
> Hey there
>
> I was just thinking.. does the child agent of an avatar actually
> /need/ a full thread? I ask this because we're running up against
> the default thread limits of mono in situations where an instance is
> servicing your root agent and 8 additional child regions. The
> LongPoll fix took the number of threads down by almost half, but,
> we've still got a lot more work to do to make it reasonable. Would
> anyone object to having child agent worker threads that process more
> then one client on the LLUDP side? This would reduce thread usage
> by at least 1/3rd over top of the savings that we already have from
> the long poll fix. I also note that textures are always served from
> the region the avatar is a root agent in.. including textures in
> neighbor regions that the avatar sees into.
>
> A Scenario:
>
> An instance serves a 9 gridspace set of regions. The avatar logs into
> the middle one and creates 1 root agent and 8 child agents on the
> instance.
> --------
> Before the LongPoll fix:
>
> Each avatar created 9 threads for LLUDP processing, 9 threads stuck in
> eventqueue processing, and several timer/threadpool threads. This
> added up 'really' fast.
> For example.. at 14 users, there were 252 threads(14 root, 112
> child, and 126 in eventqueue) in use processing the udp stack and the
> eventqueue of the users.
>
> -----------
> After the LongPoll fix:
>
> Each avatar creates 9 threads for LLUDP processing. There are a total
> of 4 threads dedicated to eventqueue processing total.
> For example.. at 14 users, there are 130 threads(14 root, 112 child,
> 4 in eventqueue) in use processing the udp stack and the eventqueue of
> the users.
>
> ------------
> If we set up worker threads for child agents:
>
> Each avatar creates 1 thread for LLUDP processing, There are a total
> of 4 threads dedicated to eventqueue processing. And, there are (for
> this example, we'll say 2 threads per region to process child agents),
> 18 threads to process child agents.
> For example.. at 14 users, that's 36 threads in use processing the
> udp stack and the eventqueue of the users.
> ----------
>
> Can anyone think of issues with doing this? I would /really/ love
> to reduce the thread usage down to 'reasonable' levels here. 36
> threads is WAY less then 252 threads!
>
> 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