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.
This cleans up Opensim's use of mono addins. In particular, the extension points /OpenSim/RegionModules and /OpenSim/WindModule moved from OpenSim.exe to OpenSim.Region.Framework.dll. From here on, developers of region modules should declare their dlls to be dependent on OpenSim.Region.Framework, starting with version 0.8.1
Additional changes:
- Addins version uniformly updated to 0.8.1. These numbers should be compatible with the release numbers or else it becomes very confusing.
- Mono addins directives moved from files addins.xml to embedded directives in the class and assembly declarations, to make it all consistent
adaptive throttle by a full MTU. This is consistent with some implementations
of congestion control algorithms and certainly has the effect of opening
the throttle window more quickly after errors. This is especially important
after initial scene load when the number and size of packets is small.
throttles. Setting adaptive_throttle_min_bps will change the
minimum rate that the adapative throttles will drop to in case
of network packet loss. The current rate default rate is 256kbps.
The viewer can throttle rates under that amount, but the dynamic
adaptation will not.
algorithm for dropping packets is a modified two state algorithm for creating
bursts of dropped packets. As configured there is about a 1.5% drop rate.
Invocation of the packet loss code is commented out by default.
This commit addresses the following issues were causing velocity to be set to 0 on the new region, disrupting flight in particular
* Full avatar updates contained no velocity information, which does appear to have some effect in testing.
* BulletSim was always setting the velocity to 0 for the new BSCharacter. Now, physics engines take a velocity parameter when setting up characters so we can avoid this.
This patch applies to both Bullet and ODE.
This is to achieve a clean separation of concerns - the watchdog is an inappropriate place for work management.
Also adds a WorkManager.RunInThreadPool() class which feeds through to Util.FireAndForget.
Also switches around the name and obj arguments to the new RunInThread() and RunJob() methods so that the callback obj comes after the callback as seen in the SDK and elsewhere
This is to reduce the potential for overload of the threadpool if there are many simultaneous requets in high concurrency situations.
Currently only applied to AvatarProperties and GenericMessage requests.
At least on Mono 3.2.8 (but not under Windows), one can bind multiple UDP sockets to the same port by default.
Different simulators cannot demultiplex each other's messages, so a set of confusing non-obvious errors arise if this occurs.
This change prevents such multiple binding.
In "show throttles", also renames 'total' column to 'actual' to reflect that it is not necessarily the throttles requested for/by the client.
Also fills out 'target' in non-adapative mode to the actual throttle requested for/by the client.
When an HG avatar enters a scene, it delays processing of entity updates. Could be crowding out by other updates or something else.
This delay in ones own av mvmt updates results in mvmt lag experienced on the client. Avoiding the internal LLClientView for these packets appears to resolve this issue.
Appears most noticeably for avatars with attachments, though has also been seen on those without sometimes. Hasn't been observed for non-HG avatars in general.
Will be investigating exactly what the problem is, at which point there will be a more permanent solution.
Information is also available in "show server throttles" but that's more for non-debug info rather than attempting to get and set parameters on the fly for debug purposes.
To do this required GetMesh to be converted to a BaseStreamHandler
Unlike GetTexture connector, no redirect URL functionality yet (this wasn't present in the first place).
This was because specifying a max client throttle would always request the max from the parent server throttle, no matter the actual total requests on the client throttle.
This would lead to a lower server multiplier than expected.
This change also adds a 'target' column to the "show throttles" output that shows the target rate (as set by client) if adaptive throttles is active.
This commit also re-adds the functionality lost in recent 5c1a1458 to set a max client throttle when adaptive is active.
This commit also adds TestClientThrottlePerClientAndRegionLimited and TestClientThrottleAdaptiveNoLimit regression tests
This only had one child, which is the 'adaptive' token bucket.
So from testing and currently analysis, we can use that bucket directly which simplifies the code.
This is separate from the user-oriented "show throttles" command since one will often only want to know about varying client throttle settings.
Currently displays max scene throttle and adaptive throttles config if set.
This is the total of queued outgoing packets across all connections, as also seen in the "show queues" command.
Gives some early indication of whether the simulator can't send all outgoing packets fast enough.
Though then one would want to check that this isn't due to a few bad client connections.
value default to 256, so should have no effect. Next steps needed: reduce
client udp Throttles with distance, update childreen connections with
significat movement and view range changes, Make disconnect be delayed in time, make disconnects be receiving region action not sender on region changes. Allow distance less than 256 to only connect to visible regions, even none. Make this be relative to camera and not agent position or region centers as it is now.
queue. Viewers fail to handle correctly out of order updates with ugly visible
effects. Make sure these packets don't include acks so they aren't lost.
to bind to same port, as seems to be possible at least with mono 3.2.8,
same as patch just pushed to core by justin. This is not necessary on
windows, possible a bug on some mono versions.
let a model have more than one mesh with skeleton, for testing create a
mesh inventory item, for this meshs. Add also option to read a avatar
collider replacement. This information still needs to be saved somewhere
so it can be checked on attachment, etc, without parsing the mesh asset again.
Unlike "debug lludp packet" which logs at the point where OpenSim first asks the clientstack to send a certain outgoing packet, this logs immediately before the actual send.
For low-level debugging purposes.
respective HandleUseCircuitCode, no matter how long it takes, so a viewer
retry doesnt start a overlapping one. It HandleUseCircuitCode
responsability to always remove entries, even on fails. Remove a client
even if m_scene.CloseAgent fails.
This is to see if an inaccuracy in sleep times under load is responsible for increase in frame times even when there is spare time still available.
Can currently only be activated by setting "debug scene set update-on-timer true".
Can be switched between timer and thread with sleep updates whilst the scene is running.
the UDP packet. Also just loose packets we tried to send 6 times already
(ll says 3) A viewer may just beeing ignoring them, or then the link is just dead.
Disabled by default. Currently can only be enabled with console "debug lludp oqre start" command, though this can be started and stopped whilst simulator is running.
When a connection requires packet queue refill processing (used to populate queues with entity updates, entity prop updates and image queue updates), this is done via Threadpool requests.
However, with a very high number of connections (e.g. 100 root + 300 child) a very large number of simultaneous requests may be causing performance issues.
This commit adds an experimental engine for processing these requests from a queue with a persistent thread instead.
Unlike inbound processing, there are no network requests in this processing that might hold the thread up for a long time.
Early implementation - currently only one thread which may (or may not) get overloaded with requests. Added for testing purposes.