RFR: 8240239: Replace ConcurrentGCPhaseManager
sangheon.kim at oracle.com
sangheon.kim at oracle.com
Fri Mar 6 23:05:18 UTC 2020
On 3/6/20 2:30 PM, Kim Barrett wrote:
>> On Mar 6, 2020, at 2:40 AM, sangheon.kim at oracle.com wrote:
>>
>> Hi Kim,
>>
>> On 2/28/20 1:48 PM, Kim Barrett wrote:
>>> Please review this change which removes the ConcurrentGCPhaseManager
>>> class and replaces it with ConcurrentGCBreakpoints.
>>>
>>> This is joint work with Per Liden.
>>>
>>> This change provides a client API, used by WhiteBox. The usage model
>>> for a client is
>>>
>>> (1) Acquire control of concurrent collection cycles.
>>>
>>> (2) Do work that must be performed while the collection cycle is in a
>>> known state.
>>>
>>> (3) Request the concurrent collector run to a named "breakpoint", or
>>> run to completion, and then hold there, waiting for further commands.
>>>
>>> (4) Optionally goto (2).
>>>
>>> (5) Release control of concurrent collection cycles.
>>>
>>> Tests have been updated to use the new WhiteBox API.
>>>
>>> This change provides implementations of the new mechanism for G1 and
>>> ZGC. A Shenandoah implementation is being left to others, but we
>>> don't see any obvious reason for it to be difficult.
>>>
>>> CR:
>>> https://bugs.openjdk.java.net/browse/JDK-8240239
>>>
>>> Webrev:
>>> https://cr.openjdk.java.net/~kbarrett/8240239/open.03/
>> Looks good in general.
> Thanks.
>
>> But I have several minor nits.
>>
>> ------------------
>> src/hotspot/share/gc/g1/g1ConcurrentMarkThread.cpp
>> 215 // Pause Remark.
>> - Pre-existing: this comment should be moved to before line 221.
> I don't think the comment should be moved. The intervening stuff is
> all related to the remark pause, and in particular that it demarcates
> the completion of concurrent marking.
OK
>
>
>> 221 CMRemark cl(_cm);
>>
>> 216 ConcurrentGCBreakpoints::at("BEFORE MARKING COMPLETED");
>> 217 log_info(gc, marking)("Concurrent Mark (%.3fs, %.3fs) %.3fms",
>> - Do we need to add time spent by 'at'? If we need time spent on 'at', it would be better to separate the log.
> I don't think it matters much. Note that we're also including the
> time spent waiting on MMU. The delay caused by being stopped at a
> breakpoint obviously affects timing, one way or another.
OK
>
>> src/hotspot/share/gc/shared/concurrentGCBreakpoints.hpp
>> 118 static void at(const char* breakpoint);
>> - Don't we need more explanatory name? Something like reached_at? To me 'at' make me feel like the function would return none-void type. But this is my preference, so okay as is.
> I think simply "at" has the desired meaning; paraphrasing from a
> dictionary "expressing arrival in a particular place or position".
> "reached_at" would be redundant. The meaning I think you are
> referring to is from the idiom container.at(element_designator),
> where "at" is short for something like "reference/value at designated
> location".
OK
>
>> test/hotspot/jtreg/gc/TestConcurrentGCBreakpoints.java
>> 138 throw new RuntimeException("Expected support");
>> - Better explanation please as it is a bit confusing (at least) to me. I feel affirmative sentence seems not good for the message here. Maybe because I compared the message with the other case.
> Sorry, but I'm not understanding the issue? In this case we expected
> the current collector to support concurrent GC breakpoints, but it
> doesn't, so we report a test failure that we expected support. In the
> other case we expected the current collector to not support
> breakpoints, but found that it claims that it does, so we report a
> test failure that we have unexpected support. Both of these indicate a
> mismatch between the expectations of the test and the capabilities of
> the collector.
>
>
I think I understand the exception, but I was feeling 'Unexpected
un-support blah blah' or more detail saying 'current GC supports BP but
WhiteBox check returned un-support blah blah' kind of message seem
better explanation. But at least double negative (first example) would
make more confused.
I had a chat with Kim and now I agree with all of his comments.
Sorry for noisy comments.
Looks good to me as is.
Thanks,
Sangheon
More information about the hotspot-gc-dev
mailing list