Hi,
Magritte 3 is now available for Gemstone - with tests green. The
configuration has been updated and I loaded Magritte 3 with:
Gofer it
squeaksource: 'MetacelloRepository';
package: 'ConfigurationOfMagritte3';
load.
MCPlatformSupport commitOnAlmostOutOfMemoryDuring: [
ConfigurationOfMagritte3 project stableVersion load: #('Seaside Tests') ].
However the tests run extremely slowly - in the test suite I've measured
20x slowdown between Magritte 2 and Magritte 3 - making the tests a pain to
execute.
I've run a series of tests to characterise where the problem might be. The
tests are as follows:
-----
1) Test-suite benchmark:
| testSuite |
testSuite := (OBClassCategoryNode on: 'Magritte-Tests-Model-Description')
classes
inject: TestSuite new
into: [:suite :classNode |
(classNode theClass inheritsFrom: TestCase)
ifTrue: [suite addTests: classNode theClass suite tests].
suite].
Time millisecondsToRun: [ testSuite run ].
2) Description benchmark:
Magritte 2:
Time millisecondsToRun:
[100 timesRepeat: [ MABooleanDescription description ] ].
Magritte 3:
Time millisecondsToRun:
[100 timesRepeat: [ MABooleanDescription new magritteDescription ] ].
3) Micro-benchmark
Magritte 2:
Time millisecondsToRun:
[100 timesRepeat: [ MABooleanDescription class allSelectors select: [
:each | each isDescriptionSelector ] ] ].
Magritte 3:
Time millisecondsToRun:
[100 timesRepeat: [ Pragma allNamed: MAPragmaBuilder
magritteDescriptionPragma from: MABooleanDescription to: Object ] ].
* The micro-benchmark is illustrative of the difference between Magritte 2
and Magritte 3 - Magritte 2 uses a naming convention to retrieve
descriptions, whereas Magritte 3 uses Pragmas.
-----
Results:
Pharo Magritte 2: (1) 436 (2) 0 (3) 85
Pharo Magritte 3: (1) 743 (2) 58 (3) 12
Gemstone Magritte 2: (1) 988 (2) 30 (3) 2229
Gemstone Magritte 3: (1) 21663 (2) 1575 (3) 444
Cavet: Although Gemstone and Pharo are running on the same machine -
Gemstone is running virtualised in a VMWare Linux installation, so the
results are not directly comparable, although the 30x performance decrease
between Pharo and Gemstone surprised me.
First the good news:
For Magritte the pragma description look-up is more performant than the
named-based lookup (micro-benchmark (3)).
Now the bad news:
In Pharo Magritte 2 is faster then Magritte 3 when running a description
lookup based test-suite containing 1416 tests. My feeling is that in the
context of a real application performing a smaller number of lookups this
is probably not significant.
However in Gemstone the performance degradation is more noticeable and if
nothing else makes running the tests painful.
How to proceed:
Magritte 2's performance advantage is gained from caching the descriptions.
However I think the benefits of having dynamic (non-caching) descriptions
outweigh the disadvantages and I'd be reluctant to add a generic layer of
caching. In Pharo I don't think this is an issue. However in Gemstone I
feel that these numbers need some further investigation.
Any thoughts how to proceed?
Nick
Show replies by date