Skip to content

Commit f264067

Browse files
committed
[GR-64574] Bytecode DSL: add guest VM config for mx benchmark.
PullRequest: graalpython/3769
2 parents 82f2aab + 03157f0 commit f264067

File tree

6 files changed

+105
-97
lines changed

6 files changed

+105
-97
lines changed

ci.jsonnet

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{ "overlay": "a242e9622be463c91c2cc034a1f2c1811316bc18" }
1+
{ "overlay": "ae41f079f9ce46ca5f0ce5a2443c27cab856e403" }
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
test.test_zipimport_support.ZipSupportTests.test_doctest_issue4197 @ linux-x86_64
21
test.test_zipimport_support.ZipSupportTests.test_doctest_main_issue4197 @ linux-x86_64
32
test.test_zipimport_support.ZipSupportTests.test_inspect_getsource_issue4223 @ linux-x86_64
43
test.test_zipimport_support.ZipSupportTests.test_pdb_issue4201 @ linux-x86_64

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/PythonContext.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1627,6 +1627,7 @@ public void initialize() {
16271627
}
16281628
releaseGil();
16291629
}
1630+
PythonOptions.checkBytecodeDSLEnv();
16301631
}
16311632

16321633
public void resetPerfCounter() {
@@ -1648,6 +1649,7 @@ public void patch(Env newEnv) {
16481649
} finally {
16491650
releaseGil();
16501651
}
1652+
PythonOptions.checkBytecodeDSLEnv();
16511653
}
16521654

