diff options
author | Mic Bowman | 2011-04-25 10:44:41 -0700 |
---|---|---|
committer | Mic Bowman | 2011-04-25 10:44:41 -0700 |
commit | 024c12abc3aa42432e55e322141cad1edeb5bad1 (patch) | |
tree | 3666d30003824cd34bb002375b2d5b31bcb7addd | |
parent | Merge branch 'master' into queuetest (diff) | |
download | opensim-SC_OLD-024c12abc3aa42432e55e322141cad1edeb5bad1.zip opensim-SC_OLD-024c12abc3aa42432e55e322141cad1edeb5bad1.tar.gz opensim-SC_OLD-024c12abc3aa42432e55e322141cad1edeb5bad1.tar.bz2 opensim-SC_OLD-024c12abc3aa42432e55e322141cad1edeb5bad1.tar.xz |
Cleaned up various configuration options. Removed the category throttle
limits because the only ones used now are the defaults (which are overwritten
by the client throttles anyway). Updated the default rates to correspond to
about 350kbps.
Also added a configuration to disable adaptive throttle. The default
is the previous behavior (no adaptation).
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs | 13 | ||||
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/ThrottleRates.cs | 80 | ||||
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/TokenBucket.cs | 19 | ||||
-rw-r--r-- | OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs | 18 | ||||
-rw-r--r-- | bin/OpenSimDefaults.ini | 40 |
5 files changed, 60 insertions, 110 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs index 103ec66..494cb0c 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs | |||
@@ -181,9 +181,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
181 | m_maxRTO = maxRTO; | 181 | m_maxRTO = maxRTO; |
182 | 182 | ||
183 | // Create a token bucket throttle for this client that has the scene token bucket as a parent | 183 | // Create a token bucket throttle for this client that has the scene token bucket as a parent |
184 | m_throttleClient = new AdaptiveTokenBucket(parentThrottle, rates.TotalLimit); | 184 | m_throttleClient = new AdaptiveTokenBucket(parentThrottle, rates.Total, rates.AdaptiveThrottlesEnabled); |
185 | // Create a token bucket throttle for the total categary with the client bucket as a throttle | 185 | // Create a token bucket throttle for the total categary with the client bucket as a throttle |
186 | m_throttleCategory = new TokenBucket(m_throttleClient, rates.TotalLimit); | 186 | m_throttleCategory = new TokenBucket(m_throttleClient, rates.Total); |
187 | // Create an array of token buckets for this clients different throttle categories | 187 | // Create an array of token buckets for this clients different throttle categories |
188 | m_throttleCategories = new TokenBucket[THROTTLE_CATEGORY_COUNT]; | 188 | m_throttleCategories = new TokenBucket[THROTTLE_CATEGORY_COUNT]; |
189 | 189 | ||
@@ -194,7 +194,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
194 | // Initialize the packet outboxes, where packets sit while they are waiting for tokens | 194 | // Initialize the packet outboxes, where packets sit while they are waiting for tokens |
195 | m_packetOutboxes[i] = new OpenSim.Framework.LocklessQueue<OutgoingPacket>(); | 195 | m_packetOutboxes[i] = new OpenSim.Framework.LocklessQueue<OutgoingPacket>(); |
196 | // Initialize the token buckets that control the throttling for each category | 196 | // Initialize the token buckets that control the throttling for each category |
197 | m_throttleCategories[i] = new TokenBucket(m_throttleCategory, rates.GetLimit(type)); | 197 | m_throttleCategories[i] = new TokenBucket(m_throttleCategory, rates.GetRate(type)); |
198 | } | 198 | } |
199 | 199 | ||
200 | // Default the retransmission timeout to three seconds | 200 | // Default the retransmission timeout to three seconds |
@@ -341,12 +341,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
341 | task = Math.Max(task, LLUDPServer.MTU); | 341 | task = Math.Max(task, LLUDPServer.MTU); |
342 | texture = Math.Max(texture, LLUDPServer.MTU); | 342 | texture = Math.Max(texture, LLUDPServer.MTU); |
343 | asset = Math.Max(asset, LLUDPServer.MTU); | 343 | asset = Math.Max(asset, LLUDPServer.MTU); |
344 | state = Math.Max(state, LLUDPServer.MTU); | ||
345 | 344 | ||
346 | int total = resend + land + wind + cloud + task + texture + asset + state; | 345 | int total = resend + land + wind + cloud + task + texture + asset; |
347 | 346 | ||
348 | //m_log.DebugFormat("[LLUDPCLIENT]: {0} is setting throttles. Resend={1}, Land={2}, Wind={3}, Cloud={4}, Task={5}, Texture={6}, Asset={7}, State={8}, Total={9}", | 347 | //m_log.DebugFormat("[LLUDPCLIENT]: {0} is setting throttles. Resend={1}, Land={2}, Wind={3}, Cloud={4}, Task={5}, Texture={6}, Asset={7}, Total={8}", |
349 | // AgentID, resend, land, wind, cloud, task, texture, asset, state, total); | 348 | // AgentID, resend, land, wind, cloud, task, texture, asset, total); |
350 | 349 | ||
351 | // Update the token buckets with new throttle values | 350 | // Update the token buckets with new throttle values |
352 | TokenBucket bucket; | 351 | TokenBucket bucket; |
diff --git a/OpenSim/Region/ClientStack/LindenUDP/ThrottleRates.cs b/OpenSim/Region/ClientStack/LindenUDP/ThrottleRates.cs index aaf6e26..c9aac0b 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/ThrottleRates.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/ThrottleRates.cs | |||
@@ -52,30 +52,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
52 | public int Texture; | 52 | public int Texture; |
53 | /// <summary>Drip rate for asset packets</summary> | 53 | /// <summary>Drip rate for asset packets</summary> |
54 | public int Asset; | 54 | public int Asset; |
55 | /// <summary>Drip rate for state packets</summary> | 55 | |
56 | public int State; | ||
57 | /// <summary>Drip rate for the parent token bucket</summary> | 56 | /// <summary>Drip rate for the parent token bucket</summary> |
58 | public int Total; | 57 | public int Total; |
59 | 58 | ||
60 | /// <summary>Maximum burst rate for resent packets</summary> | 59 | /// <summary>Flag used to enable adaptive throttles</summary> |
61 | public int ResendLimit; | 60 | public bool AdaptiveThrottlesEnabled; |
62 | /// <summary>Maximum burst rate for land packets</summary> | 61 | |
63 | public int LandLimit; | ||
64 | /// <summary>Maximum burst rate for wind packets</summary> | ||
65 | public int WindLimit; | ||
66 | /// <summary>Maximum burst rate for cloud packets</summary> | ||
67 | public int CloudLimit; | ||
68 | /// <summary>Maximum burst rate for task (state and transaction) packets</summary> | ||
69 | public int TaskLimit; | ||
70 | /// <summary>Maximum burst rate for texture packets</summary> | ||
71 | public int TextureLimit; | ||
72 | /// <summary>Maximum burst rate for asset packets</summary> | ||
73 | public int AssetLimit; | ||
74 | /// <summary>Maximum burst rate for state packets</summary> | ||
75 | public int StateLimit; | ||
76 | /// <summary>Burst rate for the parent token bucket</summary> | ||
77 | public int TotalLimit; | ||
78 | |||
79 | /// <summary> | 62 | /// <summary> |
80 | /// Default constructor | 63 | /// Default constructor |
81 | /// </summary> | 64 | /// </summary> |
@@ -86,26 +69,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
86 | { | 69 | { |
87 | IConfig throttleConfig = config.Configs["ClientStack.LindenUDP"]; | 70 | IConfig throttleConfig = config.Configs["ClientStack.LindenUDP"]; |
88 | 71 | ||
89 | Resend = throttleConfig.GetInt("resend_default", 12500); | 72 | Resend = throttleConfig.GetInt("resend_default", 6625); |
90 | Land = throttleConfig.GetInt("land_default", 1000); | 73 | Land = throttleConfig.GetInt("land_default", 9125); |
91 | Wind = throttleConfig.GetInt("wind_default", 1000); | 74 | Wind = throttleConfig.GetInt("wind_default", 1750); |
92 | Cloud = throttleConfig.GetInt("cloud_default", 1000); | 75 | Cloud = throttleConfig.GetInt("cloud_default", 1750); |
93 | Task = throttleConfig.GetInt("task_default", 1000); | 76 | Task = throttleConfig.GetInt("task_default", 18500); |
94 | Texture = throttleConfig.GetInt("texture_default", 1000); | 77 | Texture = throttleConfig.GetInt("texture_default", 18500); |
95 | Asset = throttleConfig.GetInt("asset_default", 1000); | 78 | Asset = throttleConfig.GetInt("asset_default", 10500); |
96 | State = throttleConfig.GetInt("state_default", 1000); | ||
97 | |||
98 | ResendLimit = throttleConfig.GetInt("resend_limit", 18750); | ||
99 | LandLimit = throttleConfig.GetInt("land_limit", 29750); | ||
100 | WindLimit = throttleConfig.GetInt("wind_limit", 18750); | ||
101 | CloudLimit = throttleConfig.GetInt("cloud_limit", 18750); | ||
102 | TaskLimit = throttleConfig.GetInt("task_limit", 18750); | ||
103 | TextureLimit = throttleConfig.GetInt("texture_limit", 55750); | ||
104 | AssetLimit = throttleConfig.GetInt("asset_limit", 27500); | ||
105 | StateLimit = throttleConfig.GetInt("state_limit", 37000); | ||
106 | 79 | ||
107 | Total = throttleConfig.GetInt("client_throttle_max_bps", 0); | 80 | Total = throttleConfig.GetInt("client_throttle_max_bps", 0); |
108 | TotalLimit = Total; | 81 | |
82 | AdaptiveThrottlesEnabled = throttleConfig.GetBoolean("enable_adaptive_throttles", false); | ||
109 | } | 83 | } |
110 | catch (Exception) { } | 84 | catch (Exception) { } |
111 | } | 85 | } |
@@ -128,34 +102,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
128 | return Texture; | 102 | return Texture; |
129 | case ThrottleOutPacketType.Asset: | 103 | case ThrottleOutPacketType.Asset: |
130 | return Asset; | 104 | return Asset; |
131 | case ThrottleOutPacketType.State: | ||
132 | return State; | ||
133 | case ThrottleOutPacketType.Unknown: | ||
134 | default: | ||
135 | return 0; | ||
136 | } | ||
137 | } | ||
138 | |||
139 | public int GetLimit(ThrottleOutPacketType type) | ||
140 | { | ||
141 | switch (type) | ||
142 | { | ||
143 | case ThrottleOutPacketType.Resend: | ||
144 | return ResendLimit; | ||
145 | case ThrottleOutPacketType.Land: | ||
146 | return LandLimit; | ||
147 | case ThrottleOutPacketType.Wind: | ||
148 | return WindLimit; | ||
149 | case ThrottleOutPacketType.Cloud: | ||
150 | return CloudLimit; | ||
151 | case ThrottleOutPacketType.Task: | ||
152 | return TaskLimit; | ||
153 | case ThrottleOutPacketType.Texture: | ||
154 | return TextureLimit; | ||
155 | case ThrottleOutPacketType.Asset: | ||
156 | return AssetLimit; | ||
157 | case ThrottleOutPacketType.State: | ||
158 | return StateLimit; | ||
159 | case ThrottleOutPacketType.Unknown: | 105 | case ThrottleOutPacketType.Unknown: |
160 | default: | 106 | default: |
161 | return 0; | 107 | return 0; |
diff --git a/OpenSim/Region/ClientStack/LindenUDP/TokenBucket.cs b/OpenSim/Region/ClientStack/LindenUDP/TokenBucket.cs index 677d3d1..2ec79ab 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/TokenBucket.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/TokenBucket.cs | |||
@@ -340,6 +340,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
340 | set { m_maxDripRate = (value == 0 ? 0 : Math.Max(value,m_minimumFlow)); } | 340 | set { m_maxDripRate = (value == 0 ? 0 : Math.Max(value,m_minimumFlow)); } |
341 | } | 341 | } |
342 | 342 | ||
343 | private bool m_enabled = false; | ||
344 | |||
343 | // <summary> | 345 | // <summary> |
344 | // | 346 | // |
345 | // </summary> | 347 | // </summary> |
@@ -357,9 +359,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
357 | // <summary> | 359 | // <summary> |
358 | // | 360 | // |
359 | // </summary> | 361 | // </summary> |
360 | public AdaptiveTokenBucket(TokenBucket parent, Int64 maxDripRate) : base(parent,m_minimumFlow) | 362 | public AdaptiveTokenBucket(TokenBucket parent, Int64 maxDripRate, bool enabled) : base(parent,maxDripRate) |
361 | { | 363 | { |
362 | MaxDripRate = maxDripRate; | 364 | m_enabled = enabled; |
365 | |||
366 | if (m_enabled) | ||
367 | { | ||
368 | m_log.WarnFormat("[TOKENBUCKET] Adaptive throttle enabled"); | ||
369 | MaxDripRate = maxDripRate; | ||
370 | AdjustedDripRate = m_minimumFlow; | ||
371 | } | ||
363 | } | 372 | } |
364 | 373 | ||
365 | // <summary> | 374 | // <summary> |
@@ -368,7 +377,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
368 | public void ExpirePackets(Int32 count) | 377 | public void ExpirePackets(Int32 count) |
369 | { | 378 | { |
370 | // m_log.WarnFormat("[ADAPTIVEBUCKET] drop {0} by {1} expired packets",AdjustedDripRate,count); | 379 | // m_log.WarnFormat("[ADAPTIVEBUCKET] drop {0} by {1} expired packets",AdjustedDripRate,count); |
371 | AdjustedDripRate = (Int64) (AdjustedDripRate / Math.Pow(2,count)); | 380 | if (m_enabled) |
381 | AdjustedDripRate = (Int64) (AdjustedDripRate / Math.Pow(2,count)); | ||
372 | } | 382 | } |
373 | 383 | ||
374 | // <summary> | 384 | // <summary> |
@@ -376,7 +386,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
376 | // </summary> | 386 | // </summary> |
377 | public void AcknowledgePackets(Int32 count) | 387 | public void AcknowledgePackets(Int32 count) |
378 | { | 388 | { |
379 | AdjustedDripRate = AdjustedDripRate + count; | 389 | if (m_enabled) |
390 | AdjustedDripRate = AdjustedDripRate + count; | ||
380 | } | 391 | } |
381 | } | 392 | } |
382 | } | 393 | } |
diff --git a/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs b/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs index ddbc079..db17d8f 100644 --- a/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs +++ b/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs | |||
@@ -398,7 +398,7 @@ namespace OpenSim.Region.CoreModules.UDP.Linden | |||
398 | if (client is LLClientView) | 398 | if (client is LLClientView) |
399 | { | 399 | { |
400 | LLClientView llClient = client as LLClientView; | 400 | LLClientView llClient = client as LLClientView; |
401 | 401 | ||
402 | if (firstClient) | 402 | if (firstClient) |
403 | { | 403 | { |
404 | report.AppendLine(GetServerThrottlesReport(llClient.UDPServer)); | 404 | report.AppendLine(GetServerThrottlesReport(llClient.UDPServer)); |
@@ -451,7 +451,7 @@ namespace OpenSim.Region.CoreModules.UDP.Linden | |||
451 | int maxRegionNameLength = 14; | 451 | int maxRegionNameLength = 14; |
452 | int maxTypeLength = 4; | 452 | int maxTypeLength = 4; |
453 | 453 | ||
454 | string name = "SERVER AGENT LIMITS"; | 454 | string name = "SERVER AGENT RATES"; |
455 | 455 | ||
456 | report.Append(GetColumnEntry(name, maxNameLength, columnPadding)); | 456 | report.Append(GetColumnEntry(name, maxNameLength, columnPadding)); |
457 | report.Append(GetColumnEntry("-", maxRegionNameLength, columnPadding)); | 457 | report.Append(GetColumnEntry("-", maxRegionNameLength, columnPadding)); |
@@ -461,13 +461,13 @@ namespace OpenSim.Region.CoreModules.UDP.Linden | |||
461 | report.AppendFormat( | 461 | report.AppendFormat( |
462 | "{0,7} {1,8} {2,7} {3,7} {4,7} {5,7} {6,9} {7,7}", | 462 | "{0,7} {1,8} {2,7} {3,7} {4,7} {5,7} {6,9} {7,7}", |
463 | (throttleRates.Total * 8) / 1000, | 463 | (throttleRates.Total * 8) / 1000, |
464 | (throttleRates.ResendLimit * 8) / 1000, | 464 | (throttleRates.Resend * 8) / 1000, |
465 | (throttleRates.LandLimit * 8) / 1000, | 465 | (throttleRates.Land * 8) / 1000, |
466 | (throttleRates.WindLimit * 8) / 1000, | 466 | (throttleRates.Wind * 8) / 1000, |
467 | (throttleRates.CloudLimit * 8) / 1000, | 467 | (throttleRates.Cloud * 8) / 1000, |
468 | (throttleRates.TaskLimit * 8) / 1000, | 468 | (throttleRates.Task * 8) / 1000, |
469 | (throttleRates.TextureLimit * 8) / 1000, | 469 | (throttleRates.Texture * 8) / 1000, |
470 | (throttleRates.AssetLimit * 8) / 1000); | 470 | (throttleRates.Asset * 8) / 1000); |
471 | 471 | ||
472 | return report.ToString(); | 472 | return report.ToString(); |
473 | } | 473 | } |
diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini index 7ea98d4..35e8079 100644 --- a/bin/OpenSimDefaults.ini +++ b/bin/OpenSimDefaults.ini | |||
@@ -362,30 +362,24 @@ | |||
362 | ; | 362 | ; |
363 | ;client_throttle_max_bps = 196608 | 363 | ;client_throttle_max_bps = 196608 |
364 | 364 | ||
365 | ; Per-client bytes per second rates for the various throttle categories. | 365 | ; Adaptive throttling attempts to limit network overload when multiple |
366 | ; These are default values that will be overriden by clients | 366 | ; clients login by starting each connection more slowly. Disabled by |
367 | ; | 367 | ; default |
368 | ;resend_default = 12500 | ||
369 | ;land_default = 1000 | ||
370 | ;wind_default = 1000 | ||
371 | ;cloud_default = 1000 | ||
372 | ;task_default = 1000 | ||
373 | ;texture_default = 1000 | ||
374 | ;asset_default = 1000 | ||
375 | ;state_default = 1000 | ||
376 | |||
377 | ; Per-client maximum burst rates in bytes per second for the various | ||
378 | ; throttle categories. These are default values that will be overriden by | ||
379 | ; clients | ||
380 | ; | 368 | ; |
381 | ;resend_limit = 18750 | 369 | ;enable_adaptive_throttles = true |
382 | ;land_limit = 29750 | 370 | |
383 | ;wind_limit = 18750 | 371 | ; Per-client bytes per second rates for the various throttle categories. |
384 | ;cloud_limit = 18750 | 372 | ; These are default values that will be overriden by clients. These |
385 | ;task_limit = 18750 | 373 | ; defaults are approximately equivalent to the throttles set by the Imprudence |
386 | ;texture_limit = 55750 | 374 | ; viewer when maximum bandwidth is set to 350kbps |
387 | ;asset_limit = 27500 | 375 | |
388 | ;state_limit = 37000 | 376 | ;resend_default = 6625 |
377 | ;land_default = 9125 | ||
378 | ;wind_default = 1750 | ||
379 | ;cloud_default = 1750 | ||
380 | ;task_default = 18500 | ||
381 | ;texture_default = 18500 | ||
382 | ;asset_default = 10500 | ||
389 | 383 | ||
390 | ; Configures how ObjectUpdates are aggregated. These numbers | 384 | ; Configures how ObjectUpdates are aggregated. These numbers |
391 | ; do not literally mean how many updates will be put in each | 385 | ; do not literally mean how many updates will be put in each |