[Opensim-dev] Behaviour of adaptive throttles under high load

Justin Clark-Casey jjustincc at googlemail.com
Wed Nov 26 01:15:28 UTC 2014


Hi Mic (primarily),

Two years ago [1] we had a discussion about the enable_adaptive_throttles setting.  Just for background, this is a 
setting that adapts the amount of data sent to the viewer depending on whether reliable packets sent from the simulator 
are acked or not.  As such, it looks to make sure that a viewer which sets a downstream bandwidth higher than its 
network connection can cope with is not permanently hosed with too much data.  We enabled it on an experimental basis [2].

As you said at the time, this is modelled on the congestion approach used in TCP.  I see that for TCP, the rate is 
halved on every unacked segment.  In OpenSimulator, it's halved on every unacked reliable packet.

However, under fairly modest load conditions in the conference grid, I saw a behaviour where sometimes for a connection 
a sequence of packets would expire for some connections in a very short time period (< 1 sec).  This would halve the 
throttle many times, in my observations right down to the absolute minimum.  This caused the behaviour from the user's 
point of view to degrade considerably for an extended period of time.  The throttles takes quite a long period to grow 
again.

I didn't get much further with the diagnostics since a lack of time forced us to switch back to manual throttling 
instead (with a 1 mbit per viewer and 400 mbit total on the keynotes).  This seemed to work okay in testing and in the 
event itself.  However, this leaves one vulnerable to the problem adaptive_throttles looks to tackle in the first place.

I'm still reading up about this stuff, but it strikes me that halving the throttle on every missed packet is much 
harsher than the TCP approach, as with UDP a whole sequence can expire at once rather than a single segment that is 
subsequently retried before another segment can be missed.

One idea is to ignore all expiries in a certain period (e.g. next 2 seconds) if an expired packet has already caused the 
throttle to be halved.  Of course, this is a bit more complicated to do but hopefully not too much so.  What do you 
think?  Any other ideas?

[1] http://opensimulator.org/pipermail/opensim-dev/2011-October/023017.html
[2] http://opensimulator.org/pipermail/opensim-dev/2011-October/023063.html

Best Regards,

-- 
Justin Clark-Casey (justincc)
OSVW Consulting
http://justincc.org
http://twitter.com/justincc


More information about the Opensim-dev mailing list