JDK-8078117 : Refactor enqueue_discovered_references() and redirty_logged_cards() to share the same work gang.
  • Type: Enhancement
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: 9
  • Priority: P4
  • Status: Closed
  • Resolution: Won't Fix
  • Submitted: 2015-04-17
  • Updated: 2017-01-18
  • Resolved: 2015-10-07
Related Reports
Relates :  
Relates :  
Relates :  
Description
Use the same workgang for enqueue_discovered_references() and redirty_logged_cards() to share the parallel overhead for those two tasks.
Comments
Close for now as the experiments show that there's no benefit.
07-10-2015

Adding '8078117_results.jpg'. Comparison of benchmark score and GC pause time. specjbb2005: 10 iterations specjvm2008: 5 iterations.
07-10-2015

enqueue_discovered_references() is conditionally run in parallel while redirty_logged_cards() is always run in parallel. (enqueue_discovered_references() is controlled by ParallelRefProcEnabled to run in parallel) I made a prototype and did some experiments. The prototype is simple. Extend the the first task(enqueue_discovered_references related one) and add WorkGangBarrierSync as a member. And between 2 tasks call WorkGangBarrierSync.enter() to wait until first work is done. Expected to reduce startup/termination synchronization of the gang threads, but it was not good. I compared benchmark score and GC pause time for these tests. Specjvm2008: 5 iterations Specjbb2005: 10 iterations Attached image is the result of the comparison of benchmark score and GC pause time. This prototype made GC pause time worse. Webrev: http://cr.openjdk.java.net/~sangheki/8078117/webrev.proto_02
05-10-2015

May be applied in addition to 8078117
29-05-2015