Skip to content

Commit ad251e7

Browse files
committed
Allow running 23.11-MR2-chopin with launchers
1 parent 485f193 commit ad251e7

File tree

6 files changed

+107
-19
lines changed

6 files changed

+107
-19
lines changed

compiler/ci/ci_common/benchmark-suites.libsonnet

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
run+: [
4242
self.benchmark_cmd + ["dacapo:*", "--"] + self.extra_vm_args
4343
],
44-
timelimit: "50:00",
44+
timelimit: "1:30:00",
4545
forks_batches:: 2,
4646
bench_forks_per_batch:: 3,
4747
forks_timelimit:: "3:00:00",

compiler/ci/ci_common/gate.jsonnet

+3
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@
5959
logs+: [
6060
"*/gcutils_heapdump_*.hprof.gz",
6161
],
62+
catch_files+: [
63+
"Report is located at: (?P<filename>.+\\.txt)"
64+
],
6265
targets: ["gate"],
6366
python_version: "3"
6467
},

compiler/mx.compiler/mx_compiler.py

+16-2
Original file line numberDiff line numberDiff line change
@@ -425,11 +425,25 @@ def _gate_dacapo(name, iterations, extraVMarguments=None, force_serial_gc=True,
425425
return
426426
vmargs = ['-XX:+UseSerialGC'] if force_serial_gc else []
427427
vmargs += ['-Xmx8g', '-XX:-UseCompressedOops', '-Djava.net.preferIPv4Stack=true'] + _compiler_error_options() + _remove_empty_entries(extraVMarguments, filter_gcs=force_serial_gc)
428-
args = ['-n', str(iterations), '--preserve']
428+
scratch_dir = os.path.abspath("./scratch")
429+
args = ['-n', str(iterations), '--preserve', '--scratch-directory', scratch_dir]
430+
431+
# pmd validation fails on Windows, see official dacapobench issue #165
432+
if name == 'pmd':
433+
args += ['--no-validation']
434+
429435
if threads is not None:
430436
args += ['-t', str(threads)]
431-
return _run_benchmark('dacapo', name, args, vmargs)
432437

438+
# catch `*-report.txt` if the benchmark fails
439+
try:
440+
return _run_benchmark('dacapo', name, args, vmargs)
441+
except BaseException as e:
442+
file = os.path.join(scratch_dir, f"{name}-report.txt")
443+
# not all benchmarks produce a report file
444+
if os.path.isfile(file):
445+
print("Report is located at: " + file)
446+
raise e
433447

434448
def jdk_includes_corba(jdk):
435449
# corba has been removed since JDK11 (http://openjdk.java.net/jeps/320)

sdk/mx.sdk/mx_sdk_benchmark.py

+23-5
Original file line numberDiff line numberDiff line change
@@ -296,19 +296,35 @@ def postprocessRunArgs(self, benchname, runArgs):
296296
iterations = iterations + int(self.getExtraIterationCount(iterations) * args.sf)
297297
return ["-n", str(iterations)] + otherArgs
298298

299+
def jarPath(self, benchmark):
300+
if self.version() == "23.11-MR2-chopin":
301+
return os.path.join(self.dataLocation(), "launchers", benchmark + ".jar")
302+
else:
303+
return self.daCapoPath()
304+
305+
# The directory that contains `stats`, `launchers`, `dat` and `jar`
306+
def dataLocation(self):
307+
if self.version() == "23.11-MR2-chopin":
308+
basePath = self.daCapoPath()
309+
return os.path.join(basePath, "dacapo-23.11-MR2-chopin")
310+
else:
311+
raise "data location is only supported for version 23.11-MR2-chopin"
312+
299313
def createCommandLineArgs(self, benchmarks, bmSuiteArgs):
300314
if benchmarks is None:
301315
raise RuntimeError(
302316
"Suite runs only a single benchmark.")
303317
if len(benchmarks) != 1:
304318
raise RuntimeError(
305319
"Suite runs only a single benchmark, got: {0}".format(benchmarks))
306-
runArgs = self.postprocessRunArgs(benchmarks[0], self.runArgs(bmSuiteArgs))
320+
321+
benchmark = benchmarks[0]
322+
runArgs = self.postprocessRunArgs(benchmark, self.runArgs(bmSuiteArgs))
307323
if runArgs is None:
308324
return None
309-
return (
310-
self.vmArgs(bmSuiteArgs) + ["-jar"] + [self.daCapoPath()] +
311-
[benchmarks[0]] + runArgs)
325+
326+
jarPath = self.jarPath(benchmark)
327+
return self.vmArgs(bmSuiteArgs) + ["-jar"] + [jarPath, benchmark] + runArgs
312328

313329
def benchmarkList(self, bmSuiteArgs):
314330
missing_sizes = set(self.daCapoIterations().keys()).difference(set(self.daCapoSizes().keys()))
@@ -455,7 +471,7 @@ def defaultSuiteVersion(self):
455471
return self.availableSuiteVersions()[-1]
456472

457473
def availableSuiteVersions(self):
458-
return ["9.12-bach", "9.12-MR1-bach", "9.12-MR1-git+2baec49"]
474+
return ["9.12-bach", "9.12-MR1-bach", "9.12-MR1-git+2baec49", "23.11-MR2-chopin"]
459475

460476
def workloadSize(self):
461477
return "default"
@@ -470,6 +486,8 @@ def daCapoLibraryName(self):
470486
return "DACAPO_MR1_BACH"
471487
elif self.version() == "9.12-MR1-git+2baec49": # commit from July 2018
472488
return "DACAPO_MR1_2baec49"
489+
elif self.version() == "23.11-MR2-chopin":
490+
return "DACAPO_23.11_MR2_chopin"
473491
else:
474492
return None
475493

sdk/mx.sdk/suite.py

+6
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,12 @@
301301
"digest" : "sha512:3707b0aee8b1f53828832a85d118981c9b0919c7c1f26dc86fd368d8092857a0b5b75cb5427fee791b0ea89bb7b60a66e2130f55a037c8b082235d3035d9e9cf",
302302
},
303303

