Exemplo n.º 1
0
def get_graal_jdk():
    """
    Gets a Graal JDK which adds support for handling the -G format of Graal options.
    """
    jvmci_jdk = get_jvmci_jdk()
    if JVMCI_VERSION < 9:
        from mx_jvmci import check_VM_exists, JVMCI8JDKConfig # pylint: disable=no-name-in-module
        vmbuild = jvmci_jdk.vmbuild
        check_VM_exists(get_vm(), jvmci_jdk.home, vmbuild)
        jdk = _graal_jdks.get(vmbuild)
        if jdk is None:
            class GraalJDK8Config(JVMCI8JDKConfig):
                def __init__(self, vmbuild): # pylint: disable=super-init-not-called
                    JVMCI8JDKConfig.__init__(self, vmbuild)

                def parseVmArgs(self, args, addDefaultArgs=True):
                    return JVMCI8JDKConfig.parseVmArgs(self, _buildGOptionsArgs(args), addDefaultArgs=addDefaultArgs)

            jdk = GraalJDK8Config(vmbuild)
            _graal_jdks[vmbuild] = jdk
    else:
        jdk = _graal_jdks.get('default')
        if jdk is None:
            from mx_jvmci import JVMCI9JDKConfig # pylint: disable=no-name-in-module
            class GraalJDK9Config(JVMCI9JDKConfig):
                def __init__(self, debugLevel):
                    JVMCI9JDKConfig.__init__(self, debugLevel)

                def parseVmArgs(self, args, addDefaultArgs=True):
                    return JVMCI9JDKConfig.parseVmArgs(self, _buildGOptionsArgs(args), addDefaultArgs=addDefaultArgs)
            jdk = GraalJDK9Config(jvmci_jdk.debugLevel)
            _graal_jdks['default'] = jdk
    return jdk
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
def get_graal_jdk():
    """
    Gets a Graal JDK which adds support for handling the -G format of Graal options.
    """
    jvmci_jdk = get_jvmci_jdk()
    if JVMCI_VERSION < 9:
        from mx_jvmci import check_VM_exists, JVMCI8JDKConfig # pylint: disable=no-name-in-module
        vmbuild = jvmci_jdk.vmbuild
        check_VM_exists(get_vm(), jvmci_jdk.home, vmbuild)
        jdk = _graal_jdks.get(vmbuild)
        if jdk is None:
            class GraalJDK8Config(JVMCI8JDKConfig):
                def __init__(self, vmbuild): # pylint: disable=super-init-not-called
                    JVMCI8JDKConfig.__init__(self, vmbuild)

                def parseVmArgs(self, args, addDefaultArgs=True):
                    return JVMCI8JDKConfig.parseVmArgs(self, _buildGOptionsArgs(args), addDefaultArgs=addDefaultArgs)

            jdk = GraalJDK8Config(vmbuild)
            _graal_jdks[vmbuild] = jdk
    else:
        jdk = _graal_jdks.get('default')
        if jdk is None:
            from mx_jvmci import JVMCI9JDKConfig # pylint: disable=no-name-in-module
            class GraalJDK9Config(JVMCI9JDKConfig):
                def __init__(self, debugLevel):
                    JVMCI9JDKConfig.__init__(self, debugLevel)

                def parseVmArgs(self, args, addDefaultArgs=True):
                    return JVMCI9JDKConfig.parseVmArgs(self, _buildGOptionsArgs(args), addDefaultArgs=addDefaultArgs)
            jdk = GraalJDK9Config(jvmci_jdk.debugLevel)
            _graal_jdks['default'] = jdk
    return jdk
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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))
Exemplo n.º 6
0
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))
Exemplo n.º 7
0
def jdkartifactstats(args):
    """show stats about JDK deployed Graal artifacts"""
    artifacts = {}
    jdkDir = get_jvmci_jdk().home
    def _getDeployedJars():
        if JVMCI_VERSION < 9:
            for root, _, filenames in os.walk(join(jdkDir, 'jre', 'lib')):
                for f in filenames:
                    if f.endswith('.jar') and not f.endswith('.stripped.jar'):
                        yield join(root, f)
        else:
            for jdkDist in jdkDeployedDists:
                dist = jdkDist.dist()
                if isinstance(jdkDist, JvmciJDKDeployedDist):
                    yield dist.path

    for jar in _getDeployedJars():
        f = basename(jar)
        if 'truffle' in f:
            if 'enterprise' in f:
                artifacts.setdefault('GraalEnterpriseTruffle', []).append(jar)
            else:
                artifacts.setdefault('GraalTruffle', []).append(jar)
        elif 'enterprise' in f:
            artifacts.setdefault('GraalEnterprise', []).append(jar)
        elif 'jvmci' in f:
            artifacts.setdefault('JVMCI', []).append(jar)
        elif 'graal' in f:
            artifacts.setdefault('Graal', []).append(jar)
        else:
            mx.logv('ignored: ' + jar)

    print '{:>10}  {:>10}  {:>10}  {}'.format('All', 'NoVars', 'None', 'Jar')
    for category in sorted(artifacts.viewkeys()):
        jars = artifacts[category]
        if jars:
            totals = (0, 0, 0)
            print
            for j in jars:
                gSize = os.path.getsize(j)
                stripped = j[:-len('.jar')] + '.stripped.jar'
                mx.run([mx.get_jdk().pack200, '--repack', '--quiet', '-J-Djava.util.logging.config.file=', '-DLocalVariableTypeTable=strip', '-DLocalVariableTable=strip', stripped, j])
                gLinesSourceSize = os.path.getsize(stripped)
                mx.run([mx.get_jdk().pack200, '--repack', '--quiet', '-J-Djava.util.logging.config.file=', '-G', stripped, j])
                gNoneSize = os.path.getsize(stripped)
                os.remove(stripped)
                print '{:10,}  {:10,}  {:10,}  {}:{}'.format(gSize, gLinesSourceSize, gNoneSize, category, basename(j))
                t1, t2, t3 = totals
                totals = (t1 + gSize, t2 + gLinesSourceSize, t3 + gNoneSize)
            t1, t2, t3 = totals
            print '{:10,}  {:10,}  {:10,}  {}'.format(t1, t2, t3, category)

    jvmLib = join(jdkDir, relativeVmLibDirInJdk(), get_vm(), mx.add_lib_suffix(mx.add_lib_prefix('jvm')))
    print
    if exists(jvmLib):
        print '{:10,}  {}'.format(os.path.getsize(jvmLib), jvmLib)
    else:
        print '{:>10}  {}'.format('<missing>', jvmLib)
