JDK-8076584 : G1: Parallelism used for redirty logged cards needs better control
  • Type: Enhancement
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: 9
  • Priority: P2
  • Status: Closed
  • Resolution: Duplicate
  • Submitted: 2015-04-02
  • Updated: 2024-07-23
  • Resolved: 2024-07-23
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
Other
tbdResolved
Related Reports
Duplicate :  
Relates :  
Relates :  
Relates :  
Relates :  
Description
The attached plot shows the redirty logged cards time for the standard JDK9 (b45), same with the SemaphoreWait improvements being implemented for lower G1 pauses and SemaphoreWait improvements and redirty logged cards done serially.  The SemaphoreWait work improves the results greatly but doing the work serially improves the pause an additional, significant amount.
Comments
The description suggests doing the operation serially was significantly better than alternatives. That may have been a consequence of JDK-8162929. But I agree we should look at the number of threads being used. The cost per card is pretty low, so there have to be a lot of cards per thread to make it worth spinning up more threads. This is similar to what we found with parallel reference processing.
30-08-2019

This is about selecting the correct number of threads or improving thread dispatch for the redirty card operation. JDK-8162929 is about how we store the cards collected during GC.
30-08-2019

I wonder if this was just another version of JDK-8162929? Maybe this is no longer an issue?
30-08-2019

Redirty with 1 GC thread for parallel workers (no semaphoreWait)
09-04-2015

default (no semaphoreWait)
09-04-2015

log for serial redirty (no semaphoreWait)
09-04-2015

log for redirty with MT=1
09-04-2015

Comparisons without the semaphoreWait changes: default, MT=1 for parallel threads used for redirty, serial redirtying.
09-04-2015

redirty logged cards with 1 thread (ParallelGCThreads is the default value but the number of threads used for redirty logged cards was set to 1). The difference between 1 parallel thread and serial code is minimal (indistiguishable in the plots).
02-04-2015

SemaphoreWait and serial redirty logged cards
02-04-2015

SemaphoreWait improvements
02-04-2015

Baseline jdk9 b45
02-04-2015

Redirty logged cards
02-04-2015