[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