[Opensim-users] Slow LSL timers

Paul Fishwick fishwick at cise.ufl.edu
Mon Dec 6 00:54:55 UTC 2010


I was going to wait until this week to show this link since it is not
completely ready (yet), but we have an implementation using
a region module for simple harmonic motion. We drive this motion
through a separate package (Ptolemy) that I have used in my
systems simulation class:

http://www.cise.ufl.edu/~zezzell/ptolemy/ptolemy_opensim.html

Ultimately, for several reasons including artificial delays, LSL
seems inadequate for near real-time simulation. However, access
to the raw timing facility in OpenSim is adequate.

-p

On 12/5/2010 7:30 PM, Jorge Lima wrote:
> My project is simple enough - something like throwing a ball off a
> cliff with a horizontal impulse and recording its speed. It's for high
> school physics teachers/students.
>
> It seems to me that I can either have a fast timer that simulates the
> movement and generates points, or I can have a fast timer that trusts
> the physics engine to provide an accurate simulation and records its
> output :)
>
> I will look into the Timer.cs file and try out C# scripting tomorrow,
> then get back to you. Thanks for the help!
>
> On Sat, Dec 4, 2010 at 6:23 AM, dz<dz at bitzend.net>  wrote:
>> I'd have to agree with Justin...
>>
>> Expecting event handling to be optimized is too optimistic, but  there are
>> alternatives.  The .Net/Mono libraries already include timer functions that
>> support fast and accurate timing.
>>
>> Relying on an LSL event trigger to happen every 4 frames MAY work in SL but
>> it is a design begging to cause lag and  stop itself.  Designs like that are
>> also susceptible to event buffer overflows  where your events are "lost",
>> leaving you to wonder why your "reliable" script  sometimes just isn't..
>> The ONLY LSL events I have seen  requiring sub-second repeats  would be in
>> an AO, but timer based AO's are obsoleted in OpenSim by the use of the
>> Animation_Changed event.
>>
>> In the extreme, if you are trying to be  very exact,,  you would want to
>> insure the timings were made by processes independent of the region time
>> dialations, not the ones that may be responsible for them.
>>
>>
>>
>> On Fri, Dec 3, 2010 at 5:35 PM,<opensim-users-request at lists.berlios.de>
>> wrote:
>>> ---------- Forwarded message ----------
>>> From: Jorge Lima<jorge.manuel at gmail.com>
>>>
>>> Subject: [Opensim-users] Slow LSL timers
>>> Ran 100 timer events with a single if(++i>  100) inside. I suppose
>>> decrementing and comparing to 0 might be faster, but I also
>>> copy-pasted 100 inlined if clauses and the time to run them was
>>> negligible.
>>>
>>> llSetTimerEvent(0.1) ->  59 s ->  490% overhead
>>> llSetTimerEvent(0.2) ->  59 s ->  195% overhead
>>> llSetTimerEvent(0.5) ->  59 s ->  18% overhead
>>> llSetTimerEvent(0.75) ->  81 s ->  8% overhead
>>> llSetTimerEvent(1.0) ->  108 s ->  8% overhead
>>> llSetTimerEvent(2.0) ->  209 s ->  4.5% overhead
>>> llSetTimerEvent(4.0) ->  407 s ->  1.75% overhead
>>>
>>> I am guessing that the overhead is, therefore, internal to the timer
>>> implementation. I haven't tested raw C# timers as comparison but 100ms
>>> is an eternity in modern computing, I can ping servers across the
>>> Atlantic ocean in less than that!
>>>
>>> I went through the code but I haven't yet found the part that handles
>>> timers. It's not in EventManager.
>>> Does anyone know what's going on? The code works fine in SL.
>>> Should I be posting this in the dev list? I'd like to see if I can fix it.
>>> Any thoughts on how to get fast timers in OpenSim?
>>> Faster computer? (I did check and was only getting about 20% CPU usage...)
>>> Porting them to a Real-Time operating system? :)
>>>
>>>
>>>
>>> ---------- Forwarded message ----------
>>> From: Justin Clark-Casey<jjustincc at googlemail.com>
>>> To: opensim-users at lists.berlios.de
>>> Date: Sat, 04 Dec 2010 01:35:32 +0000
>>> Subject: Re: [Opensim-users] Slow LSL timers
>>
>>> I'm not familiar with the this area of the code but I had a quick look
>>> since I was curious (the meat is in
>>> OpenSim/Region/ScriptEngine/Shared/Api/Plugins/Timer.cs).  The code isn't
>>> using C# timers so I'm not totally surprised at the behaviour that you're
>>> seeing.
>>>
>>> I suspect addressing this would require a considerably different
>>> implementation.
>>>
>> _______________________________________________
>> Opensim-users mailing list
>> Opensim-users at lists.berlios.de
>> https://lists.berlios.de/mailman/listinfo/opensim-users
>>
>>
> _______________________________________________
> Opensim-users mailing list
> Opensim-users at lists.berlios.de
> https://lists.berlios.de/mailman/listinfo/opensim-users
>


-- 
Paul Fishwick, PhD
Professor and Director, Digital Arts and Sciences
CISE Department, CSE 301
University of Florida
Gainesville, FL 32611
Email: fishwick at cise.ufl.edu
Web: http://www.cise.ufl.edu/~fishwick
Blog: http://www.representationz.com




More information about the Opensim-users mailing list