[Opensim-dev] Thoughts on performance with a profiler

Justin Clark-Casey jjustincc at googlemail.com
Wed Feb 25 17:27:17 UTC 2009


Melanie wrote:
> Hi,
> 
> Frisby, Adam wrote:
>> -          SceneGraph.Get* methods are generally very wasteful. Lots of them use the /slow/ GetEntities method to build a list of entities before searching them. This is particularly noticeable on the GetGroupByPrim(UUID) method. EntityManager should be having indexes for these frequently accessed items.
> 
> I thought some one (justin?) worked on that with the goal of adding 
> indexes/making it a dict.

This kind of thing should definitely happen.  However, the last known movement on this was, I thought, when Adam created 
the EntityManager class.  I thought this was eventually intended to manage things (though it's hard to tell when classes 
aren't documented).

> 
>> -          Why, to send a primitive do we need to: - Mark it for updates. - Crawl through the Entities list for updates - Send updates to ClientViews, when we could just Send the update directly to viewers (EventManager.TriggerOnPrimUpdated[?])?
> 
> Because it would happen in the wrong thread context, maybe?
> 
>> -          Why does Scene.Heartbeat/Update do more than just updating frame-dependent things? Eg, why not keep Update to just: Update Physics, Process Scripts[?], etc. Out of it we move: Backup (timer?), Land update (when something happens+ timer?), Terrain backup (main backup thread?)
> 
> Scripts don't run in update, although movement events are generated 

Some time back I did think about doing backups separately.  However, the code in this area is very tangly and one would 
need to be extremely careful to take care of race conditions, deadlock, etc. with another thread accessing SOGs and SOPs.

> there.
> 
>> -          Why build X copies of the same packet for fifteen separate clients? Why not re-use the update packet and change the agent IDs? Maybe some kind of 'PacketMaster' could be developed for each ClientView type which allows us to do 'bulk' operations like this.
> 
> Because of the sequence numbers. They are different for each client.

Exactly.  We have been caught out before here where packet objects were reused before the previously client had finished 
with it.  This generated very difficult to find bugs.

> 
> Melanie
> _______________________________________________
> Opensim-dev mailing list
> Opensim-dev at lists.berlios.de
> https://lists.berlios.de/mailman/listinfo/opensim-dev
> 


-- 
justincc
Justin Clark-Casey
http://justincc.wordpress.com



More information about the Opensim-dev mailing list