From 83626e60e69ac0534faffa40f9e79a5d3ae0d332 Mon Sep 17 00:00:00 2001
From: Mic Bowman
Date: Mon, 20 Jan 2014 18:59:43 -0800
Subject: Adds a configuration option to cannibalize bandwidth from the udp
texture throttle and move it to the task throttle. Since most viewers are
using http textures, the udp texture throttle is holding onto bw that could
be used for more responsive prims updates. See the documentation for
CannibalizeTextureRate in OpenSimDefaults.ini. Option is disabled by default.
---
OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs | 14 ++++++++++++++
OpenSim/Region/ClientStack/Linden/UDP/ThrottleRates.cs | 6 ++++++
2 files changed, 20 insertions(+)
(limited to 'OpenSim/Region/ClientStack')
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs
index 202cc62..51433cb 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs
@@ -162,6 +162,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
private int m_defaultRTO = 1000; // 1sec is the recommendation in the RFC
private int m_maxRTO = 60000;
+ ///
+ /// This is the percentage of the udp texture queue to add to the task queue since
+ /// textures are now generally handled through http.
+ ///
+ private double m_cannibalrate = 0.0;
+
private ClientInfo m_info = new ClientInfo();
///
@@ -201,6 +207,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
// Create an array of token buckets for this clients different throttle categories
m_throttleCategories = new TokenBucket[THROTTLE_CATEGORY_COUNT];
+ m_cannibalrate = rates.CannibalizeTextureRate;
+
for (int i = 0; i < THROTTLE_CATEGORY_COUNT; i++)
{
ThrottleOutPacketType type = (ThrottleOutPacketType)i;
@@ -349,6 +357,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
texture = Math.Max(texture, LLUDPServer.MTU);
asset = Math.Max(asset, LLUDPServer.MTU);
+ // Since most textures are now delivered through http, make it possible
+ // to cannibalize some of the bw from the texture throttle to use for
+ // the task queue (e.g. object updates)
+ task = task + (int)(m_cannibalrate * texture);
+ texture = (int)((1 - m_cannibalrate) * texture);
+
//int total = resend + land + wind + cloud + task + texture + asset;
//m_log.DebugFormat("[LLUDPCLIENT]: {0} is setting throttles. Resend={1}, Land={2}, Wind={3}, Cloud={4}, Task={5}, Texture={6}, Asset={7}, Total={8}",
// AgentID, resend, land, wind, cloud, task, texture, asset, total);
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/ThrottleRates.cs b/OpenSim/Region/ClientStack/Linden/UDP/ThrottleRates.cs
index c9aac0b..e5bae6e 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/ThrottleRates.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/ThrottleRates.cs
@@ -59,6 +59,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// Flag used to enable adaptive throttles
public bool AdaptiveThrottlesEnabled;
+ /// Amount of the texture throttle to steal for the task throttle
+ public double CannibalizeTextureRate;
+
///
/// Default constructor
///
@@ -80,6 +83,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
Total = throttleConfig.GetInt("client_throttle_max_bps", 0);
AdaptiveThrottlesEnabled = throttleConfig.GetBoolean("enable_adaptive_throttles", false);
+
+ CannibalizeTextureRate = (double)throttleConfig.GetFloat("CannibalizeTextureRate", 0.0f);
+ CannibalizeTextureRate = Util.Clamp(CannibalizeTextureRate,0.0, 0.9);
}
catch (Exception) { }
}
--
cgit v1.1