Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8353691

GenShen: gc/TestAllocHumongousFragment.java#generational crash on ppc64le

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: P4 P4
    • None
    • None
    • hotspot
    • gc
    • ppc

      When I verify the fix for remembered set verification bug(https://github.com/openjdk/jdk/pull/24092), I have also run a lot test on ppc64le if the remembered set validation issue(https://bugs.openjdk.org/browse/JDK-8345399) has been fixed. From the tests, I didn't see remembered set validation error but I did see crashes from different places, and seems to be related to Shenandoah barrier set implementation for ppc64.

      Test to reproduce the crash:
      ```
      make test TEST=gc/TestAllocHumongousFragment.java#generational JTREG_REPEAT_COUNT=2000
      ```
      On ppc64le, the test can stably reproduce the crash after repeating the test less than 200 times, there mainly three different type of crashes:

      1. assert(!is_null(v)) failed: narrow klass value can never be zero:

      ```
      Stack: [0x00007e88d0030000,0x00007e88d0240000], sp=0x00007e88d023ddc0, free space=2103k
      Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
      V [libjvm.so+0x2a8ee4] CompressedKlassPointers::decode_not_null(unsigned int)+0x394 (compressedKlass.inline.hpp:48)
      V [libjvm.so+0x19b7f48] ShenandoahAsserts::assert_correct(void*, oop, char const*, int)+0xbb8 (oop.inline.hpp:103)
      V [libjvm.so+0x19b97fc] ShenandoahAsserts::assert_not_forwarded(void*, oop, char const*, int)+0xac (shenandoahAsserts.cpp:339)
      V [libjvm.so+0x1a131b0] void ShenandoahMark::mark_through_ref<oop, (ShenandoahGenerationType)2>(oop*, Padded<BufferedOverflowTaskQueue<ShenandoahMarkTask, (MemTag)5, 131072u>, 128ul>*, Padded<BufferedOverflowTaskQueue<ShenandoahMarkTask, (MemTag)5, 131072u>, 128ul>*, ShenandoahMarkingContext*, bool)+0x320 (shenandoahMark.inline.hpp:305)
      V [libjvm.so+0x1a1399c] ShenandoahSATBBufferClosure<(ShenandoahGenerationType)2>::do_buffer(void**, unsigned long)+0x6c (shenandoahMark.inline.hpp:274)
      V [libjvm.so+0x193c46c] SATBMarkQueueSet::apply_closure_to_completed_buffer(SATBBufferClosure*)+0x6c (satbMarkQueue.cpp:210)
      V [libjvm.so+0x1afd28c] ShenandoahMark::mark_loop(unsigned int, TaskTerminator*, ShenandoahReferenceProcessor*, ShenandoahGenerationType, bool, StringDedupMode, StringDedup::Requests*)+0x1fbc (shenandoahMark.cpp:189)
      V [libjvm.so+0x1a0aecc] ShenandoahConcurrentMarkingTask<(ShenandoahGenerationType)2>::work(unsigned int)+0x1ac (shenandoahConcurrentMark.cpp:71)
      V [libjvm.so+0x1f63d28] WorkerThread::run()+0xf8 (workerThread.cpp:69)
      V [libjvm.so+0x1d965e0] Thread::call_run()+0xe0 (thread.cpp:231)
      V [libjvm.so+0x1761708] thread_native_entry(Thread*)+0x178 (os_linux.cpp:877)
      C [libc.so.6+0xb5804]
      ```

      2. assert(Universe::is_in_heap(result)) failed: object not in heap <addess> (mbaesken@ also reported the crash in JDK-8345399) :
      ```
      Stack: [0x000073bc417c0000,0x000073bc419d0000], sp=0x000073bc419cdd50, free space=2103k
      Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
      V [libjvm.so+0x4fcbb4] CompressedOops::decode_not_null(narrowOop)+0x214 (compressedOops.inline.hpp:58)
      V [libjvm.so+0x1aebb4c] void ShenandoahMark::mark_through_ref<narrowOop, (ShenandoahGenerationType)1>(narrowOop*, Padded<BufferedOverflowTaskQueue<ShenandoahMarkTask, (MemTag)5, 131072u>, 128ul>*, Padded<BufferedOverflowTaskQueue<ShenandoahMarkTask, (MemTag)5, 131072u>, 128ul>*, ShenandoahMarkingContext*, bool) [clone .isra.0]+0xac (shenandoahMark.inline.hpp:302)
      V [libjvm.so+0x1b22ad8] void objArrayOopDesc::oop_iterate_range<ShenandoahMarkRefsClosure<(ShenandoahGenerationType)1> >(ShenandoahMarkRefsClosure<(ShenandoahGenerationType)1>*, int, int)+0x1b8 (shenandoahClosures.inline.hpp:81)
      V [libjvm.so+0x1aeea60] void ShenandoahMark::do_chunked_array_start<ShenandoahMarkRefsClosure<(ShenandoahGenerationType)1> >(Padded<BufferedOverflowTaskQueue<ShenandoahMarkTask, (MemTag)5, 131072u>, 128ul>*, ShenandoahMarkRefsClosure<(ShenandoahGenerationType)1>*, oop, bool) [clone .isra.0]+0x190 (shenandoahMark.inline.hpp:170)
      V [libjvm.so+0x1af0108] void ShenandoahMark::do_task<ShenandoahMarkRefsClosure<(ShenandoahGenerationType)1>, (ShenandoahGenerationType)1, (StringDedupMode)0>(Padded<BufferedOverflowTaskQueue<ShenandoahMarkTask, (MemTag)5, 131072u>, 128ul>*, ShenandoahMarkRefsClosure<(ShenandoahGenerationType)1>*, unsigned short*, StringDedup::Requests*, ShenandoahMarkTask*, unsigned int) [clone .isra.0]+0x5a8 (shenandoahMark.inline.hpp:91)
      V [libjvm.so+0x1afb080] void ShenandoahMark::mark_loop<false, (StringDedupMode)0>(unsigned int, TaskTerminator*, ShenandoahReferenceProcessor*, ShenandoahGenerationType, StringDedup::Requests*) [clone .isra.0]+0x1b30 (shenandoahMark.cpp:196)
      V [libjvm.so+0x1b8e350] ShenandoahSTWMark::finish_mark(unsigned int)+0x140 (shenandoahSTWMark.cpp:156)
      V [libjvm.so+0x1b8faf4] ShenandoahSTWMarkTask::work(unsigned int)+0xd4 (shenandoahSTWMark.cpp:57)
      V [libjvm.so+0x1f63d28] WorkerThread::run()+0xf8 (workerThread.cpp:69)
      V [libjvm.so+0x1d965e0] Thread::call_run()+0xe0 (thread.cpp:231)
      V [libjvm.so+0x1761708] thread_native_entry(Thread*)+0x178 (os_linux.cpp:877)
      C [libc.so.6+0xb5804]
      ```

      3. SIGSEGV (0xb) at pc=0x00007c42bbb723dc, pid=538321, tid=538349:

      ```
      Stack: [0x00007c428d390000,0x00007c428d5a0000], sp=0x00007c428d59d670, free space=2101k
      Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
      j TestAllocHumongousFragment.main([Ljava/lang/String;)V+79
      j java.lang.invoke.LambdaForm$DMH+0x000003df01002000.invokeStatic(Ljava/lang/Object;Ljava/lang/Object;)V+10 java.base@25-internal
      j java.lang.invoke.LambdaForm$MH+0x000003df01003400.invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+33 java.base@25-internal
      j java.lang.invoke.Invokers$Holder.invokeExact_MT(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+20 java.base@25-internal
      j jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+55 java.base@25-internal
      j jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+23 java.base@25-internal
      j java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+102 java.base@25-internal
      j com.sun.javatest.regtest.agent.MainWrapper$MainTask.run()V+134
      j java.lang.Thread.runWith(Ljava/lang/Object;Ljava/lang/Runnable;)V+5 java.base@25-internal
      j java.lang.Thread.run()V+19 java.base@25-internal
      v ~StubRoutines::call_stub 0x00007c42bbb5083c
      V [libjvm.so+0x100333c] JavaCalls::call_helper(JavaValue*, methodHandle const&, JavaCallArguments*, JavaThread*)+0x55c (javaCalls.cpp:415)
      V [libjvm.so+0x175dc9c] os::os_exception_wrapper(void (*)(JavaValue*, methodHandle const&, JavaCallArguments*, JavaThread*), JavaValue*, methodHandle const&, JavaCallArguments*, JavaThread*)+0x3c (os_linux.cpp:4995)
      V [libjvm.so+0x1003a8c] JavaCalls::call_virtual(JavaValue*, Klass*, Symbol*, Symbol*, JavaCallArguments*, JavaThread*)+0x36c (javaCalls.cpp:323)
      V [libjvm.so+0x1004168] JavaCalls::call_virtual(JavaValue*, Handle, Klass*, Symbol*, Symbol*, JavaThread*)+0xd8 (javaCalls.cpp:185)
      V [libjvm.so+0x120e7c8] thread_entry(JavaThread*, JavaThread*)+0x108 (jvm.cpp:2746)
      V [libjvm.so+0x105eecc] JavaThread::thread_main_inner()+0x17c (javaThread.cpp:776)
      V [libjvm.so+0x1d965e0] Thread::call_run()+0xe0 (thread.cpp:231)
      V [libjvm.so+0x1761708] thread_native_entry(Thread*)+0x178 (os_linux.cpp:877)
      C [libc.so.6+0xb5804]
      ```

      I have ran the same test on aarch64 and x86, both worked fine w/o any crash after 2000 repeating runs.

        1. pid1694895-gc.log
          66 kB
        2. pid1694895-hs_err.log
          472 kB
        3. pid525434-gc.log
          36 kB
        4. pid525434-hs_err.log
          441 kB
        5. pid538321-gc.log
          27 kB
        6. pid538321-hs_err.log
          448 kB
        7. pid566573-gc.log
          22 kB
        8. pid566573-hs_err.log
          444 kB

            Unassigned Unassigned
            xpeng Xiaolong Peng
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: