[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