diff options
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | 17 | ||||
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs | 24 | ||||
-rw-r--r-- | bin/OpenSim.ini.example | 62 |
3 files changed, 58 insertions, 45 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index e81ff4b..6f0b177 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -346,15 +346,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
346 | protected int m_terrainCheckerCount; | 346 | protected int m_terrainCheckerCount; |
347 | protected uint m_agentFOVCounter; | 347 | protected uint m_agentFOVCounter; |
348 | 348 | ||
349 | // These numbers are guesses at a decent tradeoff between responsiveness | ||
350 | // of the interest list and throughput. Lower is more responsive, higher | ||
351 | // is better throughput | ||
352 | protected int m_primTerseUpdatesPerPacket = 25; | ||
353 | protected int m_primFullUpdatesPerPacket = 100; | ||
354 | protected int m_avatarTerseUpdatesPerPacket = 10; | ||
355 | /// <summary>Number of texture packets to put on the queue each time the | ||
356 | /// OnQueueEmpty event is triggered for the texture category</summary> | ||
357 | protected int m_textureSendLimit = 20; | ||
358 | protected IAssetService m_assetService; | 349 | protected IAssetService m_assetService; |
359 | private IHyperAssetService m_hyperAssets; | 350 | private IHyperAssetService m_hyperAssets; |
360 | 351 | ||
@@ -3333,7 +3324,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3333 | 3324 | ||
3334 | lock (m_avatarTerseUpdates.SyncRoot) | 3325 | lock (m_avatarTerseUpdates.SyncRoot) |
3335 | { | 3326 | { |
3336 | int count = Math.Min(m_avatarTerseUpdates.Count, m_avatarTerseUpdatesPerPacket); | 3327 | int count = Math.Min(m_avatarTerseUpdates.Count, m_udpServer.AvatarTerseUpdatesPerPacket); |
3337 | if (count == 0) | 3328 | if (count == 0) |
3338 | return; | 3329 | return; |
3339 | 3330 | ||
@@ -3418,7 +3409,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3418 | 3409 | ||
3419 | lock (m_primFullUpdates.SyncRoot) | 3410 | lock (m_primFullUpdates.SyncRoot) |
3420 | { | 3411 | { |
3421 | int count = Math.Min(m_primFullUpdates.Count, m_primFullUpdatesPerPacket); | 3412 | int count = Math.Min(m_primFullUpdates.Count, m_udpServer.PrimFullUpdatesPerPacket); |
3422 | if (count == 0) | 3413 | if (count == 0) |
3423 | return; | 3414 | return; |
3424 | 3415 | ||
@@ -3462,7 +3453,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3462 | 3453 | ||
3463 | lock (m_primTerseUpdates.SyncRoot) | 3454 | lock (m_primTerseUpdates.SyncRoot) |
3464 | { | 3455 | { |
3465 | int count = Math.Min(m_primTerseUpdates.Count, m_primTerseUpdatesPerPacket); | 3456 | int count = Math.Min(m_primTerseUpdates.Count, m_udpServer.PrimTerseUpdatesPerPacket); |
3466 | if (count == 0) | 3457 | if (count == 0) |
3467 | return; | 3458 | return; |
3468 | 3459 | ||
@@ -3585,7 +3576,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3585 | void ProcessTextureRequests() | 3576 | void ProcessTextureRequests() |
3586 | { | 3577 | { |
3587 | if (m_imageManager != null) | 3578 | if (m_imageManager != null) |
3588 | m_imageManager.ProcessImageQueue(m_textureSendLimit); | 3579 | m_imageManager.ProcessImageQueue(m_udpServer.TextureSendLimit); |
3589 | } | 3580 | } |
3590 | 3581 | ||
3591 | public void SendAssetUploadCompleteMessage(sbyte AssetType, bool Success, UUID AssetFullID) | 3582 | public void SendAssetUploadCompleteMessage(sbyte AssetType, bool Success, UUID AssetFullID) |
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs index e9faf2e..232c9c9 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs | |||
@@ -98,6 +98,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
98 | 98 | ||
99 | /// <summary>The measured resolution of Environment.TickCount</summary> | 99 | /// <summary>The measured resolution of Environment.TickCount</summary> |
100 | public readonly float TickCountResolution; | 100 | public readonly float TickCountResolution; |
101 | /// <summary>Number of terse prim updates to put on the queue each time the | ||
102 | /// OnQueueEmpty event is triggered for updates</summary> | ||
103 | public readonly int PrimTerseUpdatesPerPacket; | ||
104 | /// <summary>Number of terse avatar updates to put on the queue each time the | ||
105 | /// OnQueueEmpty event is triggered for updates</summary> | ||
106 | public readonly int AvatarTerseUpdatesPerPacket; | ||
107 | /// <summary>Number of full prim updates to put on the queue each time the | ||
108 | /// OnQueueEmpty event is triggered for updates</summary> | ||
109 | public readonly int PrimFullUpdatesPerPacket; | ||
110 | /// <summary>Number of texture packets to put on the queue each time the | ||
111 | /// OnQueueEmpty event is triggered for textures</summary> | ||
112 | public readonly int TextureSendLimit; | ||
101 | 113 | ||
102 | /// <summary>Handlers for incoming packets</summary> | 114 | /// <summary>Handlers for incoming packets</summary> |
103 | //PacketEventDictionary packetEvents = new PacketEventDictionary(); | 115 | //PacketEventDictionary packetEvents = new PacketEventDictionary(); |
@@ -172,6 +184,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
172 | m_asyncPacketHandling = config.GetBoolean("async_packet_handling", false); | 184 | m_asyncPacketHandling = config.GetBoolean("async_packet_handling", false); |
173 | m_recvBufferSize = config.GetInt("client_socket_rcvbuf_size", 0); | 185 | m_recvBufferSize = config.GetInt("client_socket_rcvbuf_size", 0); |
174 | sceneThrottleBps = config.GetInt("scene_throttle_max_bps", 0); | 186 | sceneThrottleBps = config.GetInt("scene_throttle_max_bps", 0); |
187 | |||
188 | PrimTerseUpdatesPerPacket = config.GetInt("PrimTerseUpdatesPerPacket", 25); | ||
189 | AvatarTerseUpdatesPerPacket = config.GetInt("AvatarTerseUpdatesPerPacket", 10); | ||
190 | PrimFullUpdatesPerPacket = config.GetInt("PrimFullUpdatesPerPacket", 100); | ||
191 | TextureSendLimit = config.GetInt("TextureSendLimit", 20); | ||
192 | } | ||
193 | else | ||
194 | { | ||
195 | PrimTerseUpdatesPerPacket = 25; | ||
196 | AvatarTerseUpdatesPerPacket = 10; | ||
197 | PrimFullUpdatesPerPacket = 100; | ||
198 | TextureSendLimit = 20; | ||
175 | } | 199 | } |
176 | 200 | ||
177 | m_throttle = new TokenBucket(null, sceneThrottleBps, sceneThrottleBps); | 201 | m_throttle = new TokenBucket(null, sceneThrottleBps, sceneThrottleBps); |
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 @@ | |||
355 | ; already separated from packet handling with a queue, so this will only | 355 | ; already separated from packet handling with a queue, so this will only |
356 | ; affect whether networking internals such as packet decoding and | 356 | ; affect whether networking internals such as packet decoding and |
357 | ; acknowledgement accounting are done synchronously or asynchronously | 357 | ; acknowledgement accounting are done synchronously or asynchronously |
358 | async_packet_handling = false | 358 | ; |
359 | 359 | ;async_packet_handling = false | |
360 | |||
360 | ; The client socket receive buffer size determines how many | 361 | ; The client socket receive buffer size determines how many |
361 | ; incoming requests we can process; the default on .NET is 8192 | 362 | ; incoming requests we can process; the default on .NET is 8192 |
362 | ; which is about 2 4k-sized UDP datagrams. On mono this is | 363 | ; which is about 2 4k-sized UDP datagrams. On mono this is |
@@ -371,22 +372,26 @@ | |||
371 | ; by the system's settings for the maximum client receive buffer | 372 | ; by the system's settings for the maximum client receive buffer |
372 | ; size (on linux systems you can set that with "sysctl -w | 373 | ; size (on linux systems you can set that with "sysctl -w |
373 | ; net.core.rmem_max=X") | 374 | ; net.core.rmem_max=X") |
375 | ; | ||
374 | ;client_socket_rcvbuf_size = 8388608 | 376 | ;client_socket_rcvbuf_size = 8388608 |
375 | 377 | ||
376 | ; Maximum outbound bytes per second for a single scene. This can be used to | 378 | ; Maximum outbound bytes per second for a single scene. This can be used to |
377 | ; throttle total outbound UDP traffic for a simulator. The default value is | 379 | ; throttle total outbound UDP traffic for a simulator. The default value is |
378 | ; 0, meaning no throttling at the scene level. The example given here is | 380 | ; 0, meaning no throttling at the scene level. The example given here is |
379 | ; 20 megabits | 381 | ; 20 megabits |
382 | ; | ||
380 | ;scene_throttle_max_bps = 2621440 | 383 | ;scene_throttle_max_bps = 2621440 |
381 | 384 | ||
382 | ; Maximum bits per second to send to any single client. This will override | 385 | ; Maximum bits per second to send to any single client. This will override |
383 | ; the user's viewer preference settings. The default value is 0, meaning no | 386 | ; the user's viewer preference settings. The default value is 0, meaning no |
384 | ; aggregate throttling on clients (only per-category throttling). The | 387 | ; aggregate throttling on clients (only per-category throttling). The |
385 | ; example given here is 1.5 megabits | 388 | ; example given here is 1.5 megabits |
389 | ; | ||
386 | ;client_throttle_max_bps = 196608 | 390 | ;client_throttle_max_bps = 196608 |
387 | 391 | ||
388 | ; Per-client bytes per second rates for the various throttle categories. | 392 | ; Per-client bytes per second rates for the various throttle categories. |
389 | ; These are default values that will be overriden by clients | 393 | ; These are default values that will be overriden by clients |
394 | ; | ||
390 | ;resend_default = 12500 | 395 | ;resend_default = 12500 |
391 | ;land_default = 500 | 396 | ;land_default = 500 |
392 | ;wind_default = 500 | 397 | ;wind_default = 500 |
@@ -399,6 +404,7 @@ | |||
399 | ; Per-client maximum burst rates in bytes per second for the various | 404 | ; Per-client maximum burst rates in bytes per second for the various |
400 | ; throttle categories. These are default values that will be overriden by | 405 | ; throttle categories. These are default values that will be overriden by |
401 | ; clients | 406 | ; clients |
407 | ; | ||
402 | ;resend_limit = 18750 | 408 | ;resend_limit = 18750 |
403 | ;land_limit = 29750 | 409 | ;land_limit = 29750 |
404 | ;wind_limit = 18750 | 410 | ;wind_limit = 18750 |
@@ -407,6 +413,28 @@ | |||
407 | ;texture_limit = 55750 | 413 | ;texture_limit = 55750 |
408 | ;asset_limit = 27500 | 414 | ;asset_limit = 27500 |
409 | ;state_limit = 37000 | 415 | ;state_limit = 37000 |
416 | |||
417 | ; Configures how ObjectUpdates are aggregated. These numbers | ||
418 | ; do not literally mean how many updates will be put in each | ||
419 | ; packet that goes over the wire, as packets are | ||
420 | ; automatically split on a 1400 byte boundary. These control | ||
421 | ; the balance between responsiveness of interest list updates | ||
422 | ; and total throughput. Higher numbers will ensure more full- | ||
423 | ; sized packets and faster sending of data, but more delay in | ||
424 | ; updating interest lists | ||
425 | ; | ||
426 | ;PrimTerseUpdatesPerPacket = 25 | ||
427 | ;AvatarTerseUpdatesPerPacket = 10 | ||
428 | ;PrimFullUpdatesPerPacket = 100 | ||
429 | |||
430 | ; TextureSendLimit determines how many packets will be put on | ||
431 | ; the outgoing queue each cycle. Like the settings above, this | ||
432 | ; is a balance between responsiveness to priority updates and | ||
433 | ; total throughput. Higher numbers will give a better | ||
434 | ; throughput at the cost of reduced responsiveness to client | ||
435 | ; priority changes or transfer aborts | ||
436 | ; | ||
437 | ;TextureSendLimit = 20 | ||
410 | 438 | ||
411 | [Chat] | 439 | [Chat] |
412 | ; Controls whether the chat module is enabled. Default is true. | 440 | ; Controls whether the chat module is enabled. Default is true. |
@@ -1365,36 +1393,6 @@ | |||
1365 | ;RecycleDataBlocks = true; | 1393 | ;RecycleDataBlocks = true; |
1366 | 1394 | ||
1367 | 1395 | ||
1368 | [LLClient] | ||
1369 | ; Resend packets markes as reliable until they are received | ||
1370 | ; | ||
1371 | ;ReliableIsImportant = false | ||
1372 | |||
1373 | ; Maximum number of times to resend packets marked reliable | ||
1374 | ; | ||
1375 | ;MaxReliableResends = 3 | ||
1376 | |||
1377 | ; Configures how ObjectUpdates are compressed. | ||
1378 | ; | ||
1379 | ;TerseUpdatesPerPacket=10 | ||
1380 | ;FullUpdatesPerPacket=14 | ||
1381 | ;TerseUpdateRate=10 | ||
1382 | ;FullUpdateRate=14 | ||
1383 | |||
1384 | ;PacketMTU = 1400 | ||
1385 | |||
1386 | ; TextureSendLimit determines how many different textures | ||
1387 | ; will be considered on each cycle. Textures are selected | ||
1388 | ; by priority. The old mechanism specified a value of 10 for | ||
1389 | ; this parameter. | ||
1390 | ; | ||
1391 | ;TextureSendLimit = 10 | ||
1392 | |||
1393 | ; TextureDataLimit determines how many packets will be sent for | ||
1394 | ; each of the selected textures. Default is 5. | ||
1395 | ; | ||
1396 | ;TextureDataLimit = 5 | ||
1397 | |||
1398 | [InterestManagement] | 1396 | [InterestManagement] |
1399 | ; This section controls how state updates are prioritized for each client | 1397 | ; This section controls how state updates are prioritized for each client |
1400 | ; Valid values are Time, Distance, SimpleAngularDistance, and FrontBack | 1398 | ; Valid values are Time, Distance, SimpleAngularDistance, and FrontBack |