GC behavior?

Stephen Pair spair at acm.org
Wed Aug 28 21:05:19 UTC 2002

Relating to the work I'm doing on the Persistence VM, I've encountered a
perplexing performance issue relating to incremental GC.

In my modified vm/image, which has no compact classes, I'm seeing an
interesting performance degradation.  Looking a "0 tinyBenchmarks" the
number of bytecodes/sec has increased slightly (this is due to some
improvements indirectly relating to the removal of compact classes I
think)...but, the number of sends/sec has dropped from roughly 2 million
to about 750k.

Using MessageTally on Ian's CCodeGenerator benchmark, I see some
interesting facts about incremental GCs.

In the normal vm, I see 1503 IGCs taking 3,308 ms and 9% of the time.
There are 150 tenures with 10 GCs/tenure.

In the modified vm, I see 6339 IGCs taking 14,443 ms and 23% of the
time.  There are 173 tenures with 36 GCs/tenure.

Both VMs seem show the same time (2ms) per GC...so I don't think having
the extra class header has much of an impact on the marking performance.

This would seem to indicate that more garbage is being created, but I
have no idea how.  I guess my question is, can anyone think of how
removing compact classes (and having a class header on every object)
would have this kind of impact on GC?  I've been over the Interpreter
changes time and again and can't find anything obvious.  I'm thinking it
must be something unrelated to the removal of compact classes (perhaps
changing the hash to 14 bits is causing some un-anticipated side effect
that results in creating more objects).

- Stephen

More information about the Squeak-dev mailing list