304+
"DACAPO_23.11_MR2_chopin" : {
305+
"urls" : ["https://lafo.ssw.uni-linz.ac.at/pub/graal-external-deps/dacapo-23.11-MR2-chopin.zip"],
306+
"digest" : "sha512:1399c9a743d4a52202372d7a5acef7e5d90181b79194484056cb716ba0284224c9bd7a7620b6db3a7a3c4ccdb8427ee4843fca4d23e37c0b13ada6ce9f041b6f",
307+
"packedResource": True,
308+
},
309+
304310
"DACAPO_SCALA" : {
305311
"urls" : ["https://lafo.ssw.uni-linz.ac.at/pub/graal-external-deps/dacapo-scala-0.1.0-20120216.jar"],
306312
"digest" : "sha512:9a3908f3a0f2937bbc7edcd78f7e7e229bea8dee566d5f2d922bd4dc3c5b02cf97de294e479200372ff90bfbdf80e88dc7fc9fda9cb294088346e4a5ff28893e",

substratevm/mx.substratevm/mx_substratevm_benchmark.py

+58-11
Original file line numberDiff line numberDiff line change
@@ -572,10 +572,19 @@ def _empty_file():
572572
# 2. Native-image picks a different service provider than the JVM for javax.xml.transform.TransformerFactory.
573573
# We can simply remove the jar containing that provider as it is not required for the benchmark to run.
574574
'fop': [f"-Djava.util.logging.config.file={_empty_file()}",
575-
'--initialize-at-run-time=org.apache.fop.render.rtf.rtflib.rtfdoc.RtfList'],
575+
'--initialize-at-run-time=org.apache.fop.render.rtf.rtflib.rtfdoc.RtfList',
576+
'-H:+ForeignAPISupport'],
576577
'batik': []
577578
}
578579

