RFR: 8253064: monitor list simplifications and getting rid of TSM [v5]

Daniel D.Daugherty dcubed at openjdk.java.net
Tue Nov 10 20:59:58 UTC 2020


On Tue, 10 Nov 2020 20:34:12 GMT, Robbin Ehn <rehn at openjdk.org> wrote:

>> Daniel D. Daugherty has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   coleenp CR - refactor common ThreadBlockInVM code block into ObjectSynchronizer::chk_for_block_req().
>
> Hi, thanks for fixing.
> 
> I had some comments nothing major so approving.

@robehn - Thanks for the review!! And thanks for approving.

> src/hotspot/share/runtime/synchronizer.cpp line 1419:
> 
>> 1417:                  ", count=" SIZE_FORMAT ", max=" SIZE_FORMAT, op_name,
>> 1418:                  in_use_list_ceiling(), _in_use_list.count(), _in_use_list.max());
>> 1419:     timer_p->start();
> 
> ThreadBlockInVM have a miss-feature: it safepoint polls on front-edge and back-edge.
> It should only have that poll on backedge, once that is fixed, this will do the wrong thing.
> Also you may safepoint on both front-edge and back-edge now, so the timer would show the wrong thing then.
> 
> So to get the timer correct you should use:
> SafepointMechanism::process_if_requested(thread);

The baseline code (ObjectSynchronizer::deflate_common_idle_monitors())
uses ThreadBlockInVM currently. I don't want to change that as part of
this work. If we want to generally change uses of ThreadBlockInVM to
something else, then we should do that with a dedicated bug.

> src/hotspot/share/runtime/synchronizer.cpp line 1532:
> 
>> 1530:         // A JavaThread must check for a safepoint/handshake and honor it.
>> 1531:         chk_for_block_req(self->as_Java_thread(), "deletion", "deleted_count",
>> 1532:                           deleted_count, ls, &timer);
> 
> If you release oopStorage when deflating you can do this entire loop while blocked instead, which will be faster.
> 
> (From what I remember you can actually release during a safepoint, but that is not future-prof as I understood it then. So I skipped going into that rabbit hole this time also.)

@fisk said we should not release the oopStorage during a safepoint
because that's not safe or will not be safe. I can't remember which.

> src/hotspot/share/runtime/objectMonitor.hpp line 148:
> 
>> 146:   DEFINE_PAD_MINUS_SIZE(0, OM_CACHE_LINE_SIZE, sizeof(volatile markWord) +
>> 147:                         sizeof(WeakHandle));
>> 148:   // Used by async deflation as a marker in the _owner field:
> 
> I have test with and without padding, I saw no difference.

We've removed enough padding with this work already. If we
want to do more padding removal, then we need to use a
different RFE.

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

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


More information about the serviceability-dev mailing list