jaotc: unexpected long compile time for a 3012-byte generated class

Tianxiao Gu tianxiao.gu at gmail.com
Tue Jan 30 05:34:02 UTC 2018


Hi Doug,

The following program can trigger the NullPointerException (without -J-Xcomp)
or crash the JVM (with -J-Xcomp) in about *5* minutes on my Mac.

I have also updated the bug report at
https://github.com/oracle/graal/issues/290

public class Test {

    public static void M3() {
        M3();
        M3();
        M3();
    }

    public static void main(String[] args) {
        M3();
        M3();
    }
}

Options:

--compile-commands commands-test.txt -J-Dgraal.InlineDuringParsingMaxDepth=10

commands-test.txt

compileOnly Test.main.*

Log:

tianxiaogu@~/Downloads/jasmin-2.4/graal-290 >>>
~/Projects/hs/build/macosx-x86_64-normal-server-release/images/jdk/bin/jaotc
--output Test.so  --compile-commands commands-test.txt
-J-Dgraal.InlineDuringParsingMaxDepth=10  -J-Xcomp Test.class
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x000000011b2d8ab5, pid=87625, tid=9735
#
# JRE version: OpenJDK Runtime Environment (10.0) (build
10-internal+0-adhoc.tianxiaogu.hs)
# Java VM: OpenJDK 64-Bit Server VM
(10-internal+0-adhoc.tianxiaogu.hs, compiled mode, tiered, jvmci,
compressed oops, g1 gc, bsd-amd64)
# Problematic frame:
# J 10065 c2 org.graalvm.compiler.graph.Edges.getNodeListUnsafe(Lorg/graalvm/compiler/graph/Node;J)Lorg/graalvm/compiler/graph/NodeList;
jdk.internal.vm.compiler at 10-internal (12 bytes) @ 0x000000011b2d8ab5
[0x000000011b2d8aa0+0x0000000000000015]
#
# No core dump will be written. Core dumps have been disabled. To
enable core dumping, try "ulimit -c unlimited" before starting Java
again
#
# An error report file with more information is saved as:
# /Users/tianxiaogu/Downloads/jasmin-2.4/graal-290/hs_err_pid87625.log
Could not load hsdis-amd64.dylib; library not loadable; PrintAssembly
is disabled
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
#
Abort trap: 6
tianxiaogu@~/Downloads/jasmin-2.4/graal-290 >>>
~/Projects/hs/build/macosx-x86_64-normal-server-release/images/jdk/bin/jaotc
--output Test.so  --compile-commands commands-test.txt
-J-Dgraal.InlineDuringParsingMaxDepth=10   Test.class
Error: Failed compilation: Test.main([Ljava/lang/String;)V:
java.lang.NullPointerException
tianxiaogu@~/Downloads/jasmin-2.4/graal-290 >>>



On Mon, Jan 29, 2018 at 1:55 AM, Doug Simon <doug.simon at oracle.com> wrote:

> I think I using a different C0.class than you based on the output from
> jaotc:
>
> (yours)  added M2([C[SLjava/lang/Number;Ljava/lang/Number;Ljava/lang/
> Short;Ljava/lang/Float;SLjava/lang/Character;[F)V
> (mine)   added M2([Ljava/lang/Number;[CLjava/
> lang/Comparable;[F[Ljava/lang/Character;[S)Z
>
> I was using the one from https://github.com/oracle/graal/issues/290 but
> now see you're probably referring to the one at https://drive.google.com/
> drive/folders/1u9O3uPkvucX6PWQkMFER3NAUWIR_KglE. Sorry for the confusion.
>
> Can you please open a separate github issue for this particular C0.class
> and attach it to the issue so that we avoid this kind of confusion in
> future.
>
> -Doug
>
> > On 29 Jan 2018, at 08:29, Tianxiao Gu <tianxiao.gu at gmail.com> wrote:
> >
> > Hi Doug,
> >
> > I can still reproduce it with OpenJDK head (http://hg.openjdk.java.net/
> jdk/hs/) and the nightly build from (https://adoptopenjdk.net/
> nightly.html?variant=openjdk10).
> >
> > Maybe you can use a larger InlineDuringParsingMaxDepth (e.g., 9 or 10)
> or disable -Xcomp. Give me some time I will try to create a Graal test case.
> >
> > tianxiaogu@~/Projects/hs >>> hg path
> > default = http://hg.openjdk.java.net/jdk/hs/
> > tianxiaogu@~/Projects/hs >>> hg id
> > f43576cfb273+ tip
> >
> >
> > tianxiaogu@~/Dropbox/OpenJDK/jaotc/LongCompileTime1 >>>
> ~/Projects/hs/build/macosx-x86_64-normal-server-release/images/jdk/bin/jaotc
> --output C0.so  -J-Dgraal.InlineDuringParsingMaxDepth=8
> --compile-commands commands.txt --verbose  C0.class
> >
> > Compiling C0.so...
> > 1 classes found (87 ms)
> >  Scanning C0
> >   added M2([C[SLjava/lang/Number;Ljava/lang/Number;Ljava/lang/
> Short;Ljava/lang/Float;SLjava/lang/Character;[F)V
> > 7 methods total, 1 methods to compile (13 ms)
> > Freeing memory [used: 2.2 MB , comm: 8.0 MB , freeRatio ~= 72.4%] (67 ms)
> > Compiling with 4 threads
> > .Error: Failed compilation: C0.M2([C[SLjava/lang/Number;
> Ljava/lang/Number;Ljava/lang/Short;Ljava/lang/Float;SLjava/lang/Character;[F)V:
> java.lang.NullPointerException
> > java.lang.NullPointerException
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> graph.NodeClass$RawEdgesIterator.getInput(NodeClass.java:1042)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> graph.NodeClass$RawEdgesIterator.forward(NodeClass.java:981)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> graph.NodeClass$RawEdgesIterator.hasNext(NodeClass.java:974)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.schedule.SchedulePhase$Instance.scheduleEarliestIterative(
> SchedulePhase.java:743)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.schedule.SchedulePhase$Instance.run(SchedulePhase.java:167)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.schedule.SchedulePhase.run(SchedulePhase.java:126)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.Phase.run(Phase.java:47)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.BasePhase.apply(BasePhase.java:195)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.Phase.apply(Phase.java:40)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> virtual.phases.ea.EffectsPhase.runAnalysis(EffectsPhase.java:87)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> virtual.phases.ea.PartialEscapePhase.run(PartialEscapePhase.java:80)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> virtual.phases.ea.PartialEscapePhase.run(PartialEscapePhase.java:42)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.BasePhase.apply(BasePhase.java:195)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.BasePhase.apply(BasePhase.java:137)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.PhaseSuite.run(PhaseSuite.java:203)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.BasePhase.apply(BasePhase.java:195)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.BasePhase.apply(BasePhase.java:137)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> core.GraalCompiler.emitFrontEnd(GraalCompiler.java:229)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> core.GraalCompiler.compile(GraalCompiler.java:172)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> core.GraalCompiler.compileGraph(GraalCompiler.java:158)
> >       at jdk.aot/jdk.tools.jaotc.AOTBackend.compileGraph(
> AOTBackend.java:141)
> >       at jdk.aot/jdk.tools.jaotc.AOTBackend.compileMethod(
> AOTBackend.java:103)
> >       at jdk.aot/jdk.tools.jaotc.AOTCompilationTask.run(
> AOTCompilationTask.java:121)
> >       at java.base/java.util.concurrent.ThreadPoolExecutor.
> runWorker(ThreadPoolExecutor.java:1135)
> >       at java.base/java.util.concurrent.ThreadPoolExecutor$
> Worker.run(ThreadPoolExecutor.java:635)
> >       at java.base/java.lang.Thread.run(Thread.java:844)
> >
> >  failed M2([C[SLjava/lang/Number;Ljava/lang/Number;Ljava/lang/
> Short;Ljava/lang/Float;SLjava/lang/Character;[F)V
> >
> > 0 methods compiled, 1 methods failed (275627 ms)
> > Freeing memory [used: 368.0 MB, comm: 765.0 MB, freeRatio ~= 51.9%] (63
> ms)
> > Parsing compiled code (1 ms)
> > Freeing memory [used: 7.3 MB , comm: 17.0 MB, freeRatio ~= 57.0%] (17 ms)
> > Processing metadata (49 ms)
> > Freeing memory [used: 4.9 MB , comm: 17.0 MB, freeRatio ~= 71.3%] (21 ms)
> > Preparing stubs binary (1 ms)
> > Preparing compiled binary (0 ms)
> > .header: 65 bytes
> > .config: 40 bytes
> > .kls.offsets: 0 bytes
> > .meth.offsets: 0 bytes
> > .kls.dependencies: 0 bytes
> > .stubs.offsets: 964 bytes
> > .meth.metadata: 6792 bytes
> > .text: 21344 bytes
> > .code.segments: 165 bytes
> > .meth.constdata: 29152 bytes
> > .kls.got: 0 bytes
> > .cnt.got: 0 bytes
> > .meta.got: 0 bytes
> > .meth.state: 320 bytes
> > .oop.got: 0 bytes
> > .meta.names: 1874 bytes
> > Freeing memory [used: 4.9 MB , comm: 17.0 MB, freeRatio ~= 71.3%] (21 ms)
> > Creating binary: C0.so.o (29 ms)
> > Freeing memory [used: 4.9 MB , comm: 17.0 MB, freeRatio ~= 71.3%] (47 ms)
> > Creating shared library: C0.so (70 ms)
> > Final memory   [used: 4.8 MB , comm: 17.0 MB, freeRatio ~= 72.1%]
> > Total time: 277417 ms
> >
> >
> > Nightly build: jdk-10+23-20, 26 January 2018, macOS x64
> >
> > https://github.com/AdoptOpenJDK/openjdk10-nightly/releases/download/jdk-
> 10%2B23-20182601/OpenJDK10_x64_Mac_20182601.tar.gz
> >
> > tianxiaogu@~/Dropbox/OpenJDK/jaotc/LongCompileTime1 >>>
> ~/Downloads/jdk-10+23/bin/jaotc --output C0.so  -J-Dgraal.InlineDuringParsingMaxDepth=8
> --compile-commands commands.txt --verbose  C0.class
> > Compiling C0.so...
> > 1 classes found (52 ms)
> >  Scanning C0
> >   added M2([C[SLjava/lang/Number;Ljava/lang/Number;Ljava/lang/
> Short;Ljava/lang/Float;SLjava/lang/Character;[F)V
> > 7 methods total, 1 methods to compile (10 ms)
> > Freeing memory [used: 2.2 MB , comm: 8.0 MB , freeRatio ~= 72.2%] (34 ms)
> > Compiling with 4 threads
> > .Error: Failed compilation: C0.M2([C[SLjava/lang/Number;
> Ljava/lang/Number;Ljava/lang/Short;Ljava/lang/Float;SLjava/lang/Character;[F)V:
> java.lang.NullPointerException
> > java.lang.NullPointerException
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> graph.NodeClass$RawEdgesIterator.getInput(NodeClass.java:1042)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> graph.NodeClass$RawEdgesIterator.forward(NodeClass.java:981)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> graph.NodeClass$RawEdgesIterator.hasNext(NodeClass.java:974)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.schedule.SchedulePhase$Instance.scheduleEarliestIterative(
> SchedulePhase.java:743)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.schedule.SchedulePhase$Instance.run(SchedulePhase.java:167)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.schedule.SchedulePhase.run(SchedulePhase.java:126)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.Phase.run(Phase.java:47)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.BasePhase.apply(BasePhase.java:195)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.Phase.apply(Phase.java:40)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> virtual.phases.ea.EffectsPhase.runAnalysis(EffectsPhase.java:87)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> virtual.phases.ea.PartialEscapePhase.run(PartialEscapePhase.java:80)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> virtual.phases.ea.PartialEscapePhase.run(PartialEscapePhase.java:42)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.BasePhase.apply(BasePhase.java:195)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.BasePhase.apply(BasePhase.java:137)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.PhaseSuite.run(PhaseSuite.java:203)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.BasePhase.apply(BasePhase.java:195)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> phases.BasePhase.apply(BasePhase.java:137)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> core.GraalCompiler.emitFrontEnd(GraalCompiler.java:229)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> core.GraalCompiler.compile(GraalCompiler.java:172)
> >       at jdk.internal.vm.compiler at 10-internal/org.graalvm.compiler.
> core.GraalCompiler.compileGraph(GraalCompiler.java:158)
> >       at jdk.aot/jdk.tools.jaotc.AOTBackend.compileGraph(
> AOTBackend.java:140)
> >       at jdk.aot/jdk.tools.jaotc.AOTBackend.compileMethod(
> AOTBackend.java:102)
> >       at jdk.aot/jdk.tools.jaotc.AOTCompilationTask.run(
> AOTCompilationTask.java:121)
> >       at java.base/java.util.concurrent.ThreadPoolExecutor.
> runWorker(ThreadPoolExecutor.java:1145)
> >       at java.base/java.util.concurrent.ThreadPoolExecutor$
> Worker.run(ThreadPoolExecutor.java:630)
> >       at java.base/java.lang.Thread.run(Thread.java:844)
> >
> >  failed M2([C[SLjava/lang/Number;Ljava/lang/Number;Ljava/lang/
> Short;Ljava/lang/Float;SLjava/lang/Character;[F)V
> >
> > 0 methods compiled, 1 methods failed (140875 ms)
> > Freeing memory [used: 380.0 MB, comm: 2.0 GB , freeRatio ~= 81.0%] (180
> ms)
> > Parsing compiled code (1 ms)
> > Freeing memory [used: 5.0 MB , comm: 10.0 MB, freeRatio ~= 49.8%] (33 ms)
> > Processing metadata (37 ms)
> > Freeing memory [used: 4.8 MB , comm: 10.0 MB, freeRatio ~= 52.0%] (39 ms)
> > Preparing stubs binary (2 ms)
> > Preparing compiled binary (0 ms)
> > .header: 67 bytes
> > .config: 39 bytes
> > .kls.offsets: 0 bytes
> > .meth.offsets: 0 bytes
> > .kls.dependencies: 0 bytes
> > .stubs.offsets: 940 bytes
> > .meth.metadata: 6616 bytes
> > .text: 21080 bytes
> > .code.segments: 163 bytes
> > .meth.constdata: 29152 bytes
> > .kls.got: 0 bytes
> > .cnt.got: 0 bytes
> > .meta.got: 0 bytes
> > .meth.state: 312 bytes
> > .oop.got: 0 bytes
> > .meta.names: 1826 bytes
> > Freeing memory [used: 4.8 MB , comm: 10.0 MB, freeRatio ~= 52.0%] (71 ms)
> > Creating binary: C0.so.o (91 ms)
> > Freeing memory [used: 4.8 MB , comm: 10.0 MB, freeRatio ~= 52.1%] (47 ms)
> > Creating shared library: C0.so (75 ms)
> > Final memory   [used: 4.7 MB , comm: 10.0 MB, freeRatio ~= 53.4%]
> > Total time: 142749 ms
> >
> >
> > On Sun, Jan 28, 2018 at 10:58 AM, Tianxiao Gu <tianxiao.gu at gmail.com>
> wrote:
> > Hi Doug,
> >
> > Thank you very much for your feedback. I will try to create a Graal unit
> test and also reproduce the crash on my Mac.
> >
> > 1. The OpenJDK head I used is built from the repo at
> http://hg.openjdk.java.net/jdk/jdk/.
> > 2. My computer used for testing is Ubuntu 16.04. The output of `uname
> -a` is:
> >
> > Linux xtiger 4.10.0-42-generic #46~16.04.1-Ubuntu SMP Mon Dec 4 15:57:59
> UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
> >
> >
> > On Sun, Jan 28, 2018 at 4:23 AM, Doug Simon <doug.simon at oracle.com>
> wrote:
> > Hi Tianxiao,
> >
> > Thanks for the detailed bug report.
> >
> > By OpenJDK, which repo do you mean? I've tried to reproduce with the tip
> of http://hg.openjdk.java.net/jdk/hs on my Mac but with no luck so far:
> >
> > dsimon at kruger-4 ~/j/open> hg path
> > default = http://hg.openjdk.java.net/jdk/hs
> > default-push = ssh://dnsimon@hg.openjdk.java.net/jdk/hs
> > dsimon at kruger-4 ~/j/open> hg id
> > f43576cfb273 tip
> > dsimon at kruger-4 ~/j/open> sh configure --disable-warnings-as-errors
> > dsimon at kruger-4 ~/j/open> make CONF=macosx-x86_64-normal-server-release
> images
> > dsimon at kruger-4 ~/j/open> shasum C0.class
> > fc436e1bb82f9d6193177131b1130c44ba61dce2  C0.class
> > dsimon at kruger-4 ~/j/open> cat commands.txt
> > compileOnly C0.M2.*
> > dsimon at kruger-4 ~/j/open> build/macosx-x86_64-normal-
> server-release/images/jdk/bin/jaotc --output C0.so --compile-commands
> commands.txt -J-Xcomp --verbose  -J-Dgraal.InlineDuringParsingMaxDepth=8
> -J-Xcomp C0.class
> > Compiling C0.so...
> > 1 classes found (1374 ms)
> >  Scanning C0
> >   added M2([Ljava/lang/Number;[CLjava/lang/Comparable;[F[Ljava/lang/
> Character;[S)Z
> > 6 methods total, 1 methods to compile (159 ms)
> > Freeing memory [used: 2,4 MB , comm: 8,0 MB , freeRatio ~= 70,5%] (552
> ms)
> > Compiling with 8 threads
> > .
> > 1 methods compiled, 0 methods failed (3988 ms)
> > Freeing memory [used: 4,2 MB , comm: 8,0 MB , freeRatio ~= 47,1%] (32 ms)
> > Parsing compiled code (22 ms)
> > Freeing memory [used: 5,4 MB , comm: 10,0 MB, freeRatio ~= 45,7%] (35 ms)
> > Processing metadata (164 ms)
> > Freeing memory [used: 5,4 MB , comm: 14,0 MB, freeRatio ~= 61,7%] (36 ms)
> > Preparing stubs binary (2 ms)
> > Preparing compiled binary (6 ms)
> > .header: 63 bytes
> > .config: 40 bytes
> > .kls.offsets: 48 bytes
> > .meth.offsets: 28 bytes
> > .kls.dependencies: 12 bytes
> > .stubs.offsets: 964 bytes
> > .meth.metadata: 7000 bytes
> > .text: 21624 bytes
> > .code.segments: 167 bytes
> > .meth.constdata: 29152 bytes
> > .kls.got: 32 bytes
> > .cnt.got: 0 bytes
> > .meta.got: 8 bytes
> > .meth.state: 328 bytes
> > .oop.got: 0 bytes
> > .meta.names: 1962 bytes
> > Freeing memory [used: 5,4 MB , comm: 14,0 MB, freeRatio ~= 61,8%] (47 ms)
> > Creating binary: C0.so.o (151 ms)
> > Freeing memory [used: 5,3 MB , comm: 14,0 MB, freeRatio ~= 61,8%] (41 ms)
> > Creating shared library: C0.so (31 ms)
> > Final memory   [used: 5,2 MB , comm: 14,0 MB, freeRatio ~= 62,9%]
> > Total time: 15784 ms
> >
> >
> > In terms of errors on 9.0.4, that version of Graal is now quite old and
> there's a good chance the issue has been fixed since then.
> >
> > In terms of C2 crashing, that's something for the HotSpot compiler team
> to look at.
> >
> > For these kinds of issues, it's really helpful if you can make a Graal
> unit test out of it. That allows us to test it against recent Graal and
> also ensure we don't regress. How do you generate these test classes? If
> it's with the ASM library, then you can see how it is used by other Graal
> unit tests:
> >
> > https://github.com/oracle/graal/blob/3d00ff7781fd63da2af576ccb7594d
> b7cb39373b/compiler/src/org.graalvm.compiler.core.test/
> src/org/graalvm/compiler/core/test/UnbalancedMonitorsTest.java
> > https://github.com/oracle/graal/blob/2401c47b18c88317f0d2476e183cb7
> be65ce242d/compiler/src/org.graalvm.compiler.core.test/
> src/org/graalvm/compiler/core/test/SubWordReturnTest.java
> >
> > You may also be able to express the problematic pattern in normal Java
> code as I could for https://github.com/oracle/graal/issues/288.
> >
> > -Doug
> >
> > > On 27 Jan 2018, at 10:16, Tianxiao Gu <tianxiao.gu at gmail.com> wrote:
> > >
> > > The OpenJDK head still crashes with this program. Now I can manage to
> reproduce the crash in about 1 min on my computer.  The crash stack trace
> is different.
> > >
> > > Using the following options to start jaotc.
> > >
> > > 1. Add options -J-Dgraal.InlineDuringParsingMaxDepth=8 and -J-Xcomp.
> > > 2. Add options --compile-commands commands.txt to jaotc, where the
> contents of commands.txt is
> > > compileOnly C0.M2.*
> > >
> > > If we use CompileCommand to exclude org.graalvm.compiler.graph.Edges::getNodeListUnsafe,
> we get a Java stack trace.
> > >
> > > 3. Add option -J-XX:CompileCommand=exclude,org.graalvm.compiler.graph.
> Edges::getNodeListUnsafe
> > >
> > >
> > > Summary:
> > >
> > > HEAD + Include: VM crashed
> > > HEAD + Exclude: Java Exception
> > > JDK 9.04 + Include: VM crashed
> > > JDK 9.04 + Exclude: VM crashed
> > >
> > > I have fired a similar bug report with another program at
> https://github.com/oracle/graal/issues/290
> > >
> > > So far, we still have no idea whether this is a problem of C2 or Graal.
> > >
> > > === C2 (HEAD) crashes ===
> > >
> > > $ time ../../../openjdk/jdk/build/linux-x86_64-normal-server-release/jdk/bin/jaotc
> --output C0.so --verbose -J-Dgraal.InlineDuringParsingMaxDepth=8
> --compile-commands commands.txt  -J-Xcomp  C0
> > > Compiling C0.so...
> > > 1 classes found (721 ms)
> > >  Scanning C0
> > >   added M2([C[SLjava/lang/Number;Ljava/lang/Number;Ljava/lang/
> Short;Ljava/lang/Float;SLjava/lang/Character;[F)V
> > > 7 methods total, 1 methods to compile (173 ms)
> > > Freeing memory [used: 3.7 MB , comm: 10.0 MB, freeRatio ~= 62.6%] (555
> ms)
> > > Compiling with 8 threads
> > > .#
> > > # A fatal error has been detected by the Java Runtime Environment:
> > > #
> > > #  SIGSEGV (0xb) at pc=0x00007f3c74f57135, pid=19884, tid=19921
> > > #
> > > # JRE version: OpenJDK Runtime Environment (10.0) (build
> 10-internal+0-adhoc.t.jdk)
> > > # Java VM: OpenJDK 64-Bit Server VM (10-internal+0-adhoc.t.jdk,
> compiled mode, tiered, jvmci, compressed oops, g1 gc, linux-amd64)
> > > # Problematic frame:
> > > # J 10840 c2 org.graalvm.compiler.graph.Edges.getNodeListUnsafe(Lorg/
> graalvm/compiler/graph/Node;J)Lorg/graalvm/compiler/graph/NodeList;
> jdk.internal.vm.compiler (12 bytes) @ 0x00007f3c74f57135
> [0x00007f3c74f57120+0x0000000000000015]
> > > #
> > > # Core dump will be written. Default location: Core dumps may be
> processed with "/usr/share/apport/apport %p %s %c %d %P" (or dumping to
> /home/t/Projects/JVMTesting/old-bugs/0123-old-bugs/jaotc-
> jdk-20180122171043/core.19884)
> > > #
> > > # An error report file with more information is saved as:
> > > # /home/t/Projects/JVMTesting/old-bugs/0123-old-bugs/jaotc-
> jdk-20180122171043/hs_err_pid19884.log
> > > Could not load hsdis-amd64.so; library not loadable; PrintAssembly is
> disabled
> > > #
> > > # If you would like to submit a bug report, please visit:
> > > #   http://bugreport.java.com/bugreport/crash.jsp
> > > #
> > > Aborted (core dumped)
> > > real  1m14.411s
> > > user  1m17.352s
> > > sys   0m0.604s
> > >
> > > === Exclude getNodeListUnsafe ===
> > >
> > > $ time ../../../openjdk/jdk/build/linux-x86_64-normal-server-release/jdk/bin/jaotc
> --output C0.so --verbose -J-Dgraal.InlineDuringParsingMaxDepth=8
> --compile-commands commands.txt  -J-Xcomp -J-XX:CompileCommand=exclude,
> org.graalvm.compiler.graph.Edges::getNodeListUnsafe  C0
> > > CompileCommand: exclude org/graalvm/compiler/graph/
> Edges.getNodeListUnsafe
> > > Compiling C0.so...
> > > 1 classes found (704 ms)
> > >  Scanning C0
> > >   added M2([C[SLjava/lang/Number;Ljava/lang/Number;Ljava/lang/
> Short;Ljava/lang/Float;SLjava/lang/Character;[F)V
> > > 7 methods total, 1 methods to compile (130 ms)
> > > Freeing memory [used: 4.6 MB , comm: 10.0 MB, freeRatio ~= 54.2%] (792
> ms)
> > > Compiling with 8 threads
> > > .Error: Failed compilation: C0.M2([C[SLjava/lang/Number;
> Ljava/lang/Number;Ljava/lang/Short;Ljava/lang/Float;SLjava/lang/Character;[F)V:
> java.lang.NullPointerException
> > > java.lang.NullPointerException
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.graph.Edges.
> getNodeListUnsafe(Edges.java:71)
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.graph.
> NodeClass$RawEdgesIterator.getInput(NodeClass.java:1041)
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.graph.
> NodeClass$RawEdgesIterator.forward(NodeClass.java:981)
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.graph.
> NodeClass$RawEdgesIterator.hasNext(NodeClass.java:974)
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.phases.
> schedule.SchedulePhase$Instance.scheduleEarliestIterative(
> SchedulePhase.java:743)
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.phases.
> schedule.SchedulePhase$Instance.run(SchedulePhase.java:167)
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.phases.
> schedule.SchedulePhase.run(SchedulePhase.java:126)
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.
> run(Phase.java:47)
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.phases.
> BasePhase.apply(BasePhase.java:195)
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.
> apply(Phase.java:40)
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.virtual.
> phases.ea.EffectsPhase.runAnalysis(EffectsPhase.java:87)
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.virtual.
> phases.ea.PartialEscapePhase.run(PartialEscapePhase.java:80)
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.virtual.
> phases.ea.PartialEscapePhase.run(PartialEscapePhase.java:42)
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.phases.
> BasePhase.apply(BasePhase.java:195)
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.phases.
> BasePhase.apply(BasePhase.java:137)
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.phases.
> PhaseSuite.run(PhaseSuite.java:203)
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.phases.
> BasePhase.apply(BasePhase.java:195)
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.phases.
> BasePhase.apply(BasePhase.java:137)
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.core.
> GraalCompiler.emitFrontEnd(GraalCompiler.java:229)
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.core.
> GraalCompiler.compile(GraalCompiler.java:172)
> > >       at jdk.internal.vm.compiler/org.graalvm.compiler.core.
> GraalCompiler.compileGraph(GraalCompiler.java:158)
> > >       at jdk.aot/jdk.tools.jaotc.AOTBackend.compileGraph(
> AOTBackend.java:141)
> > >       at jdk.aot/jdk.tools.jaotc.AOTBackend.compileMethod(
> AOTBackend.java:103)
> > >       at jdk.aot/jdk.tools.jaotc.AOTCompilationTask.run(
> AOTCompilationTask.java:121)
> > >       at java.base/java.util.concurrent.ThreadPoolExecutor.
> runWorker(ThreadPoolExecutor.java:1131)
> > >       at java.base/java.util.concurrent.ThreadPoolExecutor$
> Worker.run(ThreadPoolExecutor.java:631)
> > >       at java.base/java.lang.Thread.run(Thread.java:844)
> > >  failed M2([C[SLjava/lang/Number;Ljava/lang/Number;Ljava/lang/
> Short;Ljava/lang/Float;SLjava/lang/Character;[F)V
> > > 0 methods compiled, 1 methods failed (80228 ms)
> > > Freeing memory [used: 430.5 MB, comm: 627.0 MB, freeRatio ~= 31.3%]
> (22 ms)
> > > Parsing compiled code (3 ms)
> > > Freeing memory [used: 9.8 MB , comm: 24.0 MB, freeRatio ~= 59.0%] (20
> ms)
> > > Processing metadata (146 ms)
> > > Freeing memory [used: 6.1 MB , comm: 24.0 MB, freeRatio ~= 74.7%] (20
> ms)
> > > Preparing stubs binary (3 ms)
> > > Preparing compiled binary (1 ms)
> > > .header: 57 bytes
> > > .config: 40 bytes
> > > .kls.offsets: 0 bytes
> > > .meth.offsets: 0 bytes
> > > .kls.dependencies: 0 bytes
> > > .stubs.offsets: 964 bytes
> > > .meth.metadata: 6792 bytes
> > > .text: 21344 bytes
> > > .code.segments: 165 bytes
> > > .meth.constdata: 29152 bytes
> > > .kls.got: 0 bytes
> > > .cnt.got: 0 bytes
> > > .meta.got: 0 bytes
> > > .meth.state: 320 bytes
> > > .oop.got: 0 bytes
> > > .meta.names: 1874 bytes
> > > Freeing memory [used: 6.1 MB , comm: 24.0 MB, freeRatio ~= 74.7%] (20
> ms)
> > > Creating binary: C0 (74 ms)
> > > Freeing memory [used: 6.1 MB , comm: 24.0 MB, freeRatio ~= 74.7%] (20
> ms)
> > > Creating shared library: C0.so (13 ms)
> > > Final memory   [used: 5.9 MB , comm: 24.0 MB, freeRatio ~= 75.3%]
> > > Total time: 90239 ms
> > > real  1m32.837s
> > > user  1m36.420s
> > > sys   0m0.792s
> > >
> > >
> > > ============================================================
> ====================
> > >
> > > The crash is more easily to be reproduced in Oracle JDK 9.0.4+11
> (without -J-Xcomp)
> > >
> > > $ time ../../../jdk-9.0.4/bin/jaotc --output C0.so --verbose -J-Dgraal.InlineDuringParsingMaxDepth=8
> --compile-commands commands.txt C0
> > > Compiling C0...
> > > 1 classes found (451 ms)
> > >  Scanning C0
> > >   added M2([C[SLjava/lang/Number;Ljava/lang/Number;Ljava/lang/
> Short;Ljava/lang/Float;SLjava/lang/Character;[F)V
> > > 7 methods total, 1 methods to compile (95 ms)
> > > Freeing memory [used: 2.5 MB , comm: 8.0 MB , freeRatio ~= 68.7%] (803
> ms)
> > > Compiling with 8 threads
> > > .#
> > > # A fatal error has been detected by the Java Runtime Environment:
> > > #
> > > #  SIGSEGV (0xb) at pc=0x00007f43717c8d35, pid=20015, tid=20049
> > > #
> > > # JRE version: Java(TM) SE Runtime Environment (9.0+11) (build
> 9.0.4+11)
> > > # Java VM: Java HotSpot(TM) 64-Bit Server VM (9.0.4+11, compiled mode,
> tiered, jvmci, compressed oops, g1 gc, linux-amd64)
> > > # Problematic frame:
> > > # J 9702 c2 org.graalvm.compiler.graph.Edges.getNodeListUnsafe(Lorg/
> graalvm/compiler/graph/Node;J)Lorg/graalvm/compiler/graph/NodeList;
> jdk.internal.vm.compiler at 9.0.4 (12 bytes) @ 0x00007f43717c8d35
> [0x00007f43717c8d20+0x0000000000000015]
> > > #
> > > # Core dump will be written. Default location: Core dumps may be
> processed with "/usr/share/apport/apport %p %s %c %d %P" (or dumping to
> /home/t/Projects/JVMTesting/old-bugs/0123-old-bugs/jaotc-
> jdk-20180122171043/core.20015)
> > > #
> > > # An error report file with more information is saved as:
> > > # /home/t/Projects/JVMTesting/old-bugs/0123-old-bugs/jaotc-
> jdk-20180122171043/hs_err_pid20015.log
> > > Could not load hsdis-amd64.so; library not loadable; PrintAssembly is
> disabled
> > > #
> > > # If you would like to submit a bug report, please visit:
> > > #   http://bugreport.java.com/bugreport/crash.jsp
> > > #
> > > Aborted (core dumped)
> > > real  1m17.911s
> > > user  1m25.256s
> > > sys   0m0.896s
> > >
> > >
> > > === Exclude getNodeListUnsafe ===
> > >
> > > time ../../../jdk-9.0.4/bin/jaotc --output C0.so --verbose -J-Dgraal.InlineDuringParsingMaxDepth=8
> --compile-commands commands.txt -J-XX:CompileCommand=exclude,
> org.graalvm.compiler.graph.Edges::getNodeListUnsafe  C0
> > > CompileCommand: exclude org/graalvm/compiler/graph/
> Edges.getNodeListUnsafe
> > > Compiling C0...
> > > 1 classes found (17 ms)
> > >  Scanning C0
> > >   added M2([C[SLjava/lang/Number;Ljava/lang/Number;Ljava/lang/
> Short;Ljava/lang/Float;SLjava/lang/Character;[F)V
> > > 7 methods total, 1 methods to compile (4 ms)
> > > Freeing memory [used: 2.1 MB , comm: 8.0 MB , freeRatio ~= 73.6%] (20
> ms)
> > > Compiling with 8 threads
> > > .#
> > > # A fatal error has been detected by the Java Runtime Environment:
> > > #
> > > #  SIGSEGV (0xb) at pc=0x00007ff051b6ab29, pid=20922, tid=20956
> > > #
> > > # JRE version: Java(TM) SE Runtime Environment (9.0+11) (build
> 9.0.4+11)
> > > # Java VM: Java HotSpot(TM) 64-Bit Server VM (9.0.4+11, mixed mode,
> aot, tiered, jvmci, compressed oops, g1 gc, linux-amd64)
> > > # Problematic frame:
> > > # j  org.graalvm.compiler.graph.Edges.getNodeListUnsafe(Lorg/
> graalvm/compiler/graph/Node;J)Lorg/graalvm/compiler/graph/NodeList;+5
> jdk.internal.vm.compiler at 9.0.4
> > > #
> > > # Core dump will be written. Default location: Core dumps may be
> processed with "/usr/share/apport/apport %p %s %c %d %P" (or dumping to
> /home/t/Projects/JVMTesting/old-bugs/0123-old-bugs/jaotc-
> jdk-20180122171043/core.20922)
> > > #
> > > # An error report file with more information is saved as:
> > > # /home/t/Projects/JVMTesting/old-bugs/0123-old-bugs/jaotc-
> jdk-20180122171043/hs_err_pid20922.log
> > > Compiled method (c1)   65364 1005       1
>  sun.misc.Unsafe::getObject (9 bytes)
> > >  total in heap  [0x00007ff05965cb90,0x00007ff05965cee0] = 848
> > >  relocation     [0x00007ff05965cd00,0x00007ff05965cd28] = 40
> > >  main code      [0x00007ff05965cd40,0x00007ff05965ce20] = 224
> > >  stub code      [0x00007ff05965ce20,0x00007ff05965ceb0] = 144
> > >  scopes data    [0x00007ff05965ceb0,0x00007ff05965ceb8] = 8
> > >  scopes pcs     [0x00007ff05965ceb8,0x00007ff05965ced8] = 32
> > >  dependencies   [0x00007ff05965ced8,0x00007ff05965cee0] = 8
> > > Could not load hsdis-amd64.so; library not loadable; PrintAssembly is
> disabled
> > > #
> > > # If you would like to submit a bug report, please visit:
> > > #   http://bugreport.java.com/bugreport/crash.jsp
> > > #
> > > Aborted (core dumped)
> > > real  1m5.467s
> > > user  1m21.900s
> > > sys   0m0.444s
> > >
> > >
> > >
> > >
> > > On Wed, Jan 24, 2018 at 12:04 PM, Tianxiao Gu <tianxiao.gu at gmail.com>
> wrote:
> > > Thanks, Doug.
> > >
> > > I agree with you. The fatal error indicates that the C2 compiler may
> generate problematic code for a method (see below) of graal, when graal
> itself has been driven to a crazy state by the input C0.class.
> > > I will file an issue with another class that does not end with a fatal
> error of the runtime but still leads to a long compile time.
> > >
> > > Stack: [0x00007f29a22c2000,0x00007f29
> > > a23c3000],  sp=0x00007f29a23c06d0,  free space=1017k
> > > Native frames: (J=compiled Java code, A=aot compiled Java code,
> j=interpreted, Vv=VM code, C=native code)
> > > J 3623% c2
> > > org.graalvm.compiler.phases.schedule.SchedulePhase$Instance.
> scheduleEarliestIterative(Lorg/graalvm/compiler/core/
> common/cfg/BlockMap;Lorg/graalvm/compiler/graph/
> NodeMap;Lorg/graalvm/compiler/graph/NodeBitMap;Lorg/graalvm/
> compiler/nodes/StructuredGraph;Z)V jdk.internal.vm.compiler (999 bytes) @
> 0x00007f2a04f371a2 [0x00007f2a04f368e0+0x00000000
> > > 000008c2]
> > > j
> > >
> > >
> > > On Wed, Jan 24, 2018 at 3:02 AM, Doug Simon <doug.simon at oracle.com>
> wrote:
> > > Hi Tianxiao,
> > >
> > > As far as I'm aware, Graal compiled code does not run during jaotc so
> I don't think the crash is Graal related. It's in a C2 compiled method.
> > >
> > > That said, the long compile time is almost certainly some issue in
> Graal. Looking at the class file, it seems like some inlining maybe be
> going crazy on the infinitely recursive C0.M0() method and I can confirm
> this with:
> > >
> > > jaotc -J-Dgraal.TraceInlineDuringParsing=true C0.class
> > >
> > > Can you please file an issue at https://github.com/oracle/graal/issues
> and we will investigate further.
> > >
> > > -Doug
> > >
> > > > On 24 Jan 2018, at 09:00, Tianxiao Gu <tianxiao.gu at gmail.com> wrote:
> > > >
> > > > Hi All,
> > > >
> > > > I found some abnormal behavior of jaotc. It takes 23 minutes for
> jaotc (head) to compile a 3012-byte generated class file (C0.class)
> > > > and jaotc ends with a fatal error. I have managed to reproduce this
> issue on my machine for 4 times.
> > > >
> > > > Related files are hosted on Google Drive:
> > > >
> > > > https://drive.google.com/open?id=1u9O3uPkvucX6PWQkMFER3NAUWIR_KglE
> > > >
> > > > Reproducing Steps:
> > > >
> > > > jaotc --output C0.so C0.class
> > > >
> > > > Environment:
> > > >
> > > > `java --version`
> > > >
> > > > openjdk 10-internal 2018-03-20
> > > > OpenJDK Runtime Environment (build 10-internal+0-adhoc.t.jdk)
> > > > OpenJDK 64-Bit Server VM (build 10-internal+0-adhoc.t.jdk, mixed
> mode)
> > > >
> > > > `lscpu`
> > > >
> > > > Architecture:          x86_64
> > > > CPU op-mode(s):        32-bit, 64-bit
> > > > Byte Order:            Little Endian
> > > > CPU(s):                8
> > > > On-line CPU(s) list:   0-7
> > > > Thread(s) per core:    2
> > > > Core(s) per socket:    4
> > > > Socket(s):             1
> > > > NUMA node(s):          1
> > > > Vendor ID:             GenuineIntel
> > > > CPU family:            6
> > > > Model:                 158
> > > > Model name:            Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz
> > > > Stepping:              9
> > > > CPU MHz:               900.000
> > > > CPU max MHz:           4200.0000
> > > > CPU min MHz:           800.0000
> > > > BogoMIPS:              7200.00
> > > > Virtualization:        VT-x
> > > > L1d cache:             32K
> > > > L1i cache:             32K
> > > > L2 cache:              256K
> > > > L3 cache:              8192K
> > > > NUMA node0 CPU(s):     0-7
> > > > Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep
> mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe
> syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts
> rep_good nopl xtopology nonstop_tsc aperfmperf tsc_known_freq pni pclmulqdq
> dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid
> sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c
> rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority
> ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx
> rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat
> pln pts hwp hwp_notify hwp_act_window hwp_epp
> > > >
> > > > `uname -a`
> > > >
> > > > Linux xtiger 4.10.0-42-generic #46~16.04.1-Ubuntu SMP Mon Dec 4
> 15:57:59 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
> > >
> > >
> > >
> >
> >
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20180129/2eddf414/attachment-0001.html>


More information about the hotspot-compiler-dev mailing list