HydraVM now truly event-driven, with more clean design

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

HydraVM now truly event-driven, with more clean design

Igor Stasenko
 
I'm just done with refactoring, as was planned in
http://lists.squeakfoundation.org/pipermail/vm-dev/2008-February/001795.html.
I was surprised that VM runs smoothly at first successful build after
changing lot of stuff! :)

Here the set of changes i done:
---------
* refactor signaling low space semaphore
* refactor signaling interrupt semaphore
* refactor signaling finalization semaphore
* remove interruptPending var
* remove get/setInterruptPending methods

* set system timer to post ioProcessEvents event every 200 ms

* deal with primitiveSignalAtMilliseconds primitive
* refactor signaling timer semaphore
* remove lastTick var
* remove nextPollTick var
* remove nextWakeupTick var
* remove get/setNextWakeupTick methods

* change internalQuickCheckForInterrupts
* remove quickCheckForInterrupts, leave only internalQuickCheckForInterrupts

* remove checkForInterrupts method
* interruptChecksEveryNms totally ignored (no need in interrupt if
there no any event!)
* remove interruptCheckForced method from use
* remove getInterruptCheckCounter method
* remove setInterruptCheckCounter: method
* remove interruptCheckCounter var
* forceInterruptCheck method is no-op now
* remove interruptCheckCounterFeedBackReset var

---------

1 tinyBenchmarks runs on my box:

squeak VM:
'200312989 bytecodes/sec; 5879195 sends/sec'
'200469851 bytecodes/sec; 6178049 sends/sec'
'200000000 bytecodes/sec; 6183469 sends/sec'
'200156372 bytecodes/sec; 6151095 sends/sec'

HydraVM before refactoring of checkForInterrupts()

'194973343 bytecodes/sec; 5372831 sends/sec'
'195121951 bytecodes/sec; 5372831 sends/sec'
'195121951 bytecodes/sec; 5368739 sends/sec'
'194973343 bytecodes/sec; 5126658 sends/sec'

HydraVM after refactoring of checkForInterrupts()
'197378565 bytecodes/sec; 5183202 sends/sec'
'195121951 bytecodes/sec; 5126658 sends/sec'
'197378565 bytecodes/sec; 5308098 sends/sec'
'197530864 bytecodes/sec; 5368739 sends/sec'

It's strange that
[ 3000 milliSeconds asDelay wait ] timeToRun
prints 2500 ( 4000 milliSeconds will print 3500, seems somewhere there
is a constant subtraction placed ?)

Is there are some tests for how precise Delays working?

Okay, now need to do some testing, and then i will release the update.

--
Best regards,
Igor Stasenko AKA sig.
Reply | Threaded
Open this post in threaded view
|

Re: HydraVM now truly event-driven, with more clean design

Igor Stasenko
 
Some additional benchmarking printout:

[1 tinyBenchmarks ] timeToRun

squeak VM:
 5240
 5235
 5243
 5249

Hydra VM (before refactoring)
  5797
  5797
  5937
  5938

Hydra VM (after refactoring)
  5688
  5703
  5703

So, there is definitely a speed boost with new changes!

--
Best regards,
Igor Stasenko AKA sig.
Reply | Threaded
Open this post in threaded view
|

Re: HydraVM now truly event-driven, with more clean design

Klaus D. Witzel
 
On Sun, 17 Feb 2008 14:53:18 +0100, Igor Stasenko wrote:

> Some additional benchmarking printout:

This looks very good indeed :)

BTW: did you test Hydra VM in a Web browser,

- http://wiki.squeak.org/squeak/1865

> [1 tinyBenchmarks ] timeToRun
>
> squeak VM:
>  5240
>  5235
>  5243
>  5249
>
> Hydra VM (before refactoring)
>   5797
>   5797
>   5937
>   5938
>
> Hydra VM (after refactoring)
>   5688
>   5703
>   5703
>
> So, there is definitely a speed boost with new changes!
>


Reply | Threaded
Open this post in threaded view
|

Re: HydraVM now truly event-driven, with more clean design

Igor Stasenko
In reply to this post by Igor Stasenko
 
On 17/02/2008, Igor Stasenko <[hidden email]> wrote:

> HydraVM after refactoring of checkForInterrupts()
> '197378565 bytecodes/sec; 5183202 sends/sec'
> '195121951 bytecodes/sec; 5126658 sends/sec'
> '197378565 bytecodes/sec; 5308098 sends/sec'
> '197530864 bytecodes/sec; 5368739 sends/sec'
>
> It's strange that
> [ 3000 milliSeconds asDelay wait ] timeToRun
> prints 2500 ( 4000 milliSeconds will print 3500, seems somewhere there
> is a constant subtraction placed ?)
>
> Is there are some tests for how precise Delays working?
>
> Okay, now need to do some testing, and then i will release the update.
>

Fixed that, now benchmarks looking much less diverse (which in own
turn means that timing now much more accurate), also send/sec shows a
small boost.

1 tinyBenchmarks
 '197378565 bytecodes/sec; 5434969 sends/sec'
 '197378565 bytecodes/sec; 5502853 sends/sec'
 '197378565 bytecodes/sec; 5434969 sends/sec'
 '197378565 bytecodes/sec; 5502853 sends/sec'

--
Best regards,
Igor Stasenko AKA sig.