[squeak-dev] The Inbox: Kernel-cmm.1198.mcz

Chris Muller ma.chris.m at gmail.com
Sun Nov 25 22:54:27 UTC 2018


> That's not the right way to measure things that are so quick, because the
> overhead of block activation is comparable to the runtime of the code
> inside the block.

I get you, but that its so hard to even write such a test indicates
that real-world code also needs to do a lot of block-activations, and
so this quickly dilutes the density of calls to #class.

The only way I could think was to just cut-and-paste the block innards
X 100 times and measure the degradation from the baseline (single):

{ [1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1
xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass.
1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1
xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass.
1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1
xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass.
1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1
xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass.
1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1
xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass.
1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1
xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass.
1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1
xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass.
1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1
xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass.
1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1
xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass. 1 xxxClass.
1 xxxClass. ] bench.

[ 1 class. 1 class. 1 class. 1 class. 1 class. 1 class. 1 class. 1
class. 1 class. 1 class.  1 class. 1 class. 1 class. 1 class. 1 class.
1 class. 1 class. 1 class. 1 class. 1 class.  1 class. 1 class. 1
class. 1 class. 1 class. 1 class. 1 class. 1 class. 1 class. 1 class.
1 class. 1 class. 1 class. 1 class. 1 class. 1 class. 1 class. 1
class. 1 class. 1 class.  1 class. 1 class. 1 class. 1 class. 1 class.
1 class. 1 class. 1 class. 1 class. 1 class.  1 class. 1 class. 1
class. 1 class. 1 class. 1 class. 1 class. 1 class. 1 class. 1 class.
1 class. 1 class. 1 class. 1 class. 1 class. 1 class. 1 class. 1
class. 1 class. 1 class.  1 class. 1 class. 1 class. 1 class. 1 class.
1 class. 1 class. 1 class. 1 class. 1 class.  1 class. 1 class. 1
class. 1 class. 1 class. 1 class. 1 class. 1 class. 1 class. 1 class.
1 class. 1 class. 1 class. 1 class. 1 class. 1 class. 1 class. 1
class. 1 class. 1 class. ] bench.  }

 #('2,780,000 per second. 360 nanoseconds per run.' '5,590,000 per
second. 179 nanoseconds per run.')

So X100 more density of calls to #xxxClass degraded the performance
from 27% slower to 50% slower.

So the real question is how dense are the calls to #class, and are
they mostly from only a few senders which could retain the
optimization by #basicClass?  It would be an interesting experiment.
Pointless, though, if there's no chance of swaying you.


More information about the Squeak-dev mailing list