RFR: Locked allocation

Zhengyu Gu zgu at redhat.com
Wed Dec 14 18:39:04 UTC 2016


On 12/14/2016 01:10 PM, Zhengyu Gu wrote:

> Great job! It simplifies the logic a lot!
>
> A few minor suggestions:
>
> - ShenandoahFreeSet::clear()
>
>    I only see one path to this method and it is from safepoint. so
>    replacing fence with safepoint assertion should be appropriate.
>
> - asserting on _heap_lock == 1 on code paths that are protected by the 
> lock
>   makes code more readable.

Or make _heap_lock an opaque object and store owner thread pointer, so
can have assertion like assert(owned_by_self() ...), at least for debug mode.

-Zhengyu

>
> - Will this lock be hot? and you want to check safepoint during spinning?
>   I wonder if it has impact on TTSP
>
> Thanks,
>
> -Zhengyu
>
> On 12/14/2016 11:36 AM, Roman Kennke wrote:
>> This patch throws out all the lockfree allocation madness, and
>> implements a much simpler locked allocation. Since we can't easily use
>> Mutex and friends, and also don't need most of their functionality
>> (wait/notify, nesting, etc), I implemented a very simple (simple as in,
>> can read-and-understand it in one glance) CAS based spin-lock. This is
>> wrapped around the normal allocation path, the humongous allocation
>> path and the heap growing path. It is not locking around the call to
>> full-gc, as this involves other locks and as CHF says, there are
>> alligators there ;-)
>>
>> This does immensely simplify ShenandoahFreeSet, especially the racy
>> humongous allocation path. It does fix the bug that some people have
>> encountered about used not consistent with capacity.
>>
>> I've tested it using gc-bench (no regression in allocation throughput),
>> SPECjvm and jtreg tests. Looks all fine.
>>
>> When reviewing, please pay special attention to the lock in
>> ShenandoahHeap::allocate_memory()!
>>
>> http://cr.openjdk.java.net/~rkennke/lockedalloc/webrev.00/
>>
>> Ok?
>>
>> Roman
>



More information about the shenandoah-dev mailing list