def microbench(args): """run JMH microbenchmark projects""" parser = ArgumentParser( prog='mx microbench', description=microbench.__doc__, usage="%(prog)s [command options|VM options] [-- [JMH options]]") parser.add_argument('--jar', help='Explicitly specify micro-benchmark location') known_args, args = parser.parse_known_args(args) vmArgs, jmhArgs = mx.extract_VM_args(args, useDoubleDash=True) if JVMCI_VERSION < 9: if isJVMCIEnabled( get_vm()) and '-XX:-UseJVMCIClassLoader' not in vmArgs: vmArgs = ['-XX:-UseJVMCIClassLoader'] + vmArgs # look for -f in JMH arguments forking = True for i in range(len(jmhArgs)): arg = jmhArgs[i] if arg.startswith('-f'): if arg == '-f' and (i + 1) < len(jmhArgs): arg += jmhArgs[i + 1] try: if int(arg[2:]) == 0: forking = False except ValueError: pass if known_args.jar: # use the specified jar args = ['-jar', known_args.jar] if not forking: args += vmArgs else: # find all projects with a direct JMH dependency jmhProjects = [] for p in mx.projects_opt_limit_to_suites(): if 'JMH' in [x.name for x in p.deps]: jmhProjects.append(p.name) cp = mx.classpath(jmhProjects) # execute JMH runner args = ['-cp', cp] if not forking: args += vmArgs args += ['org.openjdk.jmh.Main'] if forking: jdk = get_jvmci_jdk() jvm = get_vm() def quoteSpace(s): if " " in s: return '"' + s + '"' return s forkedVmArgs = map(quoteSpace, jdk.parseVmArgs(vmArgs)) args += ['--jvmArgsPrepend', ' '.join(['-' + jvm] + forkedVmArgs)] run_vm(args + jmhArgs)
def microbench(args): """run JMH microbenchmark projects""" parser = ArgumentParser( prog="mx microbench", description=microbench.__doc__, usage="%(prog)s [command options|VM options] [-- [JMH options]]", ) parser.add_argument("--jar", help="Explicitly specify micro-benchmark location") known_args, args = parser.parse_known_args(args) vmArgs, jmhArgs = mx.extract_VM_args(args, useDoubleDash=True) if JVMCI_VERSION < 9: if isJVMCIEnabled(get_vm()) and "-XX:-UseJVMCIClassLoader" not in vmArgs: vmArgs = ["-XX:-UseJVMCIClassLoader"] + vmArgs # look for -f in JMH arguments forking = True for i in range(len(jmhArgs)): arg = jmhArgs[i] if arg.startswith("-f"): if arg == "-f" and (i + 1) < len(jmhArgs): arg += jmhArgs[i + 1] try: if int(arg[2:]) == 0: forking = False except ValueError: pass if known_args.jar: # use the specified jar args = ["-jar", known_args.jar] if not forking: args += vmArgs else: # find all projects with a direct JMH dependency jmhProjects = [] for p in mx.projects_opt_limit_to_suites(): if "JMH" in [x.name for x in p.deps]: jmhProjects.append(p.name) cp = mx.classpath(jmhProjects) # execute JMH runner args = ["-cp", cp] if not forking: args += vmArgs args += ["org.openjdk.jmh.Main"] if forking: jdk = get_jvmci_jdk() jvm = get_vm() def quoteSpace(s): if " " in s: return '"' + s + '"' return s forkedVmArgs = map(quoteSpace, jdk.parseVmArgs(vmArgs)) args += ["--jvmArgsPrepend", " ".join(["-" + jvm] + forkedVmArgs)] run_vm(args + jmhArgs)
def ctw(args, extraVMarguments=None): """run CompileTheWorld""" defaultCtwopts = '-Inline' parser = ArgumentParser(prog='mx ctw') parser.add_argument('--ctwopts', action='store', help='space separated JVMCI options used for CTW compilations (default: --ctwopts="' + defaultCtwopts + '")', default=defaultCtwopts, metavar='<options>') parser.add_argument('--cp', '--jar', action='store', help='jar or class path denoting classes to compile', metavar='<path>') args, vmargs = parser.parse_known_args(args) if args.ctwopts: # Replace spaces with '#' since -G: options cannot contain spaces vmargs.append('-G:CompileTheWorldConfig=' + re.sub(r'\s+', '#', args.ctwopts)) if args.cp: cp = os.path.abspath(args.cp) else: if JVMCI_VERSION < 9: cp = join(get_jvmci_jdk().home, 'jre', 'lib', 'rt.jar') else: cp = join(get_jvmci_jdk().home, 'modules', 'java.base') + os.pathsep + \ join(get_jvmci_jdk().home, 'lib', 'modules', 'bootmodules.jimage') vmargs.append('-G:CompileTheWorldExcludeMethodFilter=sun.awt.X11.*.*') # suppress menubar and dock when running on Mac; exclude x11 classes as they may cause vm crashes (on Solaris) vmargs = ['-Djava.awt.headless=true'] + vmargs vm = get_vm() if JVMCI_VERSION >= 9: jvmciMode = _jvmci_get_vm().jvmciMode if jvmciMode == 'disabled': vmargs += ['-XX:+CompileTheWorld', '-Xbootclasspath/p:' + cp] else: if jvmciMode == 'jit': vmargs += ['-XX:+BootstrapJVMCI'] vmargs += ['-G:CompileTheWorldClasspath=' + cp, 'com.oracle.graal.hotspot.CompileTheWorld'] else: if isJVMCIEnabled(vm): if vm == 'jvmci': vmargs += ['-XX:+BootstrapJVMCI'] vmargs += ['-G:CompileTheWorldClasspath=' + cp, '-XX:-UseJVMCIClassLoader', 'com.oracle.graal.hotspot.CompileTheWorld'] else: vmargs += ['-XX:+CompileTheWorld', '-Xbootclasspath/p:' + cp] run_vm(vmargs + _noneAsEmptyList(extraVMarguments))
def _unittest_config_participant(config): vmArgs, mainClass, mainClassArgs = config if isJVMCIEnabled(get_vm()): return (_buildGOptionsArgs(vmArgs), mainClass, mainClassArgs) return config
def parseVmArgs(self, vmArgs): if JVMCI_VERSION < 9: if isJVMCIEnabled( get_vm()) and '-XX:-UseJVMCIClassLoader' not in vmArgs: return ['-XX:-UseJVMCIClassLoader'] + vmArgs return vmArgs
def _unittest_config_participant(config): vmArgs, mainClass, mainClassArgs = config if isJVMCIEnabled(get_vm()): return (map(_translateGOption, vmArgs), mainClass, mainClassArgs) return config
def parseVmArgs(self, vmArgs): if JVMCI_VERSION < 9: if isJVMCIEnabled(get_vm()) and '-XX:-UseJVMCIClassLoader' not in vmArgs: return ['-XX:-UseJVMCIClassLoader'] + vmArgs return vmArgs
def ctw(args, extraVMarguments=None): """run CompileTheWorld""" defaultCtwopts = "-Inline" parser = ArgumentParser(prog="mx ctw") parser.add_argument( "--ctwopts", action="store", help='space separated JVMCI options used for CTW compilations (default: --ctwopts="' + defaultCtwopts + '")', default=defaultCtwopts, metavar="<options>", ) parser.add_argument( "--cp", "--jar", action="store", help="jar or class path denoting classes to compile", metavar="<path>" ) args, vmargs = parser.parse_known_args(args) if args.ctwopts: # Replace spaces with '#' since -G: options cannot contain spaces vmargs.append("-G:CompileTheWorldConfig=" + re.sub(r"\s+", "#", args.ctwopts)) if args.cp: cp = os.path.abspath(args.cp) else: if JVMCI_VERSION < 9: cp = join(get_jvmci_jdk().home, "jre", "lib", "rt.jar") else: cp = ( join(get_jvmci_jdk().home, "modules", "java.base") + os.pathsep + join(get_jvmci_jdk().home, "lib", "modules", "bootmodules.jimage") ) vmargs.append("-G:CompileTheWorldExcludeMethodFilter=sun.awt.X11.*.*") # suppress menubar and dock when running on Mac; exclude x11 classes as they may cause vm crashes (on Solaris) vmargs = ["-Djava.awt.headless=true"] + vmargs vm = get_vm() if JVMCI_VERSION >= 9: jvmciMode = _jvmci_get_vm().jvmciMode if jvmciMode == "disabled": vmargs += ["-XX:+CompileTheWorld", "-Xbootclasspath/p:" + cp] else: if jvmciMode == "jit": vmargs += ["-XX:+BootstrapJVMCI"] vmargs += ["-G:CompileTheWorldClasspath=" + cp, "com.oracle.graal.hotspot.CompileTheWorld"] else: if isJVMCIEnabled(vm): if vm == "jvmci": vmargs += ["-XX:+BootstrapJVMCI"] vmargs += [ "-G:CompileTheWorldClasspath=" + cp, "-XX:-UseJVMCIClassLoader", "com.oracle.graal.hotspot.CompileTheWorld", ] else: vmargs += ["-XX:+CompileTheWorld", "-Xbootclasspath/p:" + cp] run_vm(vmargs + _noneAsEmptyList(extraVMarguments))