[Opensim-dev] Thoughts on performance with a profiler
Frisby, Adam
adam at deepthink.com.au
Mon Feb 23 09:08:34 UTC 2009
Test region: 40,000 prims (or there abouts), running trunk. Testing a combination of factors including idle running, idle running with an avatar, etc.
Random notes herein:
- 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.
- SQLite processing one-at-a-time is very slow. Inserts should be bulked for performance. I suggest running a '1500ms' rule on it.
- 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[?])?
- 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?)
- 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.
I have a feeling that with a few of these things fixed, performance would increase dramatically.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://opensimulator.org/pipermail/opensim-dev/attachments/20090223/54d1a5a7/attachment-0001.html>
More information about the Opensim-dev
mailing list