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

Shenandoah: Traversal should not CAS the roots



    • gc
    • b20


      This is captured by asserts from JDK-8232729 with hotspot_gc_shenandoah on x86_64:

      # A fatal error has been detected by the Java Runtime Environment:
      # Internal Error (/home/shade/trunks/jdk-jdk/src/hotspot/share/gc/shenandoah/shenandoahHeap.inline.hpp:133), pid=10196, tid=10214
      # assert(is_aligned(addr, HeapWordSize)) failed: Address should be aligned: 0x00007f9c04e7eaf6
      # JRE version: OpenJDK Runtime Environment (14.0) (fastdebug build 14-internal+0-adhoc.shade.jdk-jdk)
      # Java VM: OpenJDK 64-Bit Server VM (fastdebug 14-internal+0-adhoc.shade.jdk-jdk, mixed mode, sharing, tiered, compressed oops, shenandoah gc, linux-amd64)
      # Problematic frame:
      # V [libjvm.so+0x13bfa67] ShenandoahHeap::cas_oop(oop, oop*, oop)+0xb7
      # 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/shade/trunks/jdk-jdk/build/linux-x86_64-server-fastdebug/test-support/jtreg_test_hotspot_jtreg_hotspot_gc_shenandoah/scratch/2/core.10196)
      # If you would like to submit a bug report, please visit:
      # http://bugreport.java.com/bugreport/crash.jsp

      --------------- T H R E A D ---------------

      Current thread (0x00007f9bec001000): GCTaskThread "Shenandoah GC Threads#4" [stack: 0x00007f9bfd9ef000,0x00007f9bfdaef000] [id=10214]

      Stack: [0x00007f9bfd9ef000,0x00007f9bfdaef000], sp=0x00007f9bfdaed940, free space=1018k
      Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native code)
      V [libjvm.so+0x13bfa67] ShenandoahHeap::cas_oop(oop, oop*, oop)+0xb7
      V [libjvm.so+0x16b1266] void ShenandoahTraversalGC::process_oop<oop, false, false>(oop*, Thread*, Padded<BufferedOverflowTaskQueue<ObjArrayChunkedTask, (MemoryType)5, 131072u>, 128ul>*, ShenandoahMarkingContext*) [clone .constprop.488]+0x146
      V [libjvm.so+0x139df94] nmethod::oops_do(OopClosure*, bool)+0x1d4
      V [libjvm.so+0xdfde63] MarkingCodeBlobClosure::do_code_blob(CodeBlob*)+0x43
      V [libjvm.so+0x16068d1] void ShenandoahCodeRootsIterator::fast_parallel_blobs_do<true>(CodeBlobClosure*)+0x131
      V [libjvm.so+0x16b8e21] ShenandoahRootScanner<ShenandoahCsetCodeRootsIterator>::roots_do(unsigned int, OopClosure*, CLDClosure*, CodeBlobClosure*, ThreadClosure*)+0x1f1
      V [libjvm.so+0x16b9183] ShenandoahInitTraversalCollectionTask::work(unsigned int)+0x203
      V [libjvm.so+0x1969480] GangWorker::loop()+0xe0
      V [libjvm.so+0x182f816] Thread::call_run()+0xf6
      V [libjvm.so+0x142c26e] thread_native_entry(Thread*)+0x10e

      The underlying reason for this is trying to CAS the roots that are not aligned to the pointer size, notably code roots. Normal concurrent cycle avoids this by updating the roots with plain stores, Traversal should do the same.


        Issue Links



              shade Aleksey Shipilev
              shade Aleksey Shipilev
              0 Vote for this issue
              1 Start watching this issue