Generational GC Performance Regressions
Peter Lobsinger
plobsing at gmail.com
Fri Feb 11 20:00:35 UTC 2011
There has been a marked decrease in performance on optimized builds
for some uses of Parrot since the merge of the generational_gc branch.
These stem from f14c1a62 ("Temporary workaround to enable write
barriering of CallContexts"). In brief, optimized access to registers
has been disabled.
2 cases that show the slowdown are Parrot's examples/pir/md5sum.pir
and Winxed's examples/hexdump.winxed. In the following, benchmarks are
heated up by running them several times before timing them.
$ du -h /usr/lib/libc.a
4.2M /usr/lib/libc.a
$ cd $PARROT_ROOT
# heat up benchmark (10x)
$ time ./parrot examples/pir/md5sum.pir /usr/lib/libc.a > /dev/null #
updated to HEAD (77b57cc51341), optimized build
./parrot examples/pir/md5sum.pir /usr/lib/libc.a > /dev/null 7.58s
user 0.04s system 99% cpu 7.624 total
# heat up benchmark (10x)
$ time ~/parrot-master/bin/parrot examples/pir/md5sum.pir
/usr/lib/libc.a > /dev/null# built prior to gen_gc merge (d5a6bc669)
~/parrot-master/bin/parrot examples/pir/md5sum.pir /usr/lib/libc.a >
/dev/nul 3.21s user 0.06s system 98% cpu 3.301 total
$ cd $WINXED_ROOT
# heat up benchmark (5x)
$ time ./winxed examples/hexdump.winxed /usr/lib/libc.a > /dev/null #
built against old parrot
./winxed examples/hexdump.winxed /usr/lib/libc.a > /dev/null 63.10s
user 8.54s system 99% cpu 1:11.87 total
$ export LD_PRELOAD=~/dev/parrot/core/blib/lib/libparrot.so # force
use of new parrot
# heat up benchmark (5x)
$ time ./winxed examples/hexdump.winxed /usr/lib/libc.a > /dev/null
./winxed examples/hexdump.winxed /usr/lib/libc.a > /dev/null 185.60s
user 8.79s system 99% cpu 3:16.33 total
I also ran callgrind for the md5 example. Performance is dominated by op bodies.
More information about the parrot-dev
mailing list