Exemplo n.º 8
0
def jdkartifactstats(args):
    """show stats about JDK deployed Graal artifacts"""
    artifacts = {}
    jdkDir = get_jvmci_jdk().home
    def _getDeployedJars():
        if JVMCI_VERSION < 9:
            for root, _, filenames in os.walk(join(jdkDir, 'jre', 'lib')):
                for f in filenames:
                    if f.endswith('.jar') and not f.endswith('.stripped.jar'):
                        yield join(root, f)
        else:
            for jdkDist in jdkDeployedDists:
                dist = jdkDist.dist()
                if isinstance(jdkDist, JvmciJDKDeployedDist):
                    yield dist.path

    for jar in _getDeployedJars():
        f = basename(jar)
        if 'truffle' in f:
            if 'enterprise' in f:
                artifacts.setdefault('GraalEnterpriseTruffle', []).append(jar)
            else:
                artifacts.setdefault('GraalTruffle', []).append(jar)
        elif 'enterprise' in f:
            artifacts.setdefault('GraalEnterprise', []).append(jar)
        elif 'jvmci' in f:
            artifacts.setdefault('JVMCI', []).append(jar)
        elif 'graal' in f:
            artifacts.setdefault('Graal', []).append(jar)
        else:
            mx.logv('ignored: ' + jar)

    print '{:>10}  {:>10}  {:>10}  {}'.format('All', 'NoVars', 'None', 'Jar')
    for category in sorted(artifacts.viewkeys()):
        jars = artifacts[category]
        if jars:
            totals = (0, 0, 0)
            print
            for j in jars:
                gSize = os.path.getsize(j)
                stripped = j[:-len('.jar')] + '.stripped.jar'
                mx.run([mx.get_jdk().pack200, '--repack', '--quiet', '-J-Djava.util.logging.config.file=', '-DLocalVariableTypeTable=strip', '-DLocalVariableTable=strip', stripped, j])
                gLinesSourceSize = os.path.getsize(stripped)
                mx.run([mx.get_jdk().pack200, '--repack', '--quiet', '-J-Djava.util.logging.config.file=', '-G', stripped, j])
                gNoneSize = os.path.getsize(stripped)
                os.remove(stripped)
                print '{:10,}  {:10,}  {:10,}  {}:{}'.format(gSize, gLinesSourceSize, gNoneSize, category, basename(j))
                t1, t2, t3 = totals
                totals = (t1 + gSize, t2 + gLinesSourceSize, t3 + gNoneSize)
            t1, t2, t3 = totals
            print '{:10,}  {:10,}  {:10,}  {}'.format(t1, t2, t3, category)

    jvmLib = join(jdkDir, relativeVmLibDirInJdk(), get_vm(), mx.add_lib_suffix(mx.add_lib_prefix('jvm')))
    print
    if exists(jvmLib):
        print '{:10,}  {}'.format(os.path.getsize(jvmLib), jvmLib)
    else:
        print '{:>10}  {}'.format('<missing>', jvmLib)
