Another technique inspired by some of the newer flow control algorithms... rather
than drop exponentially to 0 (and then adjust up for the minimum flow), drop on the delta between current rate and the minimum rate. This should smooth the fallback to minimum.mb-throttle-test
parent
75df04f0b3
commit
c06100c31f
|
@ -395,16 +395,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
/// The minimum rate for adaptive flow control.
|
/// The minimum rate for adaptive flow control.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected Int64 m_minimumFlow = 32000;
|
protected Int64 m_minimumFlow = 32000;
|
||||||
public Int64 MinimumFlow
|
|
||||||
{
|
|
||||||
get { return m_minimumFlow; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
m_minimumFlow = value;
|
|
||||||
TargetDripRate = Math.Max(m_minimumFlow, TargetDripRate);
|
|
||||||
AdjustedDripRate = Math.Max(m_minimumFlow, AdjustedDripRate);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructor for the AdaptiveTokenBucket class
|
/// Constructor for the AdaptiveTokenBucket class
|
||||||
|
@ -441,7 +431,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
"[ADAPTIVEBUCKET] drop {0} by {1} expired packets for {2}",
|
"[ADAPTIVEBUCKET] drop {0} by {1} expired packets for {2}",
|
||||||
AdjustedDripRate, packets, Identifier);
|
AdjustedDripRate, packets, Identifier);
|
||||||
|
|
||||||
AdjustedDripRate = (Int64) (AdjustedDripRate / Math.Pow(2,packets));
|
// AdjustedDripRate = (Int64) (AdjustedDripRate / Math.Pow(2,packets));
|
||||||
|
|
||||||
|
// Compute the fallback solely on the rate allocated beyond the minimum, this
|
||||||
|
// should smooth out the fallback to the minimum rate
|
||||||
|
AdjustedDripRate = m_minimumFlow + (Int64) ((AdjustedDripRate - m_minimumFlow) / Math.Pow(2, packets));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -454,5 +448,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
if (AdaptiveEnabled)
|
if (AdaptiveEnabled)
|
||||||
AdjustedDripRate = AdjustedDripRate + packets * LLUDPServer.MTU;
|
AdjustedDripRate = AdjustedDripRate + packets * LLUDPServer.MTU;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adjust the minimum flow level for the adaptive throttle, this will drop adjusted
|
||||||
|
/// throttles back to the minimum levels
|
||||||
|
/// <param>minDripRate--the new minimum flow</param>
|
||||||
|
/// </summary>
|
||||||
|
public void ResetMinimumAdaptiveFlow(Int64 minDripRate)
|
||||||
|
{
|
||||||
|
m_minimumFlow = minDripRate;
|
||||||
|
TargetDripRate = m_minimumFlow;
|
||||||
|
AdjustedDripRate = m_minimumFlow;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue