[squeak-dev] Cog performance

Levente Uzonyi leves at elte.hu
Tue Jun 22 21:28:35 UTC 2010


Hi,

I was curious how much speedup Cog gives when the code has only a few 
message sends, so I ran the following "benchmark":

| s1 s2 |
Smalltalk garbageCollect.
s1 := String streamContents: [ :stream |
 	1000 timesRepeat: [
 		'aab' do: [ :e | stream nextPut: e; cr ] ] ].
s2 := String streamContents: [ :stream |
 	1000 timesRepeat: [
 		'abb' do: [ :e | stream nextPut: e; cr ] ] ].
[ TextDiffBuilder from: s1 to: s2 ] timeToRun.

The above pattern makes TextDiffBuilder >> #lcsFor:and: run for a while. 
My results are a bit surprising:
CogVM: 2914
SqueakVM: 1900

MessageTally shows that (I wonder if it's accurate with Cog at all) 
CogVM's garbage collector is a bit better, but it runs the code slower 
than SqueakVM:

CogVM:
**Leaves**
60.6% {1886ms} TextDiffBuilder>>lcsFor:and:
36.2% {1127ms} DiffElement>>=
1.8% {56ms} ByteString(String)>>=

**GCs**
 	full			1 totalling 153ms (5.0% uptime), avg 153.0ms
 	incr		21 totalling 76ms (2.0% uptime), avg 4.0ms
 	tenures		13 (avg 1 GCs/tenure)
 	root table	0 overflows

SqueakVM:
**Leaves**
46.8% {888ms} TextDiffBuilder>>lcsFor:and:
35.3% {670ms} DiffElement>>=
9.8% {186ms} ByteString(String)>>compare:with:collated:
6.9% {131ms} ByteString(String)>>=

**GCs**
 	full			3 totalling 254ms (13.0% uptime), avg 85.0ms
 	incr		301 totalling 110ms (6.0% uptime), avg 0.0ms
 	tenures		272 (avg 1 GCs/tenure)
 	root table	0 overflows

Is Cog slower because #to:do: loops are not optimized, or is there some 
other reason for the slowdown?


Levente



More information about the Squeak-dev mailing list