Exemplo n.º 9
0
 def parseForkedVmArgs(self, vmArgs):
     jdk = get_jvmci_jdk()
     jvm = get_vm()
     return ['-' + jvm] + jdk.parseVmArgs(vmArgs)
Exemplo n.º 10
0
 def parseForkedVmArgs(self, vmArgs):
     jdk = get_jvmci_jdk()
     jvm = get_vm()
     return ['-' + jvm] + jdk.parseVmArgs(vmArgs)
Exemplo n.º 11
0
def jdkartifactstats(args):
    """show stats about JDK deployed Graal artifacts"""
    artifacts = {}
    jdkDir = get_jvmci_jdk().home

    def _getDeployedJars():
        if JVMCI_VERSION < 9:
            for root, _, filenames in os.walk(join(jdkDir, "jre", "lib")):
                for f in filenames:
                    if f.endswith(".jar") and not f.endswith(".stripped.jar"):
                        yield join(root, f)
        else:
            for jdkDist in jdkDeployedDists:
                dist = jdkDist.dist()
                if isinstance(jdkDist, JvmciJDKDeployedDist):
                    yield dist.path

    for jar in _getDeployedJars():
        f = basename(jar)
        if "truffle" in f:
            if "enterprise" in f:
                artifacts.setdefault("GraalEnterpriseTruffle", []).append(jar)
            else:
                artifacts.setdefault("GraalTruffle", []).append(jar)
        elif "enterprise" in f:
            artifacts.setdefault("GraalEnterprise", []).append(jar)
        elif "jvmci" in f:
            artifacts.setdefault("JVMCI", []).append(jar)
        elif "graal" in f:
            artifacts.setdefault("Graal", []).append(jar)
        else:
            mx.logv("ignored: " + jar)

    print "{:>10}  {:>10}  {:>10}  {}".format("All", "NoVars", "None", "Jar")
    for category in sorted(artifacts.viewkeys()):
        jars = artifacts[category]
        if jars:
            totals = (0, 0, 0)
            print
            for j in jars:
                gSize = os.path.getsize(j)
                stripped = j[: -len(".jar")] + ".stripped.jar"
                mx.run(
                    [
                        mx.get_jdk().pack200,
                        "--repack",
                        "--quiet",
                        "-J-Djava.util.logging.config.file=",
                        "-DLocalVariableTypeTable=strip",
                        "-DLocalVariableTable=strip",
                        stripped,
                        j,
                    ]
                )
                gLinesSourceSize = os.path.getsize(stripped)
                mx.run(
                    [
                        mx.get_jdk().pack200,
                        "--repack",
                        "--quiet",
                        "-J-Djava.util.logging.config.file=",
                        "-G",
                        stripped,
                        j,
                    ]
                )
                gNoneSize = os.path.getsize(stripped)
                os.remove(stripped)
                print "{:10,}  {:10,}  {:10,}  {}:{}".format(gSize, gLinesSourceSize, gNoneSize, category, basename(j))
                t1, t2, t3 = totals
                totals = (t1 + gSize, t2 + gLinesSourceSize, t3 + gNoneSize)
            t1, t2, t3 = totals
            print "{:10,}  {:10,}  {:10,}  {}".format(t1, t2, t3, category)

    jvmLib = join(jdkDir, relativeVmLibDirInJdk(), get_vm(), mx.add_lib_suffix(mx.add_lib_prefix("jvm")))
    print
    if exists(jvmLib):
        print "{:10,}  {}".format(os.path.getsize(jvmLib), jvmLib)
    else:
        print "{:>10}  {}".format("<missing>", jvmLib)
Exemplo n.º 12
0
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))