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