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.
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!
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!
On 17/02/2008, Igor Stasenko siguctua@gmail.com 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'
vm-dev@lists.squeakfoundation.org