RFR: 8338763: GenShen: Global GC should not swap remembered sets for the verifier [v2]

Y. Srinivas Ramakrishna ysr at openjdk.org
Thu Aug 22 22:26:23 UTC 2024


On Thu, 22 Aug 2024 21:29:33 GMT, William Kemper <wkemper at openjdk.org> wrote:

>> It seems that subsequent improvements to remembered set verification have made this change unnecessary.
>> 
>> ## Testing
>> GHA, internal pipelines and local dacapo runs
>
> William Kemper has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Do not swap remembered set for global degenerated cycles either

Yes, it looks like the verification closure makes a distinction between when it's called and checks the appropriate version of the card table.

But the code is a bit subtle, and might benefit with a documentation note to this effect in the closure where one or the other version of the card table is used for the checks.


inline void work(T* p) {
    T o = RawAccess<>::oop_load(p);
    if (!CompressedOops::is_null(o)) {
      oop obj = CompressedOops::decode_not_null(o);
      if (_heap->is_in_young(obj)) {
        size_t card_index = _scanner->card_index_for_addr((HeapWord*) p);
        if (_init_mark && !_scanner->is_card_dirty(card_index)) {
          ShenandoahAsserts::print_failure(ShenandoahAsserts::_safe_all, obj, p, nullptr,
                                           "Verify init-mark remembered set violation", "clean card should be dirty", __FILE__, __LINE__);
        } else if (!_init_mark && !_scanner->is_write_card_dirty(card_index)) {
          ShenandoahAsserts::print_failure(ShenandoahAsserts::_safe_all, obj, p, nullptr,
                                           "Verify init-update-refs remembered set violation", "clean card should be dirty", __FILE__, __LINE__);
        }
      }
    }
  }

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

Marked as reviewed by ysr (Committer).

PR Review: https://git.openjdk.org/shenandoah/pull/485#pullrequestreview-2255906122


More information about the shenandoah-dev mailing list