Hi, Just to clarify, my builds are against the current patchset in the MLVM repository, so that might explain why you're not seeing these problems.
Cheers On 2011-05-25 14.29, Christian Thalinger wrote: > On May 25, 2011, at 5:58 AM, Ola Bini wrote: >> Hi, >> >> There are at least three problems that are still there. They might be >> connected, or not. >> (I will tell you how to reproduce these at the end) >> >> I just built a new JVM: >> openjdk version "1.7.0-internal" >> OpenJDK Runtime Environment (build >> 1.7.0-internal-olabini_2011_05_25_08_06-b00) >> OpenJDK Server VM (build 21.0-b09, mixed mode) >> >> I get that weird missing class error when running my test suite: >> java.lang.NoClassDefFoundError: seph/lang/SephObject >> java.lang.RuntimeException: java.lang.NoClassDefFoundError: >> seph/lang/SephObject >> at seph.lang.Runtime.evaluateStream(Runtime.java:132) >> at seph.lang.Runtime.evaluateString(Runtime.java:146) >> at >> seph.lang.code.BasicSanityTest.recursive_odd_and_even_that_should_blow_the_stack(BasicSanityTest.java:214) >> Caused by: java.lang.NoClassDefFoundError: seph/lang/SephObject >> at java.lang.invoke.MethodHandle.invokeExact(MethodHandle.java) >> at java.lang.invoke.MethodHandle.invokeExact(MethodHandle.java) >> at seph$gen$abstraction$41$even?.argument_0_0(<eval>:7) >> at seph.lang.compiler.Bootstrap.intrinsic_if(Bootstrap.java:654) >> at seph$gen$abstraction$41$even?.even?(<eval>:7) >> at seph$gen$abstraction$39$toplevel.toplevel(<eval>:25) >> at seph.lang.Runtime.evaluateStream(Runtime.java:125) >> >> This is obviously a complete blocker. >> >> Turning off the ricochet frames hits an NYI error when running the test >> suite. >> >> I'm still seeing a crash in ricochet frames: >> # >> # A fatal error has been detected by the Java Runtime Environment: >> # >> # SIGBUS (0xa) at pc=0x0104884f, pid=85043, tid=2953850880 >> # >> # JRE version: 7.0 >> # Java VM: OpenJDK Client VM (21.0-b09 mixed mode bsd-x86 ) >> # Problematic frame: >> # V [libjvm.dylib+0x4884f] MethodHandles::ricochet_frame_oops_do(frame >> const&, OopClosure*, RegisterMap const*)+0x12f >> # >> # Failed to write core dump. 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/olabini/workspace/seph/hs_err_pid85043.log >> # >> # If you would like to submit a bug report, please visit: >> # http://bugreport.sun.com/bugreport/crash.jsp >> # >> >> I've attached the error file. >> >> The third error (in frame.cpp) only happens on master of seph, but there >> are some other problems with master that means you get lots of weird output. >> >> In order to reproduce problem 1 and 2: >> git clone git://github.com/seph-lang/seph.git >> git checkout 9075c0f4ffe1adac0657057aee2193f16ad12a43 >> (build.xml: remove lines with <jvmarg value="-Xint"/>) >> >> problem 1: >> ant >> This should show you one entry of the missing class problem > > I tried this on solaris-i586 and it works: > > BUILD SUCCESSFUL > Total time: 29 seconds > >> >> problem 2: >> ant jar-notest >> bin/seph bench/bench_arithmetic.sp >> This should show you problem 2. >> If you for reference want to see the benchmark run correctly, do >> bin/seph -J-Xint bench/bench_arithmetic.sp > > Works too (with server compiler on b143). > >> >> problem 3: >> git checkout master >> git checkout 99c8f2609d468835390e39b68c73f21cc78e5ab5 >> ant clean jar-notest >> bin/seph bench/bench_arithmetic.sp >> This should show you problem 3. You will also see loads of other >> exceptions, since that point generates slightly bad bytecode. That >> shouldn't make the JVM crash though, I assume - and I've seen the >> frame.cpp should not reach here without seeing those exceptions. > > I think I see the exception you are talking about but there is so much output > that I'm not sure. > > I curious about where the problem lies, either it's a HotSpot fix that's not > in the mlvm repository yet or it's a JDK bug in one of the mlvm patches which > hasn't been pushed yet into the main repository. At least that's my best > guess. > > May I suggest that you guys also try with an official build (like JDK 7 b143) > from here (assuming everyone has some kind of access to a Linux box too): > > http://jdk7.java.net/download.html > > -- Christian > >> >> All of these require that JAVA_HOME points to the Java 7 you want to use >> >> Cheers >> >>> >>> tom >>> >>> On May 23, 2011, at 7:33 PM, Ola Bini wrote: >>> >>>> Hi, >>>> >>>> I'm happy to see that the performance degradation is getting >>>> addressed. I would like to point out that there is still a serious >>>> crash in the machinery too... Have you seen any reason why that >>>> happens? >>>> >>>> Cheers >>>> >>>> >>>> On 2011-05-24 06.11, John Rose wrote: >>>>> On May 23, 2011, at 3:44 PM, Tom Rodriguez wrote: >>>>> >>>>>>> I'd *love* for intermediate static Java snippits like this >>>>>>> to inline straight through, even if invokeExact would be >>>>>>> megamorphic under normal circumstances...but I don't think >>>>>>> that's the case right now, right? >>>>>> >>>>>> I haven't been following 292 that closely but it used to be a >>>>>> piece of code that did precisely that. >>>>>> >>>>>> + private Object invoke_L0() throws Throwable { + if >>>>>> ((boolean) test.invokeExact()) + return >>>>>> target.invokeExact(); + return >>>>>> fallback.invokeExact(); + } >>>>>> >>>>>> It looks like it was reworked at some point to use >>>>>> selectAlternative but the optimizer was never updated to deal >>>>>> with it properly. It's not particularly hard, we just need to >>>>>> generate code like we would for a bimorphic call site. The >>>>>> current code expects to either get a constant or something else >>>>>> and doesn't inline if it's something else. In this case we >>>>>> have a Phi of two constants which we just need to split. >>>>> >>>>> Yes, it would be a quasi-bimorphic call site keyed from a phi of >>>>> two constants, instead of a profile of two receiver classes. >>>>> >>>>>> I'm still unclear why you couldn't write your own variant of >>>>>> guardWithTest and have it work but my knowledge of what's >>>>>> really allowed is somewhat limited. >>>>> >>>>> Those snippets will inline (I think), but at some point Charlie >>>>> will want to fetch a bit of constant stuff out of an instance >>>>> variable. That will look non-constant to the optimizer, even if >>>>> the instance variable is final and the enclosing object is a >>>>> constant reference. We made sure this happens for >>>>> java.lang.invoke classes, but we haven't extended it yet to user >>>>> code, in part because it would have its own bug tail to work >>>>> through. >>>>> >>>>> -- John _______________________________________________ mlvm-dev >>>>> mailing list mlvm-dev@openjdk.java.net >>>>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev >>>>> >>>> >>>> >>>> -- Ola Bini (http://olabini.com) Ioke - JRuby - ThoughtWorks >>>> >>>> "Yields falsehood when quined" yields falsehood when quined. >>>> >>>> _______________________________________________ mlvm-dev mailing >>>> list mlvm-dev@openjdk.java.net >>>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev >>> >>> _______________________________________________ mlvm-dev mailing >>> list mlvm-dev@openjdk.java.net >>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev > > > > _______________________________________________ > mlvm-dev mailing list > mlvm-dev@openjdk.java.net > http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev > -- Ola Bini (http://olabini.com) Ioke - JRuby - ThoughtWorks "Yields falsehood when quined" yields falsehood when quined. _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev