RFR: 8296419: [REDO] JDK-8295319: pending_cards_at_gc_start doesn't include cards in thread buffers

Kim Barrett kbarrett at openjdk.org
Wed Nov 9 05:06:06 UTC 2022


Let's try this again.  This is the original JDK-8295319 change, plus a couple
of small additions to fix problems with that original change.

The description of the original change was:

-----

Please review this change to G1 to include the per-thread buffers in the
number of pending cards at the start of a young GC.

DCQS::concatenate_logs has been renamed to concatenate_logs_and_stats, and now
also merges the per-thread refinement stats during the thread walk to flush
buffers. That replaces the separate thread walk to merge and record these
stats earlier in the GC. The merged stats and related info don't seem to be
needed until after the buffer flushing.

Also, when abandoning dirty card buffers and stats because of a full GC, fixed
to also abandon any buffers in the paused buffers lists.

-----

The problem was that by moving log concatenation earlier, it no longer
followed the call to retire_tlabs().  Among other things, that function
calls flush_deferred_card_mark_barrier() on each thread, possibly adding cards
to the thread's dirty card queue.  Doing that after the log concatenation may
lead to unprocessed cards in thread queues, with chaos ensuing.

To fix this, the call to retire_tlabs has also been moved, so that it once
again precedes the log concatenation.  Also added (debug-only) verification
that all thread dirty card queues are empty at the end of
pre_evacuate_collection_set.

A possible followup is to refactor those two operations, which each do a
(single-threaded) walk of all threads.  We could combine that into a single
walk.  We could also parallelize it if that seems warranted, though the
per-thread work is usually pretty small, so might not be worth parallelizing.

There might be an opportunity to do some similar refactoring for fullgc and
log abandonment, though there the two operations are done far away from each
other.

Testing:
mach5 tier1-6

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

Commit messages:
 - retire tlabs before processing thread dcq
 - verify empty dirty card logs
 - Revert "8296414: [BACKOUT] JDK-8295319: pending_cards_at_gc_start doesn't include cards in thread buffers"

Changes: https://git.openjdk.org/jdk/pull/11053/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=11053&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8296419
  Stats: 142 lines in 7 files changed: 68 ins; 47 del; 27 mod
  Patch: https://git.openjdk.org/jdk/pull/11053.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/11053/head:pull/11053

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


More information about the hotspot-gc-dev mailing list