RFR: 8293824: gc/whitebox/TestConcMarkCycleWB.java failed "RuntimeException: assertTrue: expected true, was false"
Kim Barrett
kbarrett at openjdk.org
Wed Nov 30 16:50:38 UTC 2022
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
-------------
Commit messages:
- copyrights
- remove WB.g1StartConcMarkCyle
- update tests
- add utility GC breakpoint functions
- add G1ConcurrentMark::completed_mark_cycles() and whitebox access
Changes: https://git.openjdk.org/jdk/pull/11435/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=11435&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8293824
Stats: 268 lines in 21 files changed: 93 ins; 122 del; 53 mod
Patch: https://git.openjdk.org/jdk/pull/11435.diff
Fetch: git fetch https://git.openjdk.org/jdk pull/11435/head:pull/11435
PR: https://git.openjdk.org/jdk/pull/11435
More information about the hotspot-dev
mailing list