for our Sametime3D build we have some rather script heavy regions (a brainstorming region, a scripted auditorium, and a fairly innocuous open space meeting area). having just installed sean dague's excellent serverstats module for opensim i decided to compare the two OpenSim script engines, DotNetEngine and XEngine --- we knew from first hand experience that DotNetEngine seemed to be more resource hungry, but didn't really know how resource hungry and how it compared with XEngine.
in both case we had 5 regions running: two theater regions with lots of scripted chairs and a screen object, two brainstorming sessions with lots of little, scripted objects and the one innocuous open meeting space with a screen and a fountain in it. with both test runs i waited until all objects had rezzed and all scripts had been compiled and were started (and in both cases i clean out the bin/ScriptEngine/*/*.{dll,state} files). the base system is a standalone OpenSim system (compiled from subversion r7123).
here are the results:

the graph above shows CPU uses by DotNetEngine (blue area) and XEngine for my 5 region OpenSim. what's surprising --- perhaps even shocking --- is the vast difference between DotNetEngine and XEngine. the Y scale is in %, so 2.0K % means, DotNetEngine drove our poor server up to loads of 2000%, whereas XEngine is just barely noticable (in comparison). that difference is confirmed by the next graph:

DotNetEngine (again, red area) seems to guzzle up what it can get, XEngine (again, blue area) is much more "reasonable" in its memory consumption.
very interesting. just from this brief comparison, XEngine seems to win hands down --- if, that is, if we manage to get rid of the deadlocks during startup that we see every so often.

Our scripts run fine on XEngine but also suffer from serious startup problems. We solved the issue by setting up a listener in all scripts that executes a ScriptReset command when receiving a special code from sayRegion on a dedicated channel.
This way we just have to manually give a single region script reset command after startup and all scripts reset automatically. Due to the low number of affected regions our administrator is capable of doing this by hand after a region restart.
Greetings from the real world, Kai Ludwig Director TalentRaspel virtual worlds Ltd. http://www.talentraspel.de
comment by Kai Ludwig — November 7, 2008 @ 01:40
Great comparison thanks for sharing!
comment by G2 Proto/Kyle G — November 7, 2008 @ 03:57
I don’t think the percentage calculation is working right, as there is no way that it should be able to get above 100% by the way I’m doing the math. That said, the relative numbers are comparable, and there is a 10x difference there.
comment by Sean Dague — November 7, 2008 @ 13:57
@sean: interesting. i hadn’t really thought about that and assumed it was “translating” CPU load average into percentages, somehow.
comment by DrScofield — November 7, 2008 @ 15:09
[...] xyzzy xyzzy… » a brief look at DotNetEngine vs XEngineIt's really nice to see the stats work helping people figure out where some of our bottlenecks are. It isn't perfect, but it is definitely going in the right direction. [...]
pingback by Sean’s Mental Walkabout » Blog Archive » Links for November 7th — November 7, 2008 @ 21:01