RFR: 8280438: Improve BufferNode::Allocator::release to avoid walking pending list [v2]

Thomas Schatzl tschatzl at openjdk.java.net
Tue Feb 8 13:14:05 UTC 2022


On Mon, 31 Jan 2022 17:17:52 GMT, Kim Barrett <kbarrett at openjdk.org> wrote:

>> Please review this change to BufferNode::Allocator::release to avoid needing
>> to walk the pending list in preparation for transferring it to the free list.
>> We need to have both the head and the tail of the pending list to perform that
>> transfer.
>> 
>> Rather than using a LockFreeStack to accumulate the pending list, we now use a
>> bespoke data structure that only supports concurrent additions, since that's
>> all we need.  This simplifies the code, and also makes it easy to capture the
>> first pushed node as the tail.
>> 
>> To make the transfer from the pending list to the free list, we double-buffer
>> the pending list.  Additions are made to the currently active pending list.  A
>> transfer flips which pending list is active, and transfers from the list that
>> was just deactivated.  Additions are made in a critical section.  The critical
>> section synchronization already performed when transferring now does double
>> duty, also synchronizing the pending list flip.
>> 
>> Testing:
>> mach5 tier1-3
>> 
>> Ran a test with -Xlog:gc,ptrqueue,freelist and verified transfers were
>> occurring as expected.
>
> Kim Barrett has updated the pull request incrementally with two additional commits since the last revision:
> 
>  - update copyrights
>  - change _pending_lists init for compiler bug workaround

Lgtm.

-------------

Marked as reviewed by tschatzl (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/7210



More information about the hotspot-gc-dev mailing list