Request for Review (XS) - 8149643: Remove check of counters in VirtualSpaceNode::inc_container_count
Bengt Rutisson
bengt.rutisson at oracle.com
Fri Feb 12 07:33:09 UTC 2016
Hi Jon,
On 2016-02-12 06:39, Jon Masamitsu wrote:
> Version 2 of the webrev. I've hoisted the first verification out of
> both loops in retire() and moved the second one out of the inner
> loop. I've also added the verification to the purge() method because
> it is there that the count is used and an incorrect value could
> go unnoticed.
>
> http://cr.openjdk.java.net/~jmasa/8149643/webrev.01/
Looks good to me.
Thanks,
Bengt
>
> Thanks.
>
> Jon
>
> On 2/11/2016 12:28 PM, Bengt Rutisson wrote:
>>
>> Hi Jon and Dmitry,
>>
>> On 2016-02-11 18:56, Jon Masamitsu wrote:
>>> https://bugs.openjdk.java.net/browse/JDK-8149643
>>>
>>> As part of managing Metaspaces a running count of the
>>> number of Metachunks in a virtual-space is maintained.
>>> The count is incremented as chunks are allocated from the
>>> virtual-space. The count can be verified by walking over
>>> all the Metachunks in the virtual space. This change
>>> removes the verification code which was called each time
>>> the running count was incremented. The verification is
>>> costly and no longer worth doing at each increment. It is
>>> still verified when the virtual-space is being retired.
>>>
>>> Contributed by: dmitry.dmitriev at oracle.com
>>>
>>> http://cr.openjdk.java.net/~jmasa/8149643/webrev.00/
>>
>> Looks ok, but I have a question about the other place where the
>> verification is done. In VirtualSpaceNode::retire().
>>
>> It does:
>>
>>
>> while (free_words_in_vs() >= chunk_size) {
>> DEBUG_ONLY(verify_container_count();)
>> // do some stuff...
>> DEBUG_ONLY(verify_container_count();)
>> }
>>
>> The first verification call can only every fail the first time (after
>> that it is just one more call to the verification just after we
>> returned from doing verfication). So, if this is considered an
>> expensive verification I would suggest changing this to:
>>
>> DEBUG_ONLY(verify_container_count();)
>> while (free_words_in_vs() >= chunk_size) {
>> // do some stuff...
>> DEBUG_ONLY(verify_container_count();)
>> }
>>
>> This code still looks a bit paranoid so I think there are even more
>> simplifications to be done if desired, but at least removing the
>> double verification seems like worth while doing.
>>
>> Thanks,
>> Bengt
>>
>>
>>>
>>> The change is the deletion of 1 line.
>>>
>>> --- a/src/share/vm/memory/metaspace.cpp
>>>
>>> +++ b/src/share/vm/memory/metaspace.cpp
>>>
>>> @@ -791,7 +791,6 @@
>>>
>>> void VirtualSpaceNode::inc_container_count() {
>>>
>>> assert_lock_strong(SpaceManager::expand_lock());
>>>
>>> _container_count++;
>>>
>>> - DEBUG_ONLY(verify_container_count();)
>>>
>>> }
>>>
>>>
>>> Testing with some specjvm benchmarks.
>>>
>>> Thanks.
>>>
>>> Jon
>>
>
More information about the hotspot-gc-dev
mailing list