def register_graalvm_vms(): default_host_vm_name = mx_sdk_vm_impl.graalvm_dist_name().lower().replace('_', '-') host_vm_names = ([default_host_vm_name.replace('-java8', '')] if '-java8' in default_host_vm_name else []) + [default_host_vm_name] for host_vm_name in host_vm_names: for config_name, java_args, launcher_args, priority in mx_sdk_vm.get_graalvm_hostvm_configs(): mx_benchmark.java_vm_registry.add_vm(GraalVm(host_vm_name, config_name, java_args, launcher_args), _suite, priority) if mx_sdk_vm_impl.has_component('svm'): _native_image_vm_registry.add_vm(NativeImageBuildVm(host_vm_name, 'default', [], []), _suite, 10) _gu_vm_registry.add_vm(GuVm(host_vm_name, 'default', [], []), _suite, 10) # We support only EE and CE configuration for native-image benchmarks for short_name, config_suffix in [('niee', 'ee'), ('ni', 'ce')]: if any(component.short_name == short_name for component in mx_sdk_vm_impl.registered_graalvm_components(stage1=False)): mx_benchmark.add_java_vm(NativeImageVM('native-image', 'default-' + config_suffix, None, None, 0, False, False, False), _suite, 10) mx_benchmark.add_java_vm(NativeImageVM('native-image', 'llvm-' + config_suffix, None, None, 0, False, False, False, True), _suite, 10) break # Add VMs for libgraal if mx_sdk_vm_impl.has_component('LibGraal'): libgraal_location = mx_sdk_vm_impl.get_native_image_locations('LibGraal', 'jvmcicompiler') if libgraal_location is not None: import mx_graal_benchmark mx_graal_benchmark.build_jvmci_vm_variants('server', 'graal-core-libgraal', ['-server', '-XX:+EnableJVMCI', '-Dgraal.CompilerConfiguration=community', '-Djvmci.Compiler=graal', '-XX:+UseJVMCINativeLibrary', '-XX:JVMCILibPath=' + dirname(libgraal_location)], mx_graal_benchmark._graal_variants, suite=_suite, priority=15, hosted=False)
def build_jvmci_vm_variants(raw_name, raw_config_name, extra_args, variants, include_default=True, suite=None, priority=0, hosted=True): prefixes = [('', ['-XX:+UseJVMCICompiler'])] if hosted: prefixes.append(('hosted-', ['-XX:-UseJVMCICompiler'])) for prefix, args in prefixes: extended_raw_config_name = prefix + raw_config_name extended_extra_args = extra_args + args if include_default: mx_benchmark.add_java_vm( JvmciJdkVm(raw_name, extended_raw_config_name, extended_extra_args), suite, priority) for variant in variants: if len(variant) == 2: var_name, var_args = variant var_priority = priority else: var_name, var_args, var_priority = variant mx_benchmark.add_java_vm( JvmciJdkVm(raw_name, extended_raw_config_name + '-' + var_name, extended_extra_args + var_args), suite, var_priority)
def build_jvmci_vm_variants(raw_name, raw_config_name, extra_args, variants, include_default=True, suite=None, priority=0, hosted=True): prefixes = [('', ['-XX:+UseJVMCICompiler'])] if hosted: prefixes.append(('hosted-', ['-XX:-UseJVMCICompiler'])) for prefix, args in prefixes: extended_raw_config_name = prefix + raw_config_name extended_extra_args = extra_args + args if include_default: mx_benchmark.add_java_vm( JvmciJdkVm(raw_name, extended_raw_config_name, extended_extra_args), suite, priority) for variant in variants: compiler_config = None if len(variant) == 2: var_name, var_args = variant var_priority = priority elif len(variant) == 3: var_name, var_args, var_priority = variant elif len(variant) == 4: var_name, var_args, var_priority, compiler_config = variant else: raise TypeError("unexpected tuple size for jvmci variant {} (size must be <= 4)".format(variant)) variant_args = extended_extra_args + var_args if compiler_config is not None: variant_args = add_or_replace_arg('-Dgraal.CompilerConfiguration', compiler_config, variant_args) mx_benchmark.add_java_vm( JvmciJdkVm(raw_name, extended_raw_config_name + '-' + var_name, variant_args), suite, var_priority)
def build_jvmci_vm_variants(raw_name, raw_config_name, extra_args, variants, include_default=True, suite=None, priority=0): if include_default: mx_benchmark.add_java_vm(JvmciJdkVm(raw_name, raw_config_name, extra_args), suite, priority) for variant in variants: if len(variant) == 2: var_name, var_args = variant var_priority = priority else: var_name, var_args, var_priority = variant mx_benchmark.add_java_vm(JvmciJdkVm(raw_name, raw_config_name + '-' + var_name, extra_args + var_args), suite, var_priority)
def build_jvmci_vm_variants(raw_name, raw_config_name, extra_args, variants, include_default=True): if include_default: mx_benchmark.add_java_vm( JvmciJdkVm(raw_name, raw_config_name, extra_args)) for (var_name, var_args) in variants: mx_benchmark.add_java_vm( JvmciJdkVm(raw_name, raw_config_name + '-' + var_name, extra_args + var_args))
def _asv_benchmark(args): """Run asv benchmark suite.""" mxASVBenchmarkArgs, bmSuiteArgs = mx_benchmark.splitArgs(args, "--") if not _mx_graal and not mx_benchmark.java_vm_registry._vms: mx_benchmark.add_java_vm(mx_benchmark.DefaultJavaVm("server", "default")) if not bmSuiteArgs: if _mx_graal: bmSuiteArgs = ['--jvm-config', 'graal-core', '--jvm', 'server'] else: bmSuiteArgs = ['--jvm-config', 'default', '--jvm', 'server'] return _asv_benchmark_executor.asv_benchmark(mxASVBenchmarkArgs, bmSuiteArgs)
def register_graalvm_vms(): graalvm_hostvm_name = mx_vm.graalvm_dist_name().lower().replace('_', '-') for config_name, java_args, launcher_args, priority in mx_sdk.graalvm_hostvm_configs: mx_benchmark.java_vm_registry.add_vm( GraalVm(graalvm_hostvm_name, config_name, java_args, launcher_args), _suite, priority) if mx_vm.has_component('svm', fatalIfMissing=False): _native_image_vm_registry.add_vm( NativeImageBuildVm(graalvm_hostvm_name, 'default', [], []), _suite, 10) _gu_vm_registry.add_vm(GuVm(graalvm_hostvm_name, 'default', [], []), _suite, 10) mx_benchmark.add_java_vm( NativeImageVM('native-image', 'default', None, None, 0, False), _suite, 10) mx_benchmark.add_java_vm( NativeImageVM('native-image', 'pgo', None, None, 1, False), _suite, 10) mx_benchmark.add_java_vm( NativeImageVM('native-image', 'pgo-hotspot', None, None, 0, True), _suite, 10) # Add VMs for libgraal if mx_vm.has_component('LibGraal', fatalIfMissing=False): libgraal_location = mx_vm.get_native_image_locations( 'LibGraal', 'jvmcicompiler') if libgraal_location is not None: import mx_graal_benchmark mx_graal_benchmark.build_jvmci_vm_variants( 'server', 'graal-core-libgraal', [ '-server', '-XX:+EnableJVMCI', '-Dgraal.CompilerConfiguration=community', '-Djvmci.Compiler=graal', '-XX:+UseJVMCINativeLibrary', '-XX:JVMCILibPath=' + dirname(libgraal_location) ], mx_graal_benchmark._graal_variants, suite=_suite, priority=15, hosted=False)
"guest-vm-config": "none" } def post_process_command_line_args(self, args): return self.extra_args + args def run_java(self, args, out=None, err=None, cwd=None, nonZeroIsFatal=False): tag = mx.get_jdk_option().tag if tag and tag != mx_graal_core._JVMCI_JDK_TAG: mx.abort("The '{0}/{1}' VM requires '--jdk={2}'".format( self.name(), self.config_name(), mx_graal_core._JVMCI_JDK_TAG)) mx.get_jdk(tag=mx_graal_core._JVMCI_JDK_TAG).run_java( args, out=out, err=out, cwd=cwd, nonZeroIsFatal=False) mx_benchmark.add_java_vm(JvmciJdkVm('server', 'default', ['-server', '-XX:-EnableJVMCI'])) mx_benchmark.add_java_vm(JvmciJdkVm('client', 'default', ['-client', '-XX:-EnableJVMCI'])) mx_benchmark.add_java_vm(JvmciJdkVm('server', 'hosted', ['-server', '-XX:+EnableJVMCI'])) mx_benchmark.add_java_vm(JvmciJdkVm('client', 'hosted', ['-client', '-XX:+EnableJVMCI'])) mx_benchmark.add_java_vm(JvmciJdkVm('server', 'graal-core', ['-server', '-XX:+EnableJVMCI', '-XX:+UseJVMCICompiler', '-Djvmci.Compiler=graal'])) mx_benchmark.add_java_vm(JvmciJdkVm('server', 'graal-core-tracera', ['-server', '-XX:+EnableJVMCI', '-XX:+UseJVMCICompiler', '-Djvmci.Compiler=graal', '-Dgraal.TraceRA=true'])) class TimingBenchmarkMixin(object): debug_values_file = 'debug-values.csv' name_re = re.compile(r"(?P<name>GraalCompiler|BackEnd|FrontEnd|LIRPhaseTime_\w+)_Accm") def vmArgs(self, bmSuiteArgs): vmArgs = ['-Dgraal.Time=GraalCompiler,BackEnd,FrontEnd', '-Dgraal.DebugValueHumanReadable=false', '-Dgraal.DebugValueSummary=Complete', '-Dgraal.DebugValueFile=' + TimingBenchmarkMixin.debug_values_file] + super(TimingBenchmarkMixin, self).vmArgs(bmSuiteArgs)
def config_name(self): return self.raw_config_name def post_process_command_line_args(self, args): return self.extra_args + args def run_java(self, args, out=None, err=None, cwd=None, nonZeroIsFatal=False): tag = mx.get_jdk_option().tag if tag and tag != mx_graal_core._JVMCI_JDK_TAG: mx.abort("The '{0}/{1}' VM requires '--jdk={2}'".format( self.name(), self.config_name(), mx_graal_core._JVMCI_JDK_TAG)) mx.get_jdk(tag=mx_graal_core._JVMCI_JDK_TAG).run_java( args, out=out, err=out, cwd=cwd, nonZeroIsFatal=False) mx_benchmark.add_java_vm(JvmciJdkVm('server', 'default', ['-server', '-XX:-EnableJVMCI']), _suite, 2) mx_benchmark.add_java_vm(JvmciJdkVm('server', 'hosted', ['-server', '-XX:+EnableJVMCI']), _suite, 3) def build_jvmci_vm_variants(raw_name, raw_config_name, extra_args, variants, include_default=True, suite=None, priority=0): if include_default: mx_benchmark.add_java_vm(JvmciJdkVm(raw_name, raw_config_name, extra_args), suite, priority) for variant in variants: if len(variant) == 2: var_name, var_args = variant var_priority = priority else: var_name, var_args, var_priority = variant mx_benchmark.add_java_vm(JvmciJdkVm(raw_name, raw_config_name + '-' + var_name, extra_args + var_args), suite, var_priority) _graal_variants = [
def build_jvmci_vm_variants(raw_name, raw_config_name, extra_args, variants, include_default=True): if include_default: mx_benchmark.add_java_vm(JvmciJdkVm(raw_name, raw_config_name, extra_args)) for (var_name, var_args) in variants: mx_benchmark.add_java_vm(JvmciJdkVm(raw_name, raw_config_name + '-' + var_name, extra_args + var_args))
"guest-vm-config": "none" } def post_process_command_line_args(self, args): return self.extra_args + args def run_java(self, args, out=None, err=None, cwd=None, nonZeroIsFatal=False): tag = mx.get_jdk_option().tag if tag and tag != mx_graal_core._JVMCI_JDK_TAG: mx.abort("The '{0}/{1}' VM requires '--jdk={2}'".format( self.name(), self.config_name(), mx_graal_core._JVMCI_JDK_TAG)) mx.get_jdk(tag=mx_graal_core._JVMCI_JDK_TAG).run_java( args, out=out, err=out, cwd=cwd, nonZeroIsFatal=False) mx_benchmark.add_java_vm(JvmciJdkVm('server', 'default', ['-server', '-XX:-EnableJVMCI'])) mx_benchmark.add_java_vm(JvmciJdkVm('server', 'hosted', ['-server', '-XX:+EnableJVMCI'])) def build_jvmci_vm_variants(raw_name, raw_config_name, extra_args, variants, include_default=True): if include_default: mx_benchmark.add_java_vm(JvmciJdkVm(raw_name, raw_config_name, extra_args)) for (var_name, var_args) in variants: mx_benchmark.add_java_vm(JvmciJdkVm(raw_name, raw_config_name + '-' + var_name, extra_args + var_args)) _graal_variants = [ ('tracera', ['-Dgraal.TraceRA=true']), ] build_jvmci_vm_variants('server', 'graal-core', ['-server', '-XX:+EnableJVMCI', '-XX:+UseJVMCICompiler', '-Djvmci.Compiler=graal'], _graal_variants) # On 64 bit systems -client is not supported. Nevertheless, when running with -server, we can # force the VM to just compile code with C1 but not with C2 by adding option -XX:TieredStopAtLevel=1.
def run_java(self, args, out=None, err=None, cwd=None, nonZeroIsFatal=False): tag = mx.get_jdk_option().tag if tag and tag != mx_graal_core._JVMCI_JDK_TAG: mx.abort("The '{0}/{1}' VM requires '--jdk={2}'".format( self.name(), self.config_name(), mx_graal_core._JVMCI_JDK_TAG)) mx.get_jdk(tag=mx_graal_core._JVMCI_JDK_TAG).run_java( args, out=out, err=out, cwd=cwd, nonZeroIsFatal=False) mx_benchmark.add_java_vm( JvmciJdkVm('server', 'default', ['-server', '-XX:-EnableJVMCI'])) mx_benchmark.add_java_vm( JvmciJdkVm('server', 'hosted', ['-server', '-XX:+EnableJVMCI'])) mx_benchmark.add_java_vm( JvmciJdkVm('server', 'graal-core', [ '-server', '-XX:+EnableJVMCI', '-XX:+UseJVMCICompiler', '-Djvmci.Compiler=graal' ])) mx_benchmark.add_java_vm( JvmciJdkVm('server', 'graal-core-tracera', [ '-server', '-XX:+EnableJVMCI', '-XX:+UseJVMCICompiler', '-Djvmci.Compiler=graal', '-Dgraal.TraceRA=true' ])) # On 64 bit systems -client is not supported. Nevertheless, when running with -server, we can
mx.exe_suffix(benchmark)) os.chmod(binary_path, stat.S_IRUSR | stat.S_IXUSR) cmd_line = [binary_path] mx.log("Running benchmark " + benchmark + " natively.") mx.run(cmd_line, cwd=tmp_dir, out=out, err=err, nonZeroIsFatal=nonZeroIsFatal) finally: if tmp_dir: shutil.rmtree(tmp_dir) return 0 add_java_vm(NodeWasmBenchmarkVm(), suite=_suite, priority=1) add_java_vm(NativeWasmBenchmarkVm(), suite=_suite, priority=1) class WasmJMHJsonRule(mx_benchmark.JMHJsonRule): def getBenchmarkNameFromResult(self, result): name_flag = "-Dwasmbench.benchmarkName=" name_arg = next(arg for arg in result["jvmArgs"] if arg.startswith(name_flag)) return name_arg[len(name_flag):] class WasmBenchmarkSuite(JMHDistBenchmarkSuite): def name(self): return "wasm"
def run_java(self, args, out=None, err=None, cwd=None, nonZeroIsFatal=False): tag = mx.get_jdk_option().tag if tag and tag != mx_graal_core._JVMCI_JDK_TAG: mx.abort("The '{0}/{1}' VM requires '--jdk={2}'".format( self.name(), self.config_name(), mx_graal_core._JVMCI_JDK_TAG)) mx.get_jdk(tag=mx_graal_core._JVMCI_JDK_TAG).run_java( args, out=out, err=out, cwd=cwd, nonZeroIsFatal=False) mx_benchmark.add_java_vm( JvmciJdkVm('server', 'default', ['-server', '-XX:-EnableJVMCI'])) mx_benchmark.add_java_vm( JvmciJdkVm('server', 'hosted', ['-server', '-XX:+EnableJVMCI'])) def build_jvmci_vm_variants(raw_name, raw_config_name, extra_args, variants, include_default=True): if include_default: mx_benchmark.add_java_vm( JvmciJdkVm(raw_name, raw_config_name, extra_args)) for (var_name, var_args) in variants: mx_benchmark.add_java_vm( JvmciJdkVm(raw_name, raw_config_name + '-' + var_name,