From 2f394b7e7ebf991c7a70f93bf251d26d8043aaa2 Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Thu, 22 Oct 2009 01:30:12 -0700 Subject: * Allow SmartThreadPool to be initialized without setting max stack size (like the original implementation) * Only initialize Util's SmartThreadPool if it is actually being used * No longer initializing Util's SmartThreadPool with a custom max stack size. From MSDN: "Avoid using this constructor overload. The default stack size used by the Thread(ThreadStart) constructor overload is the recommended stack size for threads." --- bin/OpenSim.ini.example | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'bin/OpenSim.ini.example') diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index 79d57d2..08f87d6 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -38,8 +38,15 @@ ; Sets the method that OpenSim will use to fire asynchronous ; events. Valid values are UnsafeQueueUserWorkItem, - ; QueueUserWorkItem, BeginInvoke, SmartThreadPool, and Thread - ; async_call_method = SmartThreadPool + ; QueueUserWorkItem, BeginInvoke, SmartThreadPool, and Thread. + ; SmartThreadPool is reported to work well on Mono/Linux, but + ; UnsafeQueueUserWorkItem has been benchmarked with better + ; performance on .NET/Windows + ;async_call_method = SmartThreadPool + + ; Max threads to allocate on the FireAndForget thread pool + ; when running with the SmartThreadPool option above + MaxPoolThreads = 15 ; ## ; ## CLIENTS @@ -51,9 +58,6 @@ ; Set this to the DLL containing the client stack to use. clientstack_plugin="OpenSim.Region.ClientStack.LindenUDP.dll" - ; Max threads to allocate on the FireAndForget pool - MaxPoolThreads = 15 - ; ## ; ## REGIONS ; ## -- cgit v1.1 From 4121a02936b306895840cf1574197b0f6621c19e Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Thu, 22 Oct 2009 10:15:28 -0700 Subject: OpenSim.ini.example had the wrong names for default values in the [InterestManagement] section. Fixed --- bin/OpenSim.ini.example | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'bin/OpenSim.ini.example') diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index 08f87d6..6ff70fc 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -1396,12 +1396,13 @@ ;TextureDataLimit = 5 [InterestManagement] - ; This section controls how state updates are prioritized for each client - UpdatePrioritizationScheme = Distance - ReprioritizeUpdate = true - RootUpdateReprioritizationDistance = 10.0 - ChildUpdateReprioritizationDistance = 20.0 - ReprioritizeUpdatesInterval = 5000.0 + ; This section controls how state updates are prioritized for each client + ; Valid values are Time, Distance, and SimpleAngularDistance + UpdatePrioritizationScheme = Distance; + ReprioritizationEnabled = true; + ReprioritizationInterval = 2000.0; + RootReprioritizationDistance = 10.0; + ChildReprioritizationDistance = 20.0; ;; ;; These are defaults that are overwritten below in [Architecture]. -- cgit v1.1 From 62f1a5e36d85b95e8f80bc073ba876873494963a Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Fri, 23 Oct 2009 02:38:59 -0700 Subject: Implemented a "FrontBack" prioritizer, using distance plus the plane equation to give double weight to prims/avatars in front of you --- bin/OpenSim.ini.example | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'bin/OpenSim.ini.example') diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index 6ff70fc..3dc746e 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -1397,8 +1397,8 @@ [InterestManagement] ; This section controls how state updates are prioritized for each client - ; Valid values are Time, Distance, and SimpleAngularDistance - UpdatePrioritizationScheme = Distance; + ; Valid values are Time, Distance, SimpleAngularDistance, and FrontBack + UpdatePrioritizationScheme = FrontBack; ReprioritizationEnabled = true; ReprioritizationInterval = 2000.0; RootReprioritizationDistance = 10.0; -- cgit v1.1 From 4c45b5fd3c6b636552b819c6a56c1a3c23683bfb Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Fri, 23 Oct 2009 10:35:47 -0700 Subject: Cleaning up OpenSim.ini.example for LLUDP. The [LLClient] section has been removed and several new parameters have been added to [ClientStack.LindenUDP] --- bin/OpenSim.ini.example | 62 ++++++++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 32 deletions(-) (limited to 'bin/OpenSim.ini.example') diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index 3dc746e..f426556 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -355,8 +355,9 @@ ; already separated from packet handling with a queue, so this will only ; affect whether networking internals such as packet decoding and ; acknowledgement accounting are done synchronously or asynchronously - async_packet_handling = false - + ; + ;async_packet_handling = false + ; The client socket receive buffer size determines how many ; incoming requests we can process; the default on .NET is 8192 ; which is about 2 4k-sized UDP datagrams. On mono this is @@ -371,22 +372,26 @@ ; by the system's settings for the maximum client receive buffer ; size (on linux systems you can set that with "sysctl -w ; net.core.rmem_max=X") + ; ;client_socket_rcvbuf_size = 8388608 ; Maximum outbound bytes per second for a single scene. This can be used to ; throttle total outbound UDP traffic for a simulator. The default value is ; 0, meaning no throttling at the scene level. The example given here is ; 20 megabits + ; ;scene_throttle_max_bps = 2621440 ; Maximum bits per second to send to any single client. This will override ; the user's viewer preference settings. The default value is 0, meaning no ; aggregate throttling on clients (only per-category throttling). The ; example given here is 1.5 megabits + ; ;client_throttle_max_bps = 196608 ; Per-client bytes per second rates for the various throttle categories. ; These are default values that will be overriden by clients + ; ;resend_default = 12500 ;land_default = 500 ;wind_default = 500 @@ -399,6 +404,7 @@ ; Per-client maximum burst rates in bytes per second for the various ; throttle categories. These are default values that will be overriden by ; clients + ; ;resend_limit = 18750 ;land_limit = 29750 ;wind_limit = 18750 @@ -407,6 +413,28 @@ ;texture_limit = 55750 ;asset_limit = 27500 ;state_limit = 37000 + + ; Configures how ObjectUpdates are aggregated. These numbers + ; do not literally mean how many updates will be put in each + ; packet that goes over the wire, as packets are + ; automatically split on a 1400 byte boundary. These control + ; the balance between responsiveness of interest list updates + ; and total throughput. Higher numbers will ensure more full- + ; sized packets and faster sending of data, but more delay in + ; updating interest lists + ; + ;PrimTerseUpdatesPerPacket = 25 + ;AvatarTerseUpdatesPerPacket = 10 + ;PrimFullUpdatesPerPacket = 100 + + ; TextureSendLimit determines how many packets will be put on + ; the outgoing queue each cycle. Like the settings above, this + ; is a balance between responsiveness to priority updates and + ; total throughput. Higher numbers will give a better + ; throughput at the cost of reduced responsiveness to client + ; priority changes or transfer aborts + ; + ;TextureSendLimit = 20 [Chat] ; Controls whether the chat module is enabled. Default is true. @@ -1365,36 +1393,6 @@ ;RecycleDataBlocks = true; -[LLClient] - ; Resend packets markes as reliable until they are received - ; - ;ReliableIsImportant = false - - ; Maximum number of times to resend packets marked reliable - ; - ;MaxReliableResends = 3 - - ; Configures how ObjectUpdates are compressed. - ; - ;TerseUpdatesPerPacket=10 - ;FullUpdatesPerPacket=14 - ;TerseUpdateRate=10 - ;FullUpdateRate=14 - - ;PacketMTU = 1400 - - ; TextureSendLimit determines how many different textures - ; will be considered on each cycle. Textures are selected - ; by priority. The old mechanism specified a value of 10 for - ; this parameter. - ; - ;TextureSendLimit = 10 - - ; TextureDataLimit determines how many packets will be sent for - ; each of the selected textures. Default is 5. - ; - ;TextureDataLimit = 5 - [InterestManagement] ; This section controls how state updates are prioritized for each client ; Valid values are Time, Distance, SimpleAngularDistance, and FrontBack -- cgit v1.1 From a41cd1d0695c01e4096fa0b7696b415a4c7455fc Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Fri, 23 Oct 2009 13:14:29 -0700 Subject: * Unregister Mono.Addins event handlers in PluginLoader.Dispose() and always handle PluginLoader with the using pattern. This freed up 121,634,796 bytes on my system * Avoid allocating an Action object every round of the OutgoingPacketHandler * Removed unnecessary semi-colon endings from OpenSim.ini.example [InterestManagement] section --- bin/OpenSim.ini.example | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'bin/OpenSim.ini.example') diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index f426556..9ee9829 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -1396,11 +1396,11 @@ [InterestManagement] ; This section controls how state updates are prioritized for each client ; Valid values are Time, Distance, SimpleAngularDistance, and FrontBack - UpdatePrioritizationScheme = FrontBack; - ReprioritizationEnabled = true; - ReprioritizationInterval = 2000.0; - RootReprioritizationDistance = 10.0; - ChildReprioritizationDistance = 20.0; + UpdatePrioritizationScheme = FrontBack + ReprioritizationEnabled = true + ReprioritizationInterval = 2000.0 + RootReprioritizationDistance = 10.0 + ChildReprioritizationDistance = 20.0 ;; ;; These are defaults that are overwritten below in [Architecture]. -- cgit v1.1 From 4847e62e9fd1cd473cc180220a379efba93f94a6 Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Mon, 26 Oct 2009 16:33:04 -0700 Subject: * Switched all operations on the list of clients that could be either sync or async to use Scene.ForEachClient() instead of referencing ClientManager directly * Added a new [Startup] config option called use_async_when_possible to signal how to run operations that could be either sync or async * Changed Scene.ForEachClient to respect use_async_when_possible * Fixing a potential deadlock in Parallel.ForEach by locking on a temporary object instead of the enumerator (which may be shared across multiple invocations on ForEach). Thank you diva --- bin/OpenSim.ini.example | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'bin/OpenSim.ini.example') diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index 9ee9829..2adc87f 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -44,6 +44,13 @@ ; performance on .NET/Windows ;async_call_method = SmartThreadPool + ; There are several operations on large collections (such as + ; the current avatar list) that can be run synchronously or + ; in parallel. Running in parallel should increase performance + ; on a multi-core system, but will make debugging more + ; difficult if something deadlocks or times out + use_async_when_possible = true + ; Max threads to allocate on the FireAndForget thread pool ; when running with the SmartThreadPool option above MaxPoolThreads = 15 -- cgit v1.1 From 3a1ee79ee4239213b35f6b73a65c127c2af977fb Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Tue, 27 Oct 2009 02:36:57 -0700 Subject: Finally hunted down the Parallel deadlock. Packets were being handled asynchronously (filling up the threadpool with handlers), which would turn around and try to do parallel operations on the starved threadpool. The solution for now is to disable Parallel.cs operations until we can gracefully handle parallel operations with a potentially starved threadpool --- bin/OpenSim.ini.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bin/OpenSim.ini.example') diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index 2adc87f..4f1799e 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -49,7 +49,7 @@ ; in parallel. Running in parallel should increase performance ; on a multi-core system, but will make debugging more ; difficult if something deadlocks or times out - use_async_when_possible = true + use_async_when_possible = false ; Max threads to allocate on the FireAndForget thread pool ; when running with the SmartThreadPool option above -- cgit v1.1