16531655
private void importSiteIfForced() {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/PythonOptions.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,12 @@ private PythonOptions() {
9393
// no instances
9494
}
9595

96+
public static void checkBytecodeDSLEnv() {
97+
if (!ENABLE_BYTECODE_DSL_INTERPRETER && "true".equalsIgnoreCase(System.getenv("BYTECODE_DSL_INTERPRETER"))) {
98+
System.err.println("WARNING: found environment variable BYTECODE_DSL_INTERPRETER=true, but the python.EnableBytecodeDSLInterpreter Java property was not set.");
99+
}
100+
}
101+
96102
@Option(category = OptionCategory.EXPERT, help = "Set the home of Python. Equivalent of GRAAL_PYTHONHOME env variable. " +
97103
"Determines default values for the CoreHome, StdLibHome, SysBasePrefix, SysPrefix.", usageSyntax = "<path>", stability = OptionStability.STABLE) //
98104
public static final OptionKey<String> PythonHome = new OptionKey<>("");

mx.graalpython/mx_graalpython.py

Lines changed: 5 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
from pathlib import Path
4242
from textwrap import dedent
4343

44+
import mx_graalpython_benchmark
4445
import mx_graalpython_gradleproject
4546
import mx_urlrewrites
4647

@@ -55,7 +56,6 @@
5556

5657
import mx
5758
import mx_util
58-
import mx_benchmark
5959
import mx_gate
6060
import mx_native
6161
import mx_unittest
@@ -71,20 +71,8 @@
7171
from mx_graalpython_gradleproject import GradlePluginProject #pylint: disable=unused-import
7272

7373
from mx_gate import Task
74-
from mx_graalpython_bench_param import PATH_MESO, BENCHMARKS, WARMUP_BENCHMARKS, JAVA_DRIVER_BENCHMARKS, \
75-
HEAP_BENCHMARKS
76-
from mx_graalpython_benchmark import PythonBenchmarkSuite, python_vm_registry, CPythonVm, PyPyVm, JythonVm, \
77-
GraalPythonVm, \
78-
CONFIGURATION_DEFAULT, CONFIGURATION_SANDBOXED, CONFIGURATION_NATIVE, \
79-
CONFIGURATION_DEFAULT_MULTI, CONFIGURATION_SANDBOXED_MULTI, CONFIGURATION_NATIVE_MULTI, \
80-
CONFIGURATION_DEFAULT_MULTI_TIER, CONFIGURATION_NATIVE_MULTI_TIER, \
81-
PythonVmWarmupBenchmarkSuite, \
82-
CONFIGURATION_INTERPRETER, CONFIGURATION_INTERPRETER_MULTI, CONFIGURATION_NATIVE_INTERPRETER, \
83-
CONFIGURATION_NATIVE_INTERPRETER_MULTI, PythonJavaEmbeddingBenchmarkSuite, python_java_embedding_vm_registry, \
84-
GraalPythonJavaDriverVm, CONFIGURATION_JAVA_EMBEDDING_INTERPRETER_MULTI_SHARED, \
85-
CONFIGURATION_JAVA_EMBEDDING_INTERPRETER_MULTI, CONFIGURATION_JAVA_EMBEDDING_MULTI_SHARED, \
86-
CONFIGURATION_JAVA_EMBEDDING_MULTI, CONFIGURATION_PANAMA, PythonJMHDistMxBenchmarkSuite, \
87-
PythonHeapBenchmarkSuite
74+
from mx_graalpython_bench_param import PATH_MESO
75+
8876

8977
if not sys.modules.get("__main__"):
9078
# workaround for pdb++
@@ -2197,76 +2185,6 @@ def bytecode_dsl_build_args():
21972185
# post init
21982186
#
21992187
# ----------------------------------------------------------------------------------------------------------------------
2200-
def _register_vms(namespace):
2201-
# cpython
2202-
python_vm_registry.add_vm(CPythonVm(config_name=CONFIGURATION_DEFAULT), SUITE)
2203-
2204-
# pypy
2205-
python_vm_registry.add_vm(PyPyVm(config_name=CONFIGURATION_DEFAULT), SUITE)
2206-
2207-
# jython
2208-
python_vm_registry.add_vm(JythonVm(config_name=CONFIGURATION_DEFAULT), SUITE)
2209-
2210-
# graalpython
2211-
python_vm_registry.add_vm(GraalPythonVm(config_name=CONFIGURATION_DEFAULT), SUITE, 10)
2212-
python_vm_registry.add_vm(GraalPythonVm(config_name=CONFIGURATION_INTERPRETER, extra_polyglot_args=[
2213-
'--experimental-options', '--engine.Compilation=false'
2214-
]), SUITE, 10)
2215-
python_vm_registry.add_vm(GraalPythonVm(config_name=CONFIGURATION_DEFAULT_MULTI, extra_polyglot_args=[
2216-
'--experimental-options', '-multi-context',
2217-
]), SUITE, 10)
2218-
python_vm_registry.add_vm(GraalPythonVm(config_name=CONFIGURATION_INTERPRETER_MULTI, extra_polyglot_args=[
2219-
'--experimental-options', '-multi-context', '--engine.Compilation=false'
2220-
]), SUITE, 10)
2221-
python_vm_registry.add_vm(GraalPythonVm(config_name=CONFIGURATION_DEFAULT_MULTI_TIER, extra_polyglot_args=[
2222-
'--experimental-options', '--engine.MultiTier=true',
2223-
]), SUITE, 10)
2224-
python_vm_registry.add_vm(GraalPythonVm(config_name=CONFIGURATION_SANDBOXED, extra_polyglot_args=SANDBOXED_OPTIONS), SUITE, 10)
2225-
python_vm_registry.add_vm(GraalPythonVm(config_name=CONFIGURATION_NATIVE, extra_polyglot_args=[
2226-
]), SUITE, 10)
2227-
python_vm_registry.add_vm(GraalPythonVm(config_name=CONFIGURATION_NATIVE_INTERPRETER, extra_polyglot_args=[
2228-
'--experimental-options', '--engine.Compilation=false']), SUITE, 10)
2229-
python_vm_registry.add_vm(GraalPythonVm(config_name=CONFIGURATION_SANDBOXED_MULTI, extra_polyglot_args=[
2230-
'--experimental-options', '-multi-context'] + SANDBOXED_OPTIONS), SUITE, 10)
2231-
python_vm_registry.add_vm(GraalPythonVm(config_name=CONFIGURATION_NATIVE_MULTI, extra_polyglot_args=[
2232-
'--experimental-options', '-multi-context'
2233-
]), SUITE, 10)
2234-
python_vm_registry.add_vm(GraalPythonVm(config_name=CONFIGURATION_NATIVE_INTERPRETER_MULTI, extra_polyglot_args=[
2235-
'--experimental-options', '-multi-context', '--engine.Compilation=false'
2236-
]), SUITE, 10)
2237-
python_vm_registry.add_vm(GraalPythonVm(config_name=CONFIGURATION_NATIVE_MULTI_TIER, extra_polyglot_args=[
2238-
'--experimental-options', '--engine.MultiTier=true'
2239-
]), SUITE, 10)
2240-
python_vm_registry.add_vm(GraalPythonVm(config_name=CONFIGURATION_PANAMA, extra_polyglot_args=[
2241-
'--experimental-options', '--python.UsePanama=true'
2242-
]), SUITE, 10)
2243-
2244-
# java embedding driver
2245-
python_java_embedding_vm_registry.add_vm(
2246-
GraalPythonJavaDriverVm(config_name=CONFIGURATION_JAVA_EMBEDDING_MULTI,
2247-
extra_polyglot_args=['-multi-context']), SUITE, 10)
2248-
python_java_embedding_vm_registry.add_vm(
2249-
GraalPythonJavaDriverVm(config_name=CONFIGURATION_JAVA_EMBEDDING_MULTI_SHARED,
2250-
extra_polyglot_args=['-multi-context', '-shared-engine']), SUITE, 10)
2251-
python_java_embedding_vm_registry.add_vm(
2252-
GraalPythonJavaDriverVm(config_name=CONFIGURATION_JAVA_EMBEDDING_INTERPRETER_MULTI,
2253-
extra_polyglot_args=['-multi-context', '-interpreter']), SUITE, 10)
2254-
python_java_embedding_vm_registry.add_vm(
2255-
GraalPythonJavaDriverVm(config_name=CONFIGURATION_JAVA_EMBEDDING_INTERPRETER_MULTI_SHARED,
2256-
extra_polyglot_args=['-multi-context', '-interpreter', '-shared-engine']), SUITE, 10)
2257-
2258-
2259-
def _register_bench_suites(namespace):
2260-
for py_bench_suite in PythonBenchmarkSuite.get_benchmark_suites(BENCHMARKS):
2261-
mx_benchmark.add_bm_suite(py_bench_suite)
2262-
for py_bench_suite in PythonJavaEmbeddingBenchmarkSuite.get_benchmark_suites(JAVA_DRIVER_BENCHMARKS):
2263-
mx_benchmark.add_bm_suite(py_bench_suite)
2264-
for py_bench_suite in PythonVmWarmupBenchmarkSuite.get_benchmark_suites(WARMUP_BENCHMARKS):
2265-
mx_benchmark.add_bm_suite(py_bench_suite)
2266-
mx_benchmark.add_bm_suite(PythonJMHDistMxBenchmarkSuite())
2267-
for py_bench_suite in PythonHeapBenchmarkSuite.get_benchmark_suites(HEAP_BENCHMARKS):
2268-
mx_benchmark.add_bm_suite(py_bench_suite)
2269-
22702188

22712189
class CharsetFilteringPariticpant:
22722190
"""
@@ -2339,8 +2257,8 @@ def hardcoded_ver_is_behind_major_minor(m):
23392257

23402258
def mx_post_parse_cmd_line(namespace):
23412259
# all projects are now available at this time
2342-
_register_vms(namespace)
2343-
_register_bench_suites(namespace)
2260+
mx_graalpython_benchmark.register_vms(SUITE, SANDBOXED_OPTIONS)
2261+
mx_graalpython_benchmark.register_suites()
23442262
mx_graalpython_python_benchmarks.register_python_benchmarks()
23452263

23462264
for dist in mx.suite('graalpython').dists:

mx.graalpython/mx_graalpython_benchmark.py

Lines changed: 91 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737

3838
import mx
3939
import mx_benchmark
40-
import mx_graalpython
4140
from mx_benchmark import StdOutRule, java_vm_registry, Vm, GuestVm, VmBenchmarkSuite, AveragingBenchmarkMixin
4241
from mx_graalpython_bench_param import HARNESS_PATH
4342

@@ -68,13 +67,17 @@
6867

6968
PYTHON_VM_REGISTRY_NAME = "Python"
7069
CONFIGURATION_DEFAULT = "default"
70+
CONFIGURATION_DEFAULT_BC_DSL = "default-bc-dsl"
7171
CONFIGURATION_INTERPRETER = "interpreter"
72+
CONFIGURATION_INTERPRETER_BC_DSL = "interpreter-bc-dsl"
7273
CONFIGURATION_NATIVE_INTERPRETER = "native-interpreter"
74+
CONFIGURATION_NATIVE_INTERPRETER_BC_DSL = "native-interpreter-bc-dsl"
7375
CONFIGURATION_DEFAULT_MULTI = "default-multi"
7476
CONFIGURATION_INTERPRETER_MULTI = "interpreter-multi"
7577
CONFIGURATION_NATIVE_INTERPRETER_MULTI = "native-interpreter-multi"
7678
CONFIGURATION_DEFAULT_MULTI_TIER = "default-multi-tier"
7779
CONFIGURATION_NATIVE = "native"
80+
CONFIGURATION_NATIVE_BC_DSL = "native-bc-dsl"
7881
CONFIGURATION_NATIVE_MULTI = "native-multi"
7982
CONFIGURATION_NATIVE_MULTI_TIER = "native-multi-tier"
8083
CONFIGURATION_SANDBOXED = "sandboxed"
@@ -363,18 +366,19 @@ def _remove_vm_prefix(argument):
363366
else:
364367
return argument
365368

369+
@staticmethod
370+
def _remove_vm_prefix_for_all(arguments):
371+
return [GraalPythonVmBase._remove_vm_prefix(x) for x in arguments]
372+
366373
def run(self, cwd, args):
367374
extra_polyglot_args = self.get_extra_polyglot_args()
368375

369-
if mx_graalpython.BYTECODE_DSL_INTERPRETER:
370-
args.insert(0, "--vm.Dpython.EnableBytecodeDSLInterpreter=true")
371-
372376
host_vm = self.host_vm()
373377
if hasattr(host_vm, 'run_lang'): # this is a full GraalVM build
374378
return self.run_in_graalvm(cwd, args, extra_polyglot_args, host_vm)
375379

376380
# Otherwise, we're running from the source tree
377-
args = [self._remove_vm_prefix(x) for x in args]
381+
args = self._remove_vm_prefix_for_all(args)
378382
truffle_options = [
379383
# "-Dpolyglot.engine.CompilationExceptionsAreFatal=true"
380384
]
@@ -394,7 +398,7 @@ def run(self, cwd, args):
394398

395399
vm_args = mx.get_runtime_jvm_args(dists, cp_suffix=self._cp_suffix, cp_prefix=self._cp_prefix)
396400
if isinstance(self._extra_vm_args, list):
397-
vm_args += self._extra_vm_args
401+
vm_args += self._remove_vm_prefix_for_all(self._extra_vm_args)
398402
vm_args += [
399403
"-Dorg.graalvm.language.python.home=%s" % mx.dependency("GRAALPYTHON_GRAALVM_SUPPORT").get_output(),
400404
self.launcher_class(),
@@ -408,7 +412,18 @@ def run(self, cwd, args):
408412
if not self._env:
409413
self._env = dict()
410414
with environ(self._env):
411-
return host_vm.run(cwd, cmd)
415+
return self._validate_output(*host_vm.run(cwd, cmd))
416+
417+
def is_bytecode_dsl_config(self):
418+
return self._extra_vm_args and '--vm.Dpython.EnableBytecodeDSLInterpreter=true' in self._extra_vm_args
419+
420+
def _validate_output(self, code, out, dims):
421+
is_bytecode_dsl_config = self.is_bytecode_dsl_config()
422+
if code == 0 and not f"using bytecode DSL interpreter: {is_bytecode_dsl_config}" in out:
423+
print(f"ERROR: host VM config does not match what the the harness reported. "
424+
f"Expected Bytecode DSL interpreter = {is_bytecode_dsl_config}. Harness output:\n{out}", file=sys.stderr)
425+
return 1, out, dims
426+
return code, out, dims
412427

413428
def name(self):
414429
return VM_NAME_GRAALPYTHON
@@ -435,13 +450,20 @@ def launcher_class(self):
435450
from mx_graalpython import GRAALPYTHON_MAIN_CLASS
436451
return GRAALPYTHON_MAIN_CLASS
437452

453+
def run(self, cwd, args):
454+
if os.environ.get('BYTECODE_DSL_INTERPRETER', '').lower() == 'true' and not self.is_bytecode_dsl_config():
455+
print("Found environment variable BYTECODE_DSL_INTERPRETER, but the guest vm config is not Bytecode DSL config.")
456+
print("Did you want to use, e.g., `mx benchmark ... -- --host-vm-config=default-bc-dsl`?")
457+
sys.exit(1)
458+
return super().run(cwd, args)
459+
438460
def run_in_graalvm(self, cwd, args, extra_polyglot_args, host_vm):
439461
with environ(self._env or {}):
440462
cp = self.get_classpath()
441463
if len(cp) > 0:
442464
extra_polyglot_args.append("--vm.classpath=" + ":".join(cp))
443465
launcher_name = 'graalpy'
444-
return host_vm.run_launcher(launcher_name, extra_polyglot_args + args, cwd)
466+
return self._validate_output(*host_vm.run_launcher(launcher_name, extra_polyglot_args + args, cwd))
445467

446468
def get_extra_polyglot_args(self):
447469
return ["--experimental-options", "-snapshot-startup", "--python.MaxNativeMemory=%s" % (2**34)] + self._extra_polyglot_args
@@ -1109,3 +1131,64 @@ def get_benchmark_suites(cls, benchmarks):
11091131
assert isinstance(benchmarks, dict), "benchmarks must be a dict: {suite: [path, {bench: args, ... }], ...}"
11101132
return [cls(suite_name, suite_info[0], suite_info[1])
11111133
for suite_name, suite_info in benchmarks.items()]
1134+
1135+
1136+
def register_vms(suite, sandboxed_options):
1137+
# Other Python VMs:
1138+
python_vm_registry.add_vm(CPythonVm(config_name=CONFIGURATION_DEFAULT), suite)
1139+
python_vm_registry.add_vm(PyPyVm(config_name=CONFIGURATION_DEFAULT), suite)
1140+
python_vm_registry.add_vm(JythonVm(config_name=CONFIGURATION_DEFAULT), suite)
1141+
1142+
def add_graalpy_vm(name, *extra_polyglot_args, extra_vm_args=None):
1143+
python_vm_registry.add_vm(GraalPythonVm(config_name=name, extra_vm_args=extra_vm_args, extra_polyglot_args=extra_polyglot_args), suite, 10)
1144+
1145+
def add_graalpy_bc_dsl_vm(name, *extra_polyglot_args):
1146+
assert 'bc-dsl' in name
1147+
add_graalpy_vm(name, extra_vm_args=['--vm.Dpython.EnableBytecodeDSLInterpreter=true'], *extra_polyglot_args)
1148+
1149+
# GraalPy VMs:
1150+
add_graalpy_vm(CONFIGURATION_DEFAULT)
1151+
add_graalpy_bc_dsl_vm(CONFIGURATION_DEFAULT_BC_DSL)
1152+
add_graalpy_vm(CONFIGURATION_INTERPRETER, '--experimental-options', '--engine.Compilation=false')
1153+
add_graalpy_bc_dsl_vm(CONFIGURATION_INTERPRETER_BC_DSL, '--experimental-options', '--engine.Compilation=false')
1154+
add_graalpy_vm(CONFIGURATION_DEFAULT_MULTI, '--experimental-options', '-multi-context')
1155+
add_graalpy_vm(CONFIGURATION_INTERPRETER_MULTI, '--experimental-options', '-multi-context', '--engine.Compilation=false')
1156+
add_graalpy_vm(CONFIGURATION_DEFAULT_MULTI_TIER, '--experimental-options', '--engine.MultiTier=true')
1157+
add_graalpy_vm(CONFIGURATION_SANDBOXED, *sandboxed_options)
1158+
add_graalpy_vm(CONFIGURATION_NATIVE)
1159+
add_graalpy_bc_dsl_vm(CONFIGURATION_NATIVE_BC_DSL)
1160+
add_graalpy_vm(CONFIGURATION_NATIVE_INTERPRETER, '--experimental-options', '--engine.Compilation=false')
1161+
add_graalpy_bc_dsl_vm(CONFIGURATION_NATIVE_INTERPRETER_BC_DSL, '--experimental-options', '--engine.Compilation=false')
1162+
add_graalpy_vm(CONFIGURATION_SANDBOXED_MULTI, '--experimental-options', '-multi-context', *sandboxed_options)
1163+
add_graalpy_vm(CONFIGURATION_NATIVE_MULTI, '--experimental-options', '-multi-context')
1164+
add_graalpy_vm(CONFIGURATION_NATIVE_INTERPRETER_MULTI, '--experimental-options', '-multi-context', '--engine.Compilation=false')
1165+
add_graalpy_vm(CONFIGURATION_NATIVE_MULTI_TIER, '--experimental-options', '--engine.MultiTier=true')
1166+
add_graalpy_vm(CONFIGURATION_PANAMA, '--experimental-options', '--python.UsePanama=true')
1167+
1168+
# java embedding driver
1169+
python_java_embedding_vm_registry.add_vm(
1170+
GraalPythonJavaDriverVm(config_name=CONFIGURATION_JAVA_EMBEDDING_MULTI,
1171+
extra_polyglot_args=['-multi-context']), suite, 10)
1172+
python_java_embedding_vm_registry.add_vm(
1173+
GraalPythonJavaDriverVm(config_name=CONFIGURATION_JAVA_EMBEDDING_MULTI_SHARED,
1174+
extra_polyglot_args=['-multi-context', '-shared-engine']), suite, 10)
1175+
python_java_embedding_vm_registry.add_vm(
1176+
GraalPythonJavaDriverVm(config_name=CONFIGURATION_JAVA_EMBEDDING_INTERPRETER_MULTI,
1177+
extra_polyglot_args=['-multi-context', '-interpreter']), suite, 10)
1178+
python_java_embedding_vm_registry.add_vm(
1179+
GraalPythonJavaDriverVm(config_name=CONFIGURATION_JAVA_EMBEDDING_INTERPRETER_MULTI_SHARED,
1180+
extra_polyglot_args=['-multi-context', '-interpreter', '-shared-engine']), suite, 10)
1181+
1182+
1183+
def register_suites():
1184+
from mx_graalpython_bench_param import BENCHMARKS, JAVA_DRIVER_BENCHMARKS, WARMUP_BENCHMARKS, HEAP_BENCHMARKS
1185+
1186+
for py_bench_suite in PythonBenchmarkSuite.get_benchmark_suites(BENCHMARKS):
1187+
mx_benchmark.add_bm_suite(py_bench_suite)
1188+
for py_bench_suite in PythonJavaEmbeddingBenchmarkSuite.get_benchmark_suites(JAVA_DRIVER_BENCHMARKS):
1189+
mx_benchmark.add_bm_suite(py_bench_suite)
1190+
for py_bench_suite in PythonVmWarmupBenchmarkSuite.get_benchmark_suites(WARMUP_BENCHMARKS):
1191+
mx_benchmark.add_bm_suite(py_bench_suite)
1192+
mx_benchmark.add_bm_suite(PythonJMHDistMxBenchmarkSuite())
1193+
for py_bench_suite in PythonHeapBenchmarkSuite.get_benchmark_suites(HEAP_BENCHMARKS):
1194+
mx_benchmark.add_bm_suite(py_bench_suite)

0 commit comments

Comments
 (0)