RFR: 8293824: gc/whitebox/TestConcMarkCycleWB.java failed "RuntimeException: assertTrue: expected true, was false" [v2]

Kim Barrett kbarrett at openjdk.org
Thu Dec 15 08:15:14 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

I'm going to need to retarget this to jdk20.  Also, this change makes JDK-8298215 a reliable failure instead of very intermittent.  So closing this PR and I'll create a new one later, after doing something about JDK-8298215.

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

PR: https://git.openjdk.org/jdk/pull/11435


More information about the hotspot-dev mailing list