RFR: 8293824: gc/whitebox/TestConcMarkCycleWB.java failed "RuntimeException: assertTrue: expected true, was false" [v2]
Ivan Walulya
iwalulya at openjdk.org
Mon Dec 12 17:48:02 UTC 2022
On Tue, 6 Dec 2022 12:34:47 GMT, Kim Barrett <kbarrett at openjdk.org> wrote:
>> Please review this change to WhiteBox and some tests involving G1 concurrent GCs.
>>
>> Some tests currently use WhiteBox.g1StartConcMarkCycle() to trigger a
>> concurrent GC. Many of them follow it with a loop waiting for a concurrent
>> cycle to not be in progress. A few also preceed that call with a similar
>> loop, since that call does nothing and returns false if a concurrent cycle is
>> already in progress. Those tests typically want to ensure there was a
>> concurrent cycle that was started after some setup.
>>
>> The failing test calls that function, asserting that it returned true, e.g. a
>> new concurrent cycle was started.
>>
>> There are various problems with this, due to races with concurrent cycles
>> started automatically and possibly aborted (by full GCs) concurrent cycles,
>> making some of these tests unreliable in some configurations.
>>
>> For example, the test failure associated with this bug intermittently arises
>> when running with `-Xcomp`, triggering a concurrent cycle before the explicit
>> requests by the test, causing the explicit request to fail (because there is
>> already one in progress), failing the assert. Waiting for there not to be an
>> in-progress cycle before the explicit request just narrows the race window.
>>
>> We have a different mechanism for controlling concurrent cycles, the
>> concurrent GC breakpoint mechanism. By adding a counter specifically for such
>> cycles, we can use GC breakpoints to ensure only the concurrent cycles the
>> test wants are occurring, and can verify they completed successfully.
>>
>> So we change tests using WhiteBox.g1StartConcMarkCycle() to instead use GC
>> breakpoints, along with the new WhiteBox.g1CompletedConcurrentMarkCycles() to
>> avoid racing request problems and to detect aborted cycles. Since it is no
>> longer used, WhiteBox.g1StartConcMarkCycle() is removed.
>>
>> Testing:
>> mach5 tier1-6
>
> Kim Barrett has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains seven commits:
>
> - use new whitebox api for running conc gc
> - Merge branch 'master' into test-concmark
> - copyrights
> - remove WB.g1StartConcMarkCyle
> - update tests
> - add utility GC breakpoint functions
> - add G1ConcurrentMark::completed_mark_cycles() and whitebox access
Changes requested by iwalulya (Reviewer).
test/lib/jdk/test/whitebox/WhiteBox.java line 177:
> 175: // successful (e.g. it was aborted), then throws RuntimeException if
> 176: // errorIfFail is true, returning false otherwise.
> 177: public boolean g1RunConcurrentGC(boolean errorIfFail) {
Failure detection as described in the comment above is turned off for all test cases. Please verify if that is intentional.
-------------
PR: https://git.openjdk.org/jdk/pull/11435
More information about the hotspot-dev
mailing list