RFR (M) 8195099: Concurrent safe-memory-reclamation mechanism
Erik Österlund
erik.osterlund at oracle.com
Tue Apr 10 14:50:06 UTC 2018
Hi Robbin,
Looks good.
Thanks,
/Erik
On 2018-04-10 16:42, Robbin Ehn wrote:
> Hi Erik,
>
> On 04/10/2018 02:45 PM, Erik Österlund wrote:
>> Hi Robbin,
>>
>> The local counter loaded in critical_section_begin/end should not be
>> volatile (the compiler will produce unnecessarily crappy code).
>
> Thanks, fixed!
>
>>
>> globalCounter.hpp lacks a few includes:
>> memory/allocation.hpp and memory/padded.hpp.
>
> Thanks, fixed!
>
>>
>> Otherwise it looks good to me. I note that the lack of
>> release_store_fence() in critical_section_end() means that stores and
>> loads can float up into the critical section. I'm assuming that is
>> fine in the envisioned use cases, as long as accesses do not float
>> out from the critical section.
>
> Yes, you are correct, added a comment.
>
> Full: http://cr.openjdk.java.net/~rehn/8195099/v2/webrev/
> Inc : http://cr.openjdk.java.net/~rehn/8195099/v2/inc/webrev/
>
> Thanks, Robbin
>
>>
>> Thanks,
>> /Erik
>>
>> On 2018-04-10 14:18, Robbin Ehn wrote:
>>> Hi all,
>>>
>>> We have moved the global-counter to a separate change-set. The
>>> global-counter
>>> uses a counter to determine current generation. Any reader needs to
>>> have a local
>>> counter for which generation is currently read. By increment the
>>> global-counter
>>> and scan for threads reading an old generation and wait for them to
>>> complete, we
>>> know when an old generation is not visible (no pre-existing reader).
>>> In RCU
>>> terms, this creates a grace-period. Making this mechanism suitable
>>> for a read-mostly scenario. In this initial change-set we scan
>>> JavaThreads and the VMThread.
>>>
>>> A couple of enhancement to the global-counter will be looked into:
>>> - Quiescent state RCU semantic by using the natural state of
>>> JavaThreads in the VM.
>>> - Asynchronous write synchronize, where reclamation, if there are
>>> per-existing
>>> reader, is done by the last reader leaving that generation.
>>> - Register/deregister threads.
>>>
>>> The current usage is the upcoming hash-table which uses the
>>> global-counter to reclaim memory and to concurrently grow. We have
>>> also potential use-cases in
>>> other work-in-progress code.
>>>
>>> The new gtest passes on our platforms. For now you can look at the
>>> gtest if you think you have a use-case for this as an example.
>>>
>>> Code: http://cr.openjdk.java.net/~rehn/8195099/v1/webrev/
>>> Issue: https://bugs.openjdk.java.net/browse/JDK-8195099
>>>
>>> Thanks, Robbin
>>
More information about the hotspot-dev
mailing list