RFR: 8181859: Monitor deflation is not checked in cleanup path
serguei.spitsyn at oracle.com
serguei.spitsyn at oracle.com
Wed Jun 14 20:19:53 UTC 2017
Hi Robbin,
On 6/14/17 08:07, Daniel D. Daugherty wrote:
> On 6/14/17 7:22 AM, Robbin Ehn wrote:
>> Hi,
>>
>> On 06/14/2017 01:01 PM, Carsten Varming wrote:
>>> The last version looks good to me.
>>
>> Thanks, but unfortunately there is an error in my calculation.
>> If the is_cleanup check is run very early gMonitorPopulation is zero
>> resulting in a division by zero.
>>
>> Incremental:
>>
>> static bool monitors_used_above_threshold() {
>> + if (gMonitorPopulation == 0) {
>> + return false;
>> + }
>>
>>
>> Full: http://cr.openjdk.java.net/~rehn/8181859/5/webrev/
>
> src/share/vm/runtime/globals.hpp
> L1187 experimental(intx, MonitorUsedDeflationThreshold,
> 90, \
> L1188 "Percentage of used monitors before trigger
> cleanup " \
> L1189 "safepoint which deflates monitors (0 is
> off)" \
> L1190 "The check is performed on
> GuaranteedSafepointInterval") \
> L1191 range(0,
> 100) \
>
> nit - indent for L1188-91 should be after the '(' on L1187.
>
> typo - 'trigger' -> 'triggering'
> typo - 'off)' -> 'off).' (add period)
> typo - 'Interval")' -> 'Interval.")' (add period)
>
> src/share/vm/runtime/synchronizer.hpp
> nit - please update copyright year to 2017.
>
> L148 static bool is_cleanup_needed();
> nit - please move this decl above this line:
>
> L138: static void oops_do(OopClosure* f);
>
> so it will be between deflate_monitor() and oops_do().
> The extra blank line is not needed.
>
> src/share/vm/runtime/synchronizer.cpp
> I like the refactoring into monitors_used_above_threshold().
> No other comments.
>
> src/share/vm/runtime/safepoint.cpp
> L528: // Need a safepoint if there many monitor to deflate
> typo - 'there many' -> 'there are many'
> nit - please add a period to the end of the sentence.
One more typo at L528: 'monitor' -> 'monitors'
The fix looks good to me (modulo the typos Dan pointed out).
I also don't need to see another webrev if the typos are fixed.
Thanks,
Serguei
>
>
> Thumbs up! I don't need to see another webrev if you fix the
> typos and nits.
>
> Dan
>
>
>>
>> Thanks for bearing with me!
>>
>> Note:
>> monitors_used could be wrong since we don't read the values holding
>> gListLock.
>> So in a very unlikely scenario it could cost a safepoint.
>>
>> /Robbin
>>
>>>
>>> Carsten
>>>
>>> On Wed, Jun 14, 2017 at 5:40 AM, Robbin Ehn <robbin.ehn at oracle.com
>>> <mailto:robbin.ehn at oracle.com>> wrote:
>>>
>>> Hi Aleksey,
>>>
>>> On 06/14/2017 11:14 AM, Aleksey Shipilev wrote:
>>>
>>> On 06/14/2017 11:07 AM, Robbin Ehn wrote:
>>>
>>> Full:
>>> http://cr.openjdk.java.net/~rehn/8181859/2/webrev/
>>> <http://cr.openjdk.java.net/~rehn/8181859/2/webrev/>
>>>
>>>
>>> Looks good to me.
>>>
>>>
>>> Thanks!
>>>
>>>
>>> I would paranoidally add parentheses in this expression, but
>>> your choice.
>>>
>>> return MonitorUsedDeflationThreshold > 0 && (monitors_used *
>>> 100LL) /
>>> gMonitorPopulation > MonitorUsedDeflationThreshold;
>>>
>>>
>>> Discussed locally and this was suggested (looks good to me):
>>>
>>> static bool monitors_used_above_threshold() {
>>> int monitors_used = gMonitorPopulation - gMonitorFreeCount;
>>> int monitor_useage = (monitors_used * 100LL) /
>>> gMonitorPopulation;
>>> return monitor_useage > MonitorUsedDeflationThreshold;
>>> }
>>>
>>> bool ObjectSynchronizer::is_cleanup_needed() {
>>> if (MonitorUsedDeflationThreshold > 0) {
>>> return monitors_used_above_threshold();
>>> }
>>> return false;
>>> }
>>>
>>> Carsten, Aleksey, are you good with this?
>>>
>>> Full: http://cr.openjdk.java.net/~rehn/8181859/3/webrev/
>>> <http://cr.openjdk.java.net/~rehn/8181859/3/webrev/>
>>>
>>> Thanks, Robbin
>>>
>>>
>>>
>>> Thanks,
>>> -Aleksey
>>>
>>>
>>>
>
More information about the hotspot-runtime-dev
mailing list