wks@luna ~/o/dacapo> /usr/lib/jvm/java-11-openjdk/bin/java -jar dacapo-2006-10-MR2.jar bloat
===== DaCapo bloat starting =====
java.lang.RuntimeException: Class not found: java/lang/Object
java.lang.RuntimeException: Class not found: java/lang/Object
at EDU.purdue.cs.bloat.editor.ClassHierarchy.addClass(ClassHierarchy.java:386)
at EDU.purdue.cs.bloat.editor.ClassHierarchy.addClassNamed(ClassHierarchy.java:116)
at EDU.purdue.cs.bloat.editor.ClassHierarchy.getExtendsNode(ClassHierarchy.java:308)
at EDU.purdue.cs.bloat.editor.ClassHierarchy.addClass(ClassHierarchy.java:401)
at EDU.purdue.cs.bloat.editor.ClassHierarchy.addClassNamed(ClassHierarchy.java:116)
at EDU.purdue.cs.bloat.context.PersistentBloatContext.addClasses(PersistentBloatContext.java:116)
at EDU.purdue.cs.bloat.context.CachingBloatContext.<init>(CachingBloatContext.java:70)
at EDU.purdue.cs.bloat.optimize.Main.main(Main.java:413)
at dacapo.bloat.BloatHarness.iterate(BloatHarness.java:25)
at dacapo.Benchmark.run(Benchmark.java:126)
at dacapo.TestHarness.runBenchmark(TestHarness.java:302)
at dacapo.TestHarness.main(TestHarness.java:242)
at Harness.main(Harness.java:5)
wks@luna ~/o/dacapo [255]> /usr/lib/jvm/java-11-openjdk/bin/java -jar dacapo-2006-10-MR2.jar jython
*sys-package-mgr*: processing new jar, '/home/wks/opt/dacapo/dacapo-2006-10-MR2.jar'
===== DaCapo jython starting =====
Traceback (innermost last):
File "./scratch/jython/pybench/pybench.py", line 38, in ?
File "/home/wks/opt/dacapo/./scratch/jython/pybench/CommandLine.py", line 130, in ?
AttributeError: class 'org.python.modules.os' has no attribute 'path'
They are likely due to the API change between Java 8 and Java 11.
sunflow has been failing on all versions of OpenJDK with the same error:
wks@luna ~/o/dacapo [255]> /usr/lib/jvm/java-8-openjdk/bin/java -jar dacapo-2006-10-MR2.jar sunflow
java.lang.ClassNotFoundException: dacapo.sunflow.SunflowHarness
java.lang.ClassNotFoundException: dacapo.sunflow.SunflowHarness
at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at dacapo.TestHarness.findClass(TestHarness.java:414)
at dacapo.TestHarness.main(TestHarness.java:241)
at Harness.main(Harness.java:5)
and a slightly different message in JikesRVM:
wks@luna ~/o/dacapo [255]> setarch -R ~/projects/mmtk-github/jikesrvm/dist/RBaseBaseSemiSpace_x86_64_m32-linux/rvm -Xm{s,x}75M -jar dacapo-2006-10-MR2.jar sunflow
[2024-10-30T06:52:46Z INFO mmtk::memory_manager] Initialized MMTk with SemiSpace (FixedHeapSize(78643200))
java.lang.ClassNotFoundException: dacapo.sunflow.SunflowHarness not found in SystemAppCL
java.lang.ClassNotFoundException: dacapo.sunflow.SunflowHarness not found in SystemAppCL
at java.net.URLClassLoader.findClass(URLClassLoader.java:531)
at java.lang.ClassLoader.loadClass(ClassLoader.java:341)
at java.lang.ClassLoader.loadClass(ClassLoader.java:293)
at org.jikesrvm.classloader.TypeReference.resolveInternal(TypeReference.java:815)
at org.jikesrvm.classloader.TypeReference.resolve(TypeReference.java:803)
at java.lang.Class.forNameInternal(Class.java:809)
at java.lang.Class.forName(Class.java:768)
at dacapo.TestHarness.findClass(TestHarness.java:414)
at dacapo.TestHarness.main(TestHarness.java:241)
at Harness.main(Harness.java:5)
Since DaCapo 2006 was released decades ago, it is unsurprising that some benchmarks cannot run on modern JVMs.
For OpenJDK, it's better to switch to a new DaCapo version, such as Chopin, because it uses modern workloads that are more suitable for modern JVMs.
We should also mark failing tests red on the dashboard so that it will clear indicate that there is a failure.
TL;DR: We should
As seen in https://www.mmtk.io/ci-perf-result/, some benchmarks have always been failing. Those include
bloat
,jython
andsunflow
.bloat
andjython
can run normally on OpenJDK 8But they will fail on OpenJDK 11
They are likely due to the API change between Java 8 and Java 11.
sunflow
has been failing on all versions of OpenJDK with the same error:and a slightly different message in JikesRVM:
Since DaCapo 2006 was released decades ago, it is unsurprising that some benchmarks cannot run on modern JVMs.
For OpenJDK, it's better to switch to a new DaCapo version, such as Chopin, because it uses modern workloads that are more suitable for modern JVMs.
We should also mark failing tests red on the dashboard so that it will clear indicate that there is a failure.