[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-serviceability-dev
Subject:    Re: [jdk20] RFR: 8293824: gc/whitebox/TestConcMarkCycleWB.java failed "RuntimeException: assertTrue:
From:       Kim Barrett <kbarrett () openjdk ! org>
Date:       2022-12-24 6:51:58
Message-ID: SrUgx448r-lYaUKGZjvnNGyPIhQTeHujxNAC82j9SWY=.8d8b4d69-9d5f-4a03-9aea-5f8ee677fa49 () github ! com
[Download RAW message or body]

On Thu, 22 Dec 2022 02:04:30 GMT, Kim Barrett <kbarrett@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 due to 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
> request 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 in WhiteBox 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.  The test that began
> this adventure (TestConcMarkCycleWB.java) is also removed, since it no longer
> serves any purpose, having been purely a test of that removed function.
> 
> Testing:
> mach5 tier1-7 - running the changed tests on a variety of platforms with a
> variety of configurations.

BTW, after this change `GCCause::_wb_conc_mark` appears to no longer ever be issued.  \
I'm planning to remove it under the rubric of JDK-8235737.

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

PR: https://git.openjdk.org/jdk20/pull/71


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic