[Opensim-dev] Improving object update performance

Hurliman, John john.hurliman at intel.com
Fri Feb 20 17:49:02 UTC 2009


I'm confused; there's no such thing as an AvatarTerseUpdate (see http://www.libsecondlife.org/template/release/1.19.1.4.txt). There are AgentUpdate packets, but those only go from the client to the server. Avatars are also objects (they share all of the same properties as prims at the wire level) and avatar movements are broadcasted with ObjectUpdate, ObjectUpdateCompressed (currently unused in OpenSim), ObjectUpdateCached (rare for avatars as it's a client cache check), and ImprovedTerseObjectUpdate. Since avatar properties almost never change (the exception is changing appearance where the TextureData block for an avatar will change, or changing group name where the NameValues field will change) all avatar movements are broadcast with ImprovedTerseObjectUpdate. Aggregating multiple ImprovedTerseObjectUpdate.ObjectData blocks into a single packet should provide a noticeable reduction in bandwidth for crowded regions. Doing frustum calculations to cull and prioritize updates for each avatar will also ease the network bottleneck, at the expense of more compute power.

John

>-----Original Message-----
>From: opensim-dev-bounces at lists.berlios.de [mailto:opensim-dev-
>bounces at lists.berlios.de] On Behalf Of Mikko Pallari
>Sent: Friday, February 20, 2009 12:41 AM
>To: opensim-dev at lists.berlios.de
>Subject: Re: [Opensim-dev] Improving object update performance
>
>Hi,
>
>I don't have resent statistic about which packets are sent most in
>simulators currenly, but I would suspect that the most traffic comes
>from avatar movement not object updates. This however depends from how
>many scripts are in use etc.
>
>I have already made a patch [1], which combines multiple
>AvatarTerseUpdates in to one packet, like should also be done with the
>ImprovedTerseObjectUpdate packets as John descripes in the first point.
>
>Cheers,
>Mikko
>
>[1]: http://opensimulator.org/mantis/view.php?id=3136
>
>
>-----Original Message-----
>From: opensim-dev-bounces at lists.berlios.de [mailto:opensim-dev-
>bounces at lists.berlios.de] On Behalf Of Hurliman, John
>Sent: 18. helmikuuta 2009 3:19
>To: opensim-dev at lists.berlios.de
>Subject: [Opensim-dev] Improving object update performance
>
>Continuing a phone conversation on the mailing list, this is my current
>understanding of the status of object updates in OpenSim:
>
>1) Each object update is a single packet. No aggregation is done by
>combining multiple ObjectUpdate.ObjectData blocks into a single packet,
>or combining ImprovedTerseObjectUpdate.ObjectData blocks
>2) Object updates are sent in the same order to all clients, with no
>prioritization (using distance from camera/avatar, frustum culling, etc)
>3) OpenSim uses two packet types for sending object updates,
>ObjectUpdate and ImprovedTerseObjectUpdate. Different code paths arrive
>at each of these packets being sent, and no logic is used to determine
>the smallest object update packet possible to carry the modified data.
>This excludes the ObjectUpdateCompressed packet from being used
>4) Full scene information is streamed to each client as it connects.
>ObjectUpdateCached packets are not used in cases where the simulator
>might suspect a cache hit
>
>
>None of these are trivial to implement, but #1 would require the least
>amount of work and would be the least invasive change. #2, #3, and #4
>require a stronger concept of an interest list in OpenSim, and a careful
>balance between cpu load, memory usage from state management, and
>network load.
>
>John
>_______________________________________________
>Opensim-dev mailing list
>Opensim-dev at lists.berlios.de
>https://lists.berlios.de/mailman/listinfo/opensim-dev
>_______________________________________________
>Opensim-dev mailing list
>Opensim-dev at lists.berlios.de
>https://lists.berlios.de/mailman/listinfo/opensim-dev
>



More information about the Opensim-dev mailing list