-
Enhancement
-
Resolution: Fixed
-
P4
-
13
-
b05
-
generic
-
generic
The PtrQueue class provides a free list for recycling buffers that have been used and processed. This free list is presently protected by a Mutex. Because the free list may need to be accessed as part of an Access barrier, the mutex must have "access" rank. This mutex can also be a significant source of contention.
This free list could use a lock-free stack. The ABA problem for pop operations can be addressed by using GlobalCounter critical sections. A pop operation is performed within a critical section. A push operation first write_synchronizes then adds the buffer to the list. This puts any delays on the "GC" processing side of the free list, making the mutator pops to obtain buffers inexpensive.
This free list could use a lock-free stack. The ABA problem for pop operations can be addressed by using GlobalCounter critical sections. A pop operation is performed within a critical section. A push operation first write_synchronizes then adds the buffer to the list. This puts any delays on the "GC" processing side of the free list, making the mutator pops to obtain buffers inexpensive.
- is blocked by
-
JDK-8212827 GlobalCounter should support nested critical sections
- Resolved
- relates to
-
JDK-8217419 Shenandoah fails to build after JDK-8212826 (Make PtrQueue free list lock-free)
- Resolved
-
JDK-8217423 Windows gtest build fails after JDK-8212826 (Make PtrQueue free list lock-free)
- Resolved
-
JDK-8162929 Enqueuing dirty cards into a single DCQS during GC does not scale
- Resolved
-
JDK-8213352 Separate BufferNode allocation from PtrQueueSet
- Resolved