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: [email protected] [mailto:opensim-dev- >[email protected]] On Behalf Of Mikko Pallari >Sent: Friday, February 20, 2009 12:41 AM >To: [email protected] >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: [email protected] [mailto:opensim-dev- >[email protected]] On Behalf Of Hurliman, John >Sent: 18. helmikuuta 2009 3:19 >To: [email protected] >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 >[email protected] >https://lists.berlios.de/mailman/listinfo/opensim-dev >_______________________________________________ >Opensim-dev mailing list >[email protected] >https://lists.berlios.de/mailman/listinfo/opensim-dev > _______________________________________________ Opensim-dev mailing list [email protected] https://lists.berlios.de/mailman/listinfo/opensim-dev
