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:
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
|
Free forum by Nabble | Edit this page |