Open
Description
During some performance evaluation, I have noticed that our generational GC plans (GenCopy
and GenImmix
) are slower than their non-generational counterparts (SemiSpace
and Immix
). Immix
has the best GC time as well as overall benchmark execution time. This is quite alarming as generational garbage collection should improve the STW time instead of increase it.
Results
Table 1: STW time for different MMTk GC plans
-- | GenCopy (core_3dbdd7ae-jdk_3cc0d71) | GenImmix (core_3dbdd7ae-jdk_3cc0d71) | Immix (core_3dbdd7ae-jdk_3cc0d71) | MarkCompact (core_3dbdd7ae-jdk_3cc0d71) | NoGC (core_3dbdd7ae-jdk_3cc0d71) | SemiSpace (core_3dbdd7ae-jdk_3cc0d71) |
---|---|---|---|---|---|---|
avrora | 4.535 -1.83%, +1.86% | 3.118 -8.83%, +8.86% | 1.000 -1.79%, +1.82% | 3.774 -2.12%, +2.15% | 0.000 | 4.288 -1.99%, +2.02% |
cassandra | 2.698 -3.38%, +3.49% | 1.936 -3.40%, +3.51% | 1.000 -3.28%, +3.39% | 5.089 -2.38%, +2.49% | 0.000 | 2.934 -2.54%, +2.65% |
eclipse | 7.899 -0.47%, +0.48% | 6.293 -3.46%, +3.47% | 1.000 -0.49%, +0.49% | 9.403 -0.58%, +0.58% | 0.000 | 8.122 -0.43%, +0.43% |
fop | 2.710 -2.24%, +2.33% | 3.491 -9.58%, +9.67% | 1.000 -2.98%, +3.07% | 4.497 -2.09%, +2.19% | 0.000 | 2.540 -2.14%, +2.24% |
h2o | 4.539 -1.34%, +1.36% | 2.381 -2.07%, +2.08% | 1.000 -1.23%, +1.24% | 7.424 -1.16%, +1.18% | 0.000 | 3.991 -1.44%, +1.45% |
jython | * | 1.564 -0.76%, +0.76% | 1.000 -0.46%, +0.46% | 5.559 -0.34%, +0.34% | 0.000 | 2.921 -0.41%, +0.41% |
luindex | 7.452 -0.83%, +0.84% | * | 1.000 -0.73%, +0.73% | 5.258 -0.52%, +0.52% | 0.000 | 6.639 -0.72%, +0.73% |
lusearch | 1.944 -2.94%, +3.12% | 1.281 -2.96%, +3.14% | 1.000 -4.17%, +4.35% | 5.877 -2.93%, +3.12% | * | 2.269 -3.01%, +3.19% |
pmd | * | * | 1.000 -0.81%, +0.82% | 21.066 -0.58%, +0.59% | 0.000 | 1.461 -0.64%, +0.65% |
sunflow | 2.913 -0.87%, +0.89% | 2.949 -0.96%, +0.97% | 1.000 -1.13%, +1.15% | 13.042 -0.82%, +0.83% | 0.000 | 1.933 -0.84%, +0.86% |
tomcat | 2.104 -7.33%, +8.58% | 1.425 -7.33%, +8.59% | 1.000 -10.60%, +11.86% | 4.735 -7.32%, +8.58% | 0.000 | 2.616 -7.32%, +8.57% |
zxing | 5.492 -2.66%, +2.74% | 4.487 -10.90%, +10.99% | 1.000 -2.88%, +2.96% | 14.138 -2.08%, +2.17% | 0.000 | 4.616 -2.10%, +2.18% |
min | 2.104 | 1.425 | 1.000 | 3.774 | 0.000 | 1.933 |
max | 7.899 | 6.293 | 1.000 | 14.138 | 0.000 | 8.122 |
mean | 4.111 | 3.260 | 1.000 | 7.763 | 0.000 | 3.880 |
geomean | 3.761 | 2.964 | 1.000 | 6.921 | 0.000 | 3.531 |
Note the geomean (emphasis mine) for the generational plans in comparison to the non-generational plans.
Revisions used
mmtk-core: 3dbdd7ae
+ feature perf_counter
mmtk-openjdk: 3cc0d71
openjdk: ca90b43f0f5
DaCapo Chopin: f480064
Benchmark results were gathered on an i9-9900K Coffee Lake machine.