580+
_DACAPO_EXTRA_IMAGE_RUN_ARGS = {
581+
'pmd': ['--no-validation'],
582+
# JDK21 ForeignAPISupport is broken --- disable `enableMemorySegments` for now
583+
'lusearch': ['-Dorg.apache.lucene.store.MMapDirectory.enableMemorySegments=false', '--no-validation'],
584+
'luindex': ['-Dorg.apache.lucene.store.MMapDirectory.enableMemorySegments=false', '--no-validation'],
585+
'fop': ['-Djava.home=' + os.environ['JAVA_HOME']]
586+
}
587+
579588
'''
580589
Benchmarks from DaCapo suite may require one or more zip archives from `dat` directory on the classpath.
581590
After the agent run we have all necessary resources (from `jar` and `dat` folders inside DaCapo fat jar).
@@ -642,15 +651,18 @@ def daCapoPath(self):
642651
return None
643652

644653
def availableSuiteVersions(self):
645-
# This version also ships a custom harness class to allow native image to find the entry point in the nested jar
646-
return ["9.12-MR1-git+2baec49"]
654+
# The version 9.12-MR1-git+2baec49 also ships a custom harness class to allow native image to find the entry point in the nested jar
655+
return ["9.12-MR1-git+2baec49", "23.11-MR2-chopin"]
647656

648657
def daCapoIterations(self):
649658
compiler_iterations = super(DaCapoNativeImageBenchmarkSuite, self).daCapoIterations()
650659
return {key: _daCapo_iterations[key] for key in compiler_iterations.keys() if key in _daCapo_iterations.keys()}
651660

652661
def benchmark_resources(self, benchmark):
653-
return _dacapo_resources[benchmark]
662+
if self.version() == "23.11-MR2-chopin":
663+
return []
664+
else:
665+
return _dacapo_resources[benchmark]
654666

655667
def run(self, benchmarks, bmSuiteArgs) -> mx_benchmark.DataPoints:
656668
return self.intercept_run(super(), benchmarks, bmSuiteArgs)
@@ -661,13 +673,43 @@ def extra_agent_run_arg(self, benchmark, args, image_run_args):
661673
return ['-n', '1'] + mx_sdk_benchmark.strip_args_with_number('-n', user_args)
662674

663675
def extra_profile_run_arg(self, benchmark, args, image_run_args, should_strip_run_args):
664-
user_args = super(DaCapoNativeImageBenchmarkSuite, self).extra_profile_run_arg(benchmark, args, image_run_args, should_strip_run_args)
676+
self.fixDataLocation()
677+
user_args = ["-Duser.home=" + str(Path.home())]
678+
user_args += super(DaCapoNativeImageBenchmarkSuite, self).extra_profile_run_arg(benchmark, args, image_run_args, should_strip_run_args)
679+
680+
if benchmark in _DACAPO_EXTRA_IMAGE_RUN_ARGS:
681+
user_args = user_args + _DACAPO_EXTRA_IMAGE_RUN_ARGS[benchmark]
682+
665683
# remove -n X argument from image run args
666684
if should_strip_run_args:
667685
return ['-n', '1'] + mx_sdk_benchmark.strip_args_with_number('-n', user_args)
668686
else:
669687
return user_args
670688

689+
def fixDataLocation(self):
690+
if self.version() == "23.11-MR2-chopin":
691+
print("Fixing data location...")
692+
# DaCapo can get data location either from the JAR path or "~/.dacapo-config.properties"
693+
# See official dacapobench issue #341
694+
dataLocation = self.dataLocation()
695+
configFilePath = os.path.join(Path.home(), ".dacapo-config.properties")
696+
with open(configFilePath, "w") as config:
697+
config.write(f"Data-Location={dataLocation}\n")
698+
699+
with open(configFilePath) as f:
700+
print("Reading " + configFilePath + ":")
701+
print("------")
702+
print(f.read())
703+
print("------")
704+
705+
def extra_run_arg(self, benchmark, args, image_run_args):
706+
self.fixDataLocation()
707+
run_args = ["-Duser.home=" + str(Path.home())]
708+
run_args += super(DaCapoNativeImageBenchmarkSuite, self).extra_run_arg(benchmark, args, image_run_args)
709+
if benchmark in _DACAPO_EXTRA_IMAGE_RUN_ARGS:
710+
run_args = run_args + _DACAPO_EXTRA_IMAGE_RUN_ARGS[benchmark]
711+
return run_args
712+
671713
def skip_agent_assertions(self, benchmark, args):
672714
default_args = _DACAPO_SKIP_AGENT_ASSERTIONS[benchmark] if benchmark in _DACAPO_SKIP_AGENT_ASSERTIONS else []
673715
user_args = super(DaCapoNativeImageBenchmarkSuite, self).skip_agent_assertions(benchmark, args)
@@ -688,15 +730,20 @@ def createCommandLineArgs(self, benchmarks, bmSuiteArgs):
688730
else:
689731
self.benchmark_name = benchmarks[0]
690732

691-
run_args = self.postprocessRunArgs(self.benchmarkName(), self.runArgs(bmSuiteArgs))
733+
benchmark = benchmarks[0]
734+
735+
run_args = self.postprocessRunArgs(benchmark, self.runArgs(bmSuiteArgs))
692736
vm_args = self.vmArgs(bmSuiteArgs)
693-
return ['-cp', self.create_classpath(self.benchmarkName())] + vm_args + ['-jar', self.daCapoPath()] + [self.benchmarkName()] + run_args
737+
return self.create_classpath(benchmark) + vm_args + ['-jar', self.jarPath(benchmark)] + [benchmark] + run_args
694738

695739
def create_classpath(self, benchmark):
696-
dacapo_extracted, dacapo_dat_resources, dacapo_nested_resources = self.create_dacapo_classpath(self.daCapoPath(), benchmark)
697-
dacapo_jars = super(DaCapoNativeImageBenchmarkSuite, self).collect_unique_dependencies(os.path.join(dacapo_extracted, 'jar'), benchmark, _daCapo_exclude_lib)
698-
cp = ':'.join([dacapo_extracted] + dacapo_jars + dacapo_dat_resources + dacapo_nested_resources)
699-
return cp
740+
if self.version() == "9.12-MR1-git+2baec49":
741+
dacapo_extracted, dacapo_dat_resources, dacapo_nested_resources = self.create_dacapo_classpath(self.daCapoPath(), benchmark)
742+
dacapo_jars = super(DaCapoNativeImageBenchmarkSuite, self).collect_unique_dependencies(os.path.join(dacapo_extracted, 'jar'), benchmark, _daCapo_exclude_lib)
743+
cp = ':'.join([dacapo_extracted] + dacapo_jars + dacapo_dat_resources + dacapo_nested_resources)
744+
return ["-cp", cp]
745+
else:
746+
return []
700747

701748
def successPatterns(self):
702749
return super().successPatterns() + SUCCESSFUL_STAGE_PATTERNS

0 commit comments

Comments